首页 文章

遗传算法CrossOver

提问于
浏览
0

我有人口X的GA .

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

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

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

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

穿越基因时常见的做法是什么?

EDIT:

我的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 回答

  • 2

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

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

    • 在适应度函数中运行100个基因并获得结果 .

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

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

    • 从1)到3)重复直到收敛或X次迭代 .

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

    祝好运!

相关问题