想要了解更多关于 GA 的愿望再次燃起,与其大量阅读却无所事事,我决定从另一个方向开始:选择一个问题并尝试解决它。
我选择了魔方问题。为了编码染色体,我使用Permutation Encoding,以及Mutation()和NewChild(parent1, parent2, pivot)的以下方法。
我的选择算法有点奇怪,是根据网上找到的例子改编的。
分数是根据行/列/对角线之和与魔术常数之差的平方计算的,如下所示。
我注意到它收敛速度非常快,一旦达到 1..7 的分数(越少越好)就停止改进。
我认为这是:它达到了局部最优,一个潜在的井,如果你可以这样称呼它,并且不会因为突变不够不同而跳过附近的山丘?
我尝试将突变率更改为 5 - 80%,在染色体种群中留下 10-20% 的精英群体,将种群大小从 16-32 条染色体改变,但没有运气。
我究竟做错了什么?我可以使用哪些改进来使总体得分收敛到零?
如果需要,我可以发布完整的源代码,如果有人觉得它有用或想玩它。
更新:这是一个大小为 5 的立方体的收敛速度,交叉率为 60%,突变率为 10%: