【发布时间】:2012-01-17 19:57:52
【问题描述】:
想了解更多关于 GA 的愿望再次燃起,我不再阅读大量内容而无所事事,而是决定从另一个角度开始:选择一个问题并尝试解决它。
我选择了Magic Square 问题。 对于编码我使用Permutation Encoding 的染色体,以及Mutation() 和NewChild(parent1, parent2, pivot) 的以下方法。
我的selection algorithm 有点怪,改编自网上的例子。
分数是根据行/列/对角线之和与魔术常数like this之差的平方计算得出的。
我注意到它收敛速度非常快,一旦达到 1..7 分(越少越好),就会停止改进。
我认为这是:它达到了局部最优,潜在的井,如果你可以这样称呼它,并且不会跳过附近的小山,因为突变不是不同够了吗?
我尝试将突变率更改为 5 - 80%,在染色体群体中留下 10-20% 的精英群体,将群体大小从 16-32 条染色体改变,但没有运气。
我做错了什么?我可以使用哪些改进来使总体得分收敛到零?
如果需要,我可以发布完整的源代码,如果有人觉得它有用或想玩它。
更新:这是大小为 5 的立方体的收敛速度,交叉率为 60%,突变率为 10%:
【问题讨论】:
-
我也使用二进制编码解决幻方问题,GA 总是从定义的搜索空间返回最佳解决方案。我建议您使用交叉和突变率以及基因组大小,因为它也会影响解决方案的正确性。保持5%的突变率,80-90%的交叉率,种群规模200,世代规模500-800。
标签: java genetic-algorithm magic-square