数独求解器的神经网络

时间:2017-06-06 18:17:53

标签: neural-network artificial-intelligence sudoku

我最近开始学习神经网络,我认为创建一个数独求解器对于NN来说是一个不错的应用。我开始用向后传播神经网络学习它们,但后来我发现有几十个神经网络。在这一点上,我发现很难学习所有这些,然后为我的目的选择一个合适的。因此,我想问一下创建这个求解器的好选择。可以在这里反向传播NN吗?如果没有,你能解释原因并告诉我哪一个可以工作。 谢谢!

4 个答案:

答案 0 :(得分:3)

正如其他人已经指出的那样,神经网络似乎并不是解决数独游戏的最佳方法。我认为更好(但也不是非常好/有效)的方法是使用遗传算法。遗传算法与NN没有直接关系,但知道它们如何工作非常有用。

更好(更好的意思是更有可能是狡猾的,可能更适合你学习新东西)的想法包括:

如果您使用图书馆:

  • 使用网络,尝试将它们训练到不同的数据集,可能是随机数,看看你得到了什么,以及如何调整参数以获得更好的结果。

  • 尝试编写图像生成器。我写了一些,他们是我最喜欢的项目,其中一个我使用backprop教NN图像的x / y坐标具有哪种颜色,另一个aproach将随机生成的图像与另一个相结合(GAN / NEAT)。

  • 尝试使用创建网络学习的电影(系列图像)来创建图片。它将向您展示backprop的工作原理以及参数调整对结果的影响以及它如何改变网络的结果。

如果您没有使用图书馆:

  • 尝试一个接一个地解决容易出问题的问题。使用backprop或遗传算法进行培训(无论您实施了什么)。

  • 尝试改进您的实施并更改其他人不关心的事情,并了解它如何改变结果。

您网络的“任务”列表:

  1. XOR(基本上是NN的问候世界)
    1. 极点平衡问题
    2. 像pong这样的简单游戏
    3. 更复杂的游戏,如flappy bird,agar.io等。
    4. 选择您感兴趣的更多问题,也许您会进入图像识别,也可能是文本,音频,谁知道。想想你能够/希望能做的事情,并找到一种方法让你的电脑为你做。
  2. 不建议仅使用您自己的NN实现,因为它可能在前几次无法正常工作,您会感到沮丧。试用图书馆和你自己的实现。

    找到几乎无穷无尽的资源的好方法: 使用谷歌搜索并最后添加'filetype:pdf',以便只显示pdf文件。搜索神经网络,遗传算法,进化神经网络。

答案 1 :(得分:1)

就像评论中提到的那样,你可能想看看convolutional networks。你基本上输入数独bord作为二维'图像'。我认为使用3x3的感知领域会非常有趣,而且我认为你不需要多个过滤器。

更难的是规范化:数字1-9在数独中没有潜在关系,你可以轻松地用A-I代替它们。所以他们是类别,而不是数字。但是,每个输出的单热编码意味着很多输入,所以我坚持数值标准化(1 = 0.1,2 = 0.2等)

您的网络输出应该是某种类型的softmax:如果您不使用softmax,而只是输出x和y坐标,那么您无法确保未填充的输出方块爱好。

数值应与输出一起传递,以显示网络要填写的数字。

答案 2 :(得分:1)

正如PLEXATIC所提到的,神经网络并不适合这类任务。遗传算法听起来确实很好。

但是,如果您仍想坚持神经网络,可以查看https://github.com/Kyubyong/sudoku。正如Thomas W所回答的,3x3看起来很不错。

如果你不想处理CNN,你也可以在这里找到一些答案。 https://www.kaggle.com/dithyrambe/neural-nets-as-sudoku-solvers

答案 3 :(得分:1)

神经网络和非GA都不接近数独的理想解决方案。我建议研究一下Constraint Programming(例如Choco或Gecode求解器)。例如,请参阅https://gist.github.com/marioosh/9188179。应该在几毫秒内解决任何9x9数独(每日Sudokus of" Le monde" journal是使用这种技术BTW创建的。)

还有一个着名的"舞蹈链接" Knuth解决这个问题的算法效果很好https://en.wikipedia.org/wiki/Dancing_Links