Neural network 数独求解器的神经网络

Neural network 数独求解器的神经网络,neural-network,artificial-intelligence,sudoku,Neural Network,Artificial Intelligence,Sudoku,我最近开始学习神经网络,我认为创建一个数独解算器将是神经网络的一个很好的应用。我开始用反向传播神经网络学习它们,但后来我发现有几十个神经网络。在这一点上,我发现很难学习所有这些,然后选择一个适合我的目的。因此,我想问创建此解算器的最佳选择是什么。反向传播能在这里工作吗?如果没有,你能解释一下为什么,并告诉我哪一个可以工作。 谢谢 就像评论中提到的那样,你可能想看看。你基本上把数独游戏输入为一个二维的“图像”。我认为使用3x3的感受野会很有趣,而且我真的认为你不需要一个以上的过滤器 更困难的事情是

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

就像评论中提到的那样,你可能想看看。你基本上把数独游戏输入为一个二维的“图像”。我认为使用3x3的感受野会很有趣,而且我真的认为你不需要一个以上的过滤器

更困难的事情是规范化:数字1-9在数独中没有潜在的关系,例如,你可以很容易地用A-I替换它们。所以它们是类别,而不是数字。然而,每个输出一个热编码将意味着大量的输入,所以我坚持使用数字标准化(1=0.1,2=0.2,等等)

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


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

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

更好的(我的意思是说更好更可能成功,也可能更好地让你学到新东西)想法包括:

如果您使用库:

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

  • 尝试编写一个图像生成器。我写了一些,它们仍然是我最喜欢的项目,其中一个我用backprop教NN图像的x/y坐标是什么颜色,另一个是将随机生成的图像与另一个图像(GAN/NEAT)结合起来

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

如果未使用库,请执行以下操作:

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

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

网络的“任务”列表:

  • XOR(基本上是NN的hello世界)
  • 极点平衡问题
  • 像乒乓球这样的简单游戏
  • 更复杂的游戏,如flappy bird、agar.io等
  • 选择更多你感兴趣的问题,也许你喜欢图像识别,也许文字,音频,谁知道呢。想一想你能/想做的事情,并找到一种方法让你的电脑为你做这件事
  • 只使用自己的NN实现是不可取的,因为它在最初几次可能无法正常工作,您会感到沮丧。尝试使用Library和您自己的实现

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

    如PLEXATIC所述,神经网络并不真正适合此类任务。遗传算法听起来确实不错

    然而,如果你仍然想坚持使用神经网络,你可以看看。正如Thomas W所回答的,3x3看起来不错


    如果你不想和CNN打交道,你也可以在这里找到一些答案

    无论是神经网络还是GAs都接近于数独的理想解。我建议研究约束编程(例如Choco或Gecode解算器)。例如,见。应该能在几毫秒内解决任何9x9数独问题(顺便说一句,《世界报》的每日数独都是使用这种技术创建的)


    Knuth针对这个问题还提出了一个著名的“舞蹈链接”算法,该算法效果非常好

    神经网络可能不适合数独解算器,因为NNs最擅长模式发现。将数独作为一个约束满足问题将更好地工作。这里有一些用于数独求解器的神经网络项目的例子。也许这不是解决问题的最佳方法,但我认为至少在练习中值得这样做。我不确定你在最后一句话中说了什么。再说一次,我是初学者。对不起,我不明白。酷,我不知道它们会起作用。你可能需要某种卷积神经网络。反向传播只是一种训练神经网络的方法,它的应用非常广泛。反向传播是一种梯度计算算法,而不是一种学习算法。我不会浪费时间去学习NNs的数独游戏,但我会做一些我期望更成功的事情。@sascha有什么想法值得学习吗?谢谢你的回答。我在想我是否应该从一个简单的项目开始。如果你有任何关于哪个项目可能是一个好的学习想法,让我知道。