提问者:小点点

生成下一代遗传算法


几个月前,我做了一个遗传算法,但结果证明我在解决任何问题上都非常努力。我最初的目标是在游戏应用中使用遗传算法

现在我正在重新创建整个过程,并试图从另一个角度来看待这个问题。

现在我将定义设置下一代的步骤。

我最后的想法是:

>

  • 从当前世代中获得最高评级的基因,并在下一代中复制它们(数量由精英设置)

    取两个随机基因进行交叉(选择的机会与基因等级相关),我做了几种交叉方法(一点、两点、三个父母、平均、均匀…)

    用上述方法给新一代注入基因

    对基因应用一些突变(被选择的几率由突变率决定),它只会改变部分DNA(排名靠前的基因除外)

    这被证明是非常低效的(我不知道为什么),而且非常需要计算,因为交叉过程在所有基因上循环了好几次。

    现在我在用一种新的方法思考。

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

    在有1000个个体的基因库中,我会:

    >

  • 丢弃排名最低的500个。

    复制最高评级(在10%精英主义中为100)

    使用交叉产生400个新基因。

    应用突变

    我把“世代”的概念太字面化了,让他们都死了(期待最高评级的人),现在我会让他们都活着,期待糟糕的人。并根据需要重新填充。

    我遗漏了什么吗?这种新方法会更好吗?


  • 共1个答案

    匿名用户

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

    此外,当你培育基因型时(无论你选择哪种方法),你绝对不应该在几代人中只保留最合适的候选人。如果您这样做,您找到的解决方案很可能是局部最优的。每个基因型都应该有机会传给下一代,适者生存的人有更好的机会(参见关于线性排序选择的答案)。