我有人口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 回答
我真的不知道为什么你这样表现GA,你能提供一些参考吗?
无论如何,这是我实现功能GA方法的典型解决方案:
在适应度函数中运行100个基因并获得结果 .
根据标准化适应度函数(考虑每个基因从池中选择的概率)和交叉随机选择2个基因 . 重复此步骤,直到您有90个新基因(本案例为45次) . 保存前5名,无需修改和复制 . 总基因:100 .
对于90个新基因和新池中的5个重复基因允许它们根据您的突变概率(通常为1%)进行突变 . 总基因:100 .
从1)到3)重复直到收敛或X次迭代 .
注意:您始终希望保持最佳基因不变,例如在每次迭代中始终获得更好的解决方案 .
祝好运!