遗传算法CrossOver

时间:2014-06-22 22:42:15

标签: machine-learning artificial-intelligence genetic-algorithm

我有人口X的GA。

在运行基因并获得每个基因的结果后,我对基因做了一些加权乘法(因此排名较好的基因得到的倍数最多)

我得到x * 2或x * 2 +(x * 100/10)基因。 10%是随机新基因,它可能会或可能不会触发,具体取决于突变率。

问题是,我不知道再次将人口减少到X的最佳方法是什么。

如果基因是List我应该只使用list [:: 2](或从列表中获取每个偶数索引项)

跨基因的常见做法是什么?

修改

我的GA人口为100的例子;

  • 在适应度函数中运行100个基因并获得结果。现有人口:100
  • 添加10%的新随机基因。现有人口:110
  • 重复前10%的基因。现有人口:121
  • 去除10%最差的基因。现有人口:108
  • 结合所有可能的基因(无重复)。现有人口:5778
  • 从基因库移除基因直至群体= 100.当前群体:100
  • 重新启动健身功能

我想知道的是:我该如何做最后一步?目前我有一个包含5778个项目的列表,我每隔'58'取一个或表示为len(list)/ startpopulation-1

或者我应该在random.delete中使用'while True'直到len(list)== 100?

应在交叉之前或之后添加新的随机基因?

有没有办法对顶级到最低级别的项目进行gausian倍增?

例如:最高评级乘以n,第二名乘以(n-1),第三名乘以(n-2)......,最差评级乘以(n-n)。

1 个答案:

答案 0 :(得分:2)

我真的不知道为什么你这样做GA,你能提供一些参考吗?

无论如何,这是我实现功能性GA方法的典型解决方案:

  1. 在适应度函数中运行100个基因并得到结果。

  2. 根据归一化适应度函数随机选择2个基因 (考虑一下每个基因的选择概率 游泳池)和交叉。重复此步骤,直到您有90个新基因 (本案例为45次)。保存前5名,无需修改 重复。总基因:100。

  3. 对于90个新基因和新池中的5个重复允许 它们根据你的变异概率(通常为1%)进行变异。 总基因:100。

  4. 从1)重复到3)直到收敛,或X数 迭代。

  5. 注意:您总是希望保持最佳基因不变,例如在每次迭代中始终获得更好的解决方案。

    祝你好运!