我有人口X的GA。
在运行基因并获得每个基因的结果后,我对基因做了一些加权乘法(因此排名较好的基因得到的倍数最多)
我得到x * 2或x * 2 +(x * 100/10)基因。 10%是随机新基因,它可能会或可能不会触发,具体取决于突变率。
问题是,我不知道再次将人口减少到X的最佳方法是什么。
如果基因是List我应该只使用list [:: 2](或从列表中获取每个偶数索引项)
跨基因的常见做法是什么?
修改
我的GA人口为100的例子;
我想知道的是:我该如何做最后一步?目前我有一个包含5778个项目的列表,我每隔'58'取一个或表示为len(list)/ startpopulation-1
或者我应该在random.delete中使用'while True'直到len(list)== 100?
应在交叉之前或之后添加新的随机基因?
有没有办法对顶级到最低级别的项目进行gausian倍增?
例如:最高评级乘以n,第二名乘以(n-1),第三名乘以(n-2)......,最差评级乘以(n-n)。
答案 0 :(得分:2)
我真的不知道为什么你这样做GA,你能提供一些参考吗?
无论如何,这是我实现功能性GA方法的典型解决方案:
在适应度函数中运行100个基因并得到结果。
根据归一化适应度函数随机选择2个基因 (考虑一下每个基因的选择概率 游泳池)和交叉。重复此步骤,直到您有90个新基因 (本案例为45次)。保存前5名,无需修改 重复。总基因:100。
对于90个新基因和新池中的5个重复允许 它们根据你的变异概率(通常为1%)进行变异。 总基因:100。
从1)重复到3)直到收敛,或X数 迭代。
注意:您总是希望保持最佳基因不变,例如在每次迭代中始终获得更好的解决方案。
祝你好运!