我对我的遗传算法和总体遗传算法有几个问题。
我创建了一个 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/
编辑:看起来托马斯的建议效果很好,我得到了非常快的结果,并且过早收敛。我觉得增加基因库会产生更好的结果,但我不确定它是否真的在每一代都变得更好,或者它是随机的事实是否允许它找到正确的解决方案。
编辑 2:按照 Thomas 的建议,我能够让它正常工作,似乎我在获得幸存者和扩大我的基因库方面遇到了问题。如果其他人想查看它,我最近还在我的 GA 测试中添加了常量。