【问题标题】:Genetic Algorithm Sudoku - optimizing mutation遗传算法数独 - 优化变异
【发布时间】:2012-03-27 04:51:09
【问题描述】:

我正在编写遗传算法来解决数独难题,并​​希望得到一些意见。该算法偶尔会解决谜题(大约 10 次中的 10 次在同一个谜题上,最多迭代 1,000,000 次),我试图获得一些关于突变率、重新填充和拼接的输入。非常感谢任何输入,因为这对我来说是全新的,我觉得我做的事情并不是 100% 正确的。

算法概览

健身功能

计算每个列、行和 3*3 子框中数字 1 到 9 的唯一值的数量。子集中的这些唯一值中的每一个都被求和并除以 9,从而产生介于 0 和 1 之间的浮点值。这些值的总和除以 27 提供介于 0 和 1 之间的总适应度值。1 表示已解决的难题。

人口规模: 100

选择:

轮盘赌法。每个节点都是随机选择的,其中包含较高适应度值的节点有更好的选择机会

复制: 两个随机选择的染色体/板交换随机选择的子集(行、列或 3*3 子集)子集(行、列或框)的选择是随机的。将生成的板引入人口中。

繁殖率:每个周期 12% 的种群 每次迭代有六次复制,导致每个算法循环有 12 条新染色体。

突变:在 10 次迭代后最高适应度没有改善,突变发生率为 2%。 下面列出了三种变异方法,它们具有不同的选择概率权重。

1:交换随机选择的数字。该方法选择两个随机数并在整个棋盘上交换它们。这种方法似乎对算法增长模式早期的增长影响最大。 25% 的机会被选中

2:引入随机变化:随机选择两个单元格并改变它们的值。这种方法似乎有助于防止算法收敛。 %65 的选择机会

3:统计棋盘中每个值的个数。一个已解决的棋盘包含 1 到 9 之间的每个数字的 9 个计数。此方法采用出现少于 9 次的任何数字,并随机将其与出现超过 9 次的数字交换。这似乎对算法有积极的影响,但只是很少使用。 %10 的选择机会

我的主要问题是我应该以什么速率应用突变方法。似乎随着我增加突变,我有更快的初始结果。然而,随着结果接近正确结果,我认为更高的变化率将太多的坏染色体和基因引入人群。然而,随着较低的变化率,算法似乎收敛得太早。

最后一个问题是是否有更好的变异方法。

【问题讨论】:

  • 我假设某些值是固定的并且不受突变的影响?另一种提问方式:这个问题是为了生成数独谜题还是为了解决具有固定约束的特定谜题而设计的?
  • 它旨在解决难题,是的,我保护了初始单元格。感谢您的输入

标签: artificial-intelligence genetic-algorithm


【解决方案1】:

我曾经使用 GA 制作了一个相当称职的数独求解器。在此处记录有关详细信息(包括不同的表示和突变)的博客: http://fakeguido.blogspot.com/2010/05/solving-sudoku-with-genetic-algorithms.html

【讨论】:

  • 是的,当我试图弄清楚这件事时,我非常广泛地查看了您的博客。它出现在谷歌的“数独遗传算法”的第一页。这是一个很大的帮助,非常感谢!
  • 我在这里也写了一篇文章:anthony-tresontani.github.com/Python/2012/12/31/…
【解决方案2】:

您可以随着时间的推移对突变率进行退火,以获得您所描述的那种收敛行为。但实际上我认为修改算法的其他部分可能会获得更大的收益。

轮盘选择通常会施加非常高的选择压力。它往往会在该过程的早期导致相当快的多样性丧失。二元锦标赛选择通常是开始试验的更好地方。这是一种更渐进的压力形式,同样重要的是,它可以更好地控制。

使用不那么激进的选择机制,您可以生产更多的后代,因为您不必担心会产生这么多最优秀的一两个个体的近似副本。而不是 12% 的人口产生后代(由于交配池中父母的重复可能更少),我会选择 100%。您不一定需要从字面上确保每个父母都参与,而只需生成与您的父母相同数量的后代。

某种形式的温和精英主义可能会有所帮助,这样您就不会失去好父母。如果他们比最差的 2-5 个后代更好,也许会从父母群体中保留最好的 2-5 个个体。

通过精英主义,您可以使用更高的突变率。您的所有三个运算符似乎都很有用。 (请注意,#3 实际上是嵌入在遗传算法中的一种局部搜索形式。就性能而言,这通常是巨大的胜利。实际上,您可以将#3 扩展为更复杂的循环方法直到它想不出如何进一步改进为止。)

对于您的三个变异算子,我没有看到明显更好/更差的权重集。我认为在这一点上,你已经牢牢地处于实验参数调整的范围内。另一个想法是在流程中注入一些知识,例如,在流程的早期,您可以随机选择它们。稍后,随着算法的收敛,请选择您认为更有可能帮助完成“几乎解决”的板的变异算子。

【讨论】:

  • 非常感谢您的意见。我需要一些时间来尝试这些建议,我会回复我的发现。再次感谢
猜你喜欢
  • 2015-02-18
  • 2013-07-02
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2021-03-03
相关资源
最近更新 更多