我最近开始学习神经网络,我认为创建一个数独求解器对于NN来说是一个不错的应用。我开始用向后传播神经网络学习它们,但后来我发现有几十个神经网络。在这一点上,我发现很难学习所有这些,然后为我的目的选择一个合适的。因此,我想问一下创建这个求解器的好选择。可以在这里反向传播NN吗?如果没有,你能解释原因并告诉我哪一个可以工作。 谢谢!
答案 0 :(得分:3)
正如其他人已经指出的那样,神经网络似乎并不是解决数独游戏的最佳方法。我认为更好(但也不是非常好/有效)的方法是使用遗传算法。遗传算法与NN没有直接关系,但知道它们如何工作非常有用。
更好(更好的意思是更有可能是狡猾的,可能更适合你学习新东西)的想法包括:
如果您使用图书馆:
使用网络,尝试将它们训练到不同的数据集,可能是随机数,看看你得到了什么,以及如何调整参数以获得更好的结果。
尝试编写图像生成器。我写了一些,他们是我最喜欢的项目,其中一个我使用backprop教NN图像的x / y坐标具有哪种颜色,另一个aproach将随机生成的图像与另一个相结合(GAN / NEAT)。
尝试使用创建网络学习的电影(系列图像)来创建图片。它将向您展示backprop的工作原理以及参数调整对结果的影响以及它如何改变网络的结果。
如果您没有使用图书馆:
尝试一个接一个地解决容易出问题的问题。使用backprop或遗传算法进行培训(无论您实施了什么)。
尝试改进您的实施并更改其他人不关心的事情,并了解它如何改变结果。
您网络的“任务”列表:
不建议仅使用您自己的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