首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遗传算法CrossOver

遗传算法CrossOver
EN

Stack Overflow用户
提问于 2014-06-22 22:42:14
回答 1查看 315关注 0票数 0

我有一个人口的遗传算法。

在我运行这个基因并得到每个基因的结果之后,我对这些基因做一些加权乘法(这样排名越好的基因就能得到最多的倍数)。

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

问题是,我不知道怎样才能使人口再次减少到X。

如果基因是一个列表,我应该只使用list::2

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

编辑:

我的遗传算法的例子,人口为100;

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

我想知道的是:我应该怎么做最后一步?目前,我有一个包含5778个条目的列表,每'58‘就取一个,或者表示为len( list )/ every 1。

或者,我应该在random.delete中使用“while”,直到len(list) == 100?

新的随机基因应该在杂交前后添加吗?

有没有办法使最高到最低等级的项目进行一个标准乘数?

例如:最高的等级乘以n,第二最好的乘以(n-1),第三的乘以(n-2) .,最差的乘以(n-n)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-23 09:18:46

我真的不知道你为什么要那样表演GA,你能给我一些参考吗?

在任何情况下,这里都是实现函数GA方法的典型解决方案:

  1. 对健身功能中的100个基因进行运行,得到结果。
  2. 根据归一化适应度函数随机选择两个基因(考虑每个基因从池中选择的概率)并进行交叉。重复这个步骤,直到你有了90个新基因(这个例子是45次)。保存前5没有修改和重复。基因总数: 100。
  3. 对于90个新基因和新的池中的5个重复基因,允许它们根据突变概率进行变异(通常为1%)。基因总数: 100。
  4. 从1)重复到3),直到收敛,或X次迭代。

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

祝好运!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24356455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档