【问题标题】:Genetic Algorithm CrossOver遗传算法交叉
【发布时间】:2014-08-12 22:25:28
【问题描述】:

我有一个人口为 X 的 GA。

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

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

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

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

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

编辑:

我的 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?

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

有没有办法对评分从高到低的项目进行高斯乘法?

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

【问题讨论】:

  • 你能去掉上一次迭代中适应度最低的基因吗?

标签: machine-learning artificial-intelligence genetic-algorithm


【解决方案1】:

我真的不知道你为什么要这样执行 GA,你能提供一些参考吗?

无论如何,这是我实现功能性 GA 方法的典型解决方案:

  1. 运行适应度函数中的100个基因,得到结果。

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

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

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

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

祝你好运!

【讨论】:

  • 我没有参考资料。我是GA的新手。我认为这会产生更好的加权平均值。但是你把这种方式似乎少了很多计算。适应度函数的归一化是怎么做的?
  • @f.rodrigues 在计算每个基因的适应度后,将所有基因的适应度相加并除以 [ f_gene=f_gene./sum(f_gene) ] 选择称为轮盘赌选择。
猜你喜欢
  • 1970-01-01
  • 2016-08-31
  • 2015-07-03
  • 2016-09-16
  • 1970-01-01
  • 2011-10-11
  • 2015-07-15
  • 2019-08-19
相关资源
最近更新 更多