首页 文章

生成下一代遗传算法

提问于
浏览
0

几个月前我做了一个遗传算法,但结果却是在解决任何问题的一周 . 我最初的目标是在游戏应用程序中使用遗传算法

现在我正在重新创建整个事物,并尝试从另一个角度来看待视图 .

现在我要定义下一代设置的步骤 .

我的最后一个想法是:

  • 从当前一代获取最高评分的基因并在下一代复制它们(数量由精英主义设定)

  • 取两个随机基因并交叉它们(被挑选的机会与基因等级相关),我制作了几种交叉方法(一点,两点,三父,平均,均匀...)

  • 使用上述方法用基因填充新一代

  • 对基因应用一些突变(被选择的机会由突变率设定)并且它将仅改变DNA的一部分(排除最高等级的基因)

事实证明这是非常低效的(我不知道为什么),并且由于交叉过程多次遍历所有基因,因此计算要求非常高 .

现在我正在考虑一种新的方法 .

基本上我的目标是保持基因并去除“坏”基因,并用交叉基因填充基因库 .

在一个拥有1.000个人的基因库中,我会:

  • 丢弃排名最低的500 .

  • 复制最高评分(10%精英,100分)

  • 使用交叉生成400个新基因 .

  • 应用突变

我太过于字面意思地采用了“几代人”的概念并使它们全部死亡(期待评分最高的那些),现在我将让所有人都活下去,期待那些坏人 . 并根据需要重新填充 .

我错过了什么吗?这种新方法会更好吗?

1 回答

  • 0

    垂直基因转移(传统的世代概念)有一种替代方法,即水平基因转移(见this paper) . 通过水平基因转移,种群大小在整个模拟过程中保持不变 .

    此外,当你繁殖基因型时(无论你选择哪种方法),你绝对不应该只保留最适合的候选人 . 如果您这样做,您找到的解决方案很可能是local optimum . 每个基因型都应该有机会进入下一代,最适合的机会更多(参见this answer关于线性等级选择) .

相关问题