【问题标题】:Solving the Magic Square with Genetic Algorithms: population score converges fast, but never reaches the goal?用遗传算法解决魔方:人口分数收敛快,但永远达不到目标?
【发布时间】: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


【解决方案1】:

对此没有硬性和快速的答案,但我建议将您的精英主义减少到不超过 5% 并增加您的人口规模。我不太明白您的 getPermutation() 调用是如何选择潜在候选人的,但随着人口规模的增加,我也会增加锦标赛的规模(选择算法中的第 8-16 行)。如果您陷入局部最优状态,则意味着您的突变功能跳得不够远,或者您的种群一开始就没有足够的多样性。

希望对你有帮助,祝你好运!

【讨论】:

    【解决方案2】:

    在这种情况下,我使用了具有良好结果的亚群。您基本上将算法运行 n 次并在每次运行中选择最佳个体。有了这些,您就形成了一个初始种群(而不是像通常的运行那样随机初始化)并再次运行 ga。最后一次运行中的起始个体通常以不同的方式处于次优状态,并且由于它们都或多或少具有相同的适应度,因此当它们组合在一起时,它们倾向于将彼此从局部最小值中拉出来。在这里使用精英主义也是一个好主意,以免轻易失去已经进化的个体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-24
      • 2020-12-03
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      相关资源
      最近更新 更多