我有一个人口X的GA。
在我运行基因并得到每个基因的结果后,我对基因做了一些加权乘法(因此排名更好的基因得到的乘法最多)
我得到x*2或x*2(x*100/10)基因。这10%是随机的新基因,它可能会触发,也可能不会触发,这取决于突变率。
问题是,我不知道将人口再次减少到X的最佳方法是什么。
如果基因是一个列表,我应该使用List[::2](或者从列表中获取每个偶数索引项)
基因交叉时常见的做法是什么?
编辑:
我的GA与100人口的例子;
我想知道的是:最后一步该怎么做?目前,我有一个包含5778个项目的列表,我每58个项目中取一个,或者表示为len(list)/start人口-1
或者我应该使用'而真'与random.delete直到len(list)==100?
新的随机基因应该在交叉之前还是之后添加?
有没有办法将排名靠前的项目与排名靠后的项目进行高斯乘法?
e、 g:最高等级乘以n,第二级乘以(n-1),第三级乘以(n-2)。。。,最差额定值乘以(n-n)。
我真的不知道你为什么这样表演遗传算法,你能给一些参考吗?
在任何情况下,这里都是我实现功能性GA方法的典型解决方案:
>
基于归一化适应度函数(考虑每个基因从池中被选择的概率)和交叉随机选择2个基因。重复此步骤,直到你有90个新基因(本例为45次)。保存前5名,无需修改和复制。基因总数:100。
对于新池中的90个新基因和5个重复基因,允许它们根据你的突变概率(通常为1%)进行突变。基因总数:100。
从1)重复到3)直到收敛,或重复X次迭代。
注意:你总是希望保持最好的基因不变,比如你总是在每次迭代中得到一个更好的解决方案。
祝你好运!