gpt4 book ai didi

java - 遗传算法 - 收敛

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:33 27 4
gpt4 key购买 nike

我有几个关于我的遗传算法和整体 GA 的问题。

我创建了一个 GA,当给定一条曲线时,它会尝试找出产生这条曲线的函数。

例子如下积分

{{-2, 4},{-1, 1},{0, 0},{1, 1},{2, 4}}

函数

x^2

有时我会给它点永远不会产生函数,或者有时会产生函数的点。它甚至可以取决于初始树的深度。

一些问题:

  • 为什么树的深度在尝试评估点和产生令人满意的功能?
  • 为什么我有时会过早收敛而 GA 从来没有如果循环爆发?
  • 我能做些什么来防止过早收敛?
  • 退火怎么样?我该如何使用它?

你能快速看一下我的代码并告诉我它是否有明显的错误吗? (这是测试代码,我需要做一些代码清理。)

https://github.com/kevkid/GeneticAlgorithmTest

来源:http://www.gp-field-guide.org.uk/

编辑:看起来 Thomas 的建议很有效,我得到了非常快的结果,并且过早收敛的情况更少。我觉得增加基因库会带来更好的结果,但我不确定它是否真的在每一代都变得更好,或者它是随机的这一事实是否允许它找到正确的解决方案。

编辑 2:按照 Thomas 的建议,我能够让它正常工作,似乎我在获得幸存者和扩大我的基因库方面遇到了问题。另外,如果其他人想查看它,我最近将常量添加到我的 GA 测试中。

最佳答案

为了避免过早收敛,您还可以使用多个子群体。每个亚种群都将独立进化。在每一代结束时,您可以在亚种群之间交换一些个体。

我为遗传编程变体实现了多个亚群:http://www.mepx.org/source_code.html

关于java - 遗传算法 - 收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30892221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com