提问者:小点点

遗传算法交叉


我有一个人口X的GA。

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

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

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

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

基因交叉时常见的做法是什么?

编辑:

我的GA与100人口的例子;

  • 运行适应度函数中的100个基因并得到结果。现有人口:100人
  • 添加10%新的随机基因。现有人口:110人
  • 复制前10%的基因。现有人口:121人
  • 去除10%最坏的基因。目前人口: 108人
  • 合并所有可能的基因(无重复)。目前人口: 5778
  • 从genepool中删除基因,直到种群=100。现有人口:100人
  • 重启适应度功能

我想知道的是:最后一步该怎么做?目前,我有一个包含5778个项目的列表,我每58个项目中取一个,或者表示为len(list)/start人口-1

或者我应该使用'而真'与random.delete直到len(list)==100?

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

有没有办法将排名靠前的项目与排名靠后的项目进行高斯乘法?

e、 g:最高等级乘以n,第二级乘以(n-1),第三级乘以(n-2)。。。,最差额定值乘以(n-n)。


共1个答案

匿名用户

我真的不知道你为什么这样表演遗传算法,你能给一些参考吗?

在任何情况下,这里都是我实现功能性GA方法的典型解决方案:

>

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

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

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

注意:你总是希望保持最好的基因不变,比如你总是在每次迭代中得到一个更好的解决方案。

祝你好运!