【问题标题】:neural network for sudoku solver数独求解器的神经网络
【发布时间】:2017-11-07 21:22:15
【问题描述】:

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

【问题讨论】:

  • 神经网络可能不适用于数独求解器,因为 NN 最擅长寻找模式。将数独作为一个约束满足问题会更好。
  • 有数独求解器的神经网络项目示例。可能这不是解决问题的最佳方法,但我认为至少值得练习。不确定你在最后一句话中所说的内容。再说一次,我是初学者。抱歉不理解
  • 酷,我不知道他们会工作。您可能需要某种卷积神经网络。反向传播只是一种训练神经网络的方法。
  • 这个范围很广。反向传播是一种梯度计算算法,而不是学习算法。而且我不会浪费时间用 NN 来接近数独,而是做一些我期望取得更大成功的事情。
  • @sascha 有哪些值得学习的想法?

标签: neural-network artificial-intelligence sudoku


【解决方案1】:

除了 GA 之外,神经网络都不是数独的理想解决方案。我建议研究约束编程(例如 Choco 或 Gecode 求解器)。例如,请参阅https://gist.github.com/marioosh/9188179。应该在几毫秒内解决任何 9x9 数独(顺便说一句,“世界”杂志的每日数独都是使用这种技术创建的)。

Knuth 还为这个问题提供了一个著名的“Dancing links”算法,效果很好https://en.wikipedia.org/wiki/Dancing_Links

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      更好(更好我的意思是更有可能是 sussessful 并且可能更好地让你学习新东西)想法包括:

      如果您使用库:

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

      • 尝试编写一个图像生成器。我写了其中一些,它们仍然是我最喜欢的项目,其中一个我使用反向传播来教 NN 图像的 x/y 坐标具有哪种颜色,另一种方法将随机生成的图像与另一个(GAN /NEAT)。

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

      如果您不使用库:

      • 尝试一个接一个地解决简单的问题。使用反向传播或遗传算法进行训练(无论您实施了什么)。

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

      您的网络的“任务”列表:

      1. XOR(基本上是 NN 的 hello world)
        1. 极平衡问题
        2. 乒乓之类的简单游戏
        3. 更复杂的游戏,如 Flappy Bird、agar.io 等。
        4. 选择更多你觉得有趣的问题,也许你对图像识别感兴趣,也许是文本、音频,谁知道呢。想一想您可以/希望能够做的事情,并找到一种方法让您的计算机为您做这件事。

      不建议只使用您自己的 NN 实现,因为它可能在前几次无法正常工作,您会感到沮丧。尝试使用库和您自己的实现。

      找到几乎无穷无尽的资源的好方法: 使用谷歌搜索并在末尾添加“filetype:pdf”以便仅显示 pdf 文件。搜索神经网络、遗传算法、进化神经网络。

      【讨论】:

        【解决方案4】:

        就像在 cmets 中提到的那样,您可能想看看convolutional networks。您基本上将数独边框输入为二维“图像”。我认为使用 3x3 的感受野会很有趣,而且我真的认为您不需要多个过滤器。

        更难的是标准化:数字 1-9 在数独中没有潜在关系,例如,您可以轻松地将它们替换为 AI。所以它们是类别,而不是数字。但是,对每个输出进行一次热编码将意味着 大量 输入,所以我会坚持数值归一化(1=0.1、2 = 0.2 等)

        你的网络的输出应该是某种softmax:如果你不使用softmax,而是只输出一个x和y坐标,那么你不能保证输出的正方形没有被填充还没有。

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

        【讨论】:

        • 感谢您的回答。我正在考虑是否应该从一个更简单的项目开始。如果您对哪个项目可能适合学习有任何想法,请告诉我。
        猜你喜欢
        • 1970-01-01
        • 2020-03-19
        • 2015-04-24
        • 2017-06-26
        • 2016-03-07
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多