【发布时间】:2015-06-17 12:53:33
【问题描述】:
我有几个关于我的遗传算法和遗传算法的问题。
我创建了一个 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: 按照托马斯的建议,我能够让它正常工作,似乎我在获得幸存者和扩大我的基因库方面遇到了问题。如果其他人想看的话,我最近还在我的 GA 测试中添加了常量。
【问题讨论】:
-
@dcsohl 解决了这个问题
-
嗯,如果我错了,请纠正我,但你总是可以通过以下求和来构造这样的函数 -
y0*(x-x1)*(x-x2)*.../(x0-x1)*(x0-x2)*... + ...。所以不需要 GA。 -
很好奇,您使用什么算法来确定给定的一组点是否适合封闭形式函数?例如,如果将示例中的最后 4 个交换为 5,您的算法会失败吗?
-
@PavelHoral 对,但我只是在使用这个问题,所以我可以更多地理解 GA。这是我第一次尝试编写 GA。它会失败(或给出不满意的答案)。 mohsenmadi 我根据树检查 x 值,这给了我一个 y 值,然后我根据已知值检查 y。所以如果 x=-2 并在 -2 处评估树给我 4 这是正确的答案。它给我的答案越正确,适应度就越高。
-
并非所有问题都可以通过 GA 解决......而且这个问题看起来确实很难。我可以想到一个好的适应度函数,但是我想不出任何能够产生更好评分解决方案的合理交叉函数。你应该选择一个不同的问题来学习 GA。
标签: java algorithm function genetic-programming convergence