利用GCN图卷积神经网络求解数独问题
前言
数独(shù dú, Sudoku)是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。
数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。

是否能利用深度学习进行数独问题的求解,有不少学者也已经进行过这方面的探索Rasmus Berg Palm和等人构造了相应的RRN(Recurrent Relationlation Network)网络结构
。该结构采用信息传递机制,定义9×9数独的每一个元胞为一个节点,满足数独规则的同一行,同一列或者同一个块为相邻节点,这样就定义了节点的相邻关系以及信息在节点之间的流动:
m i j t = f ( h i t − 1 , h j t − 1 ) {\color{Blue} m_{ij}^t=f(h_i^{t-1},h_j^{t-1})} mijt=f(hit−1,hjt−1)
m i j m_{ij} mij为 t t t时刻从 i i i节点到j节点传递的信息, h i t − 1 h_i^{t-1} hit−1为 t − 1 t-1 t−1时刻 i i i节点的隐藏状态。
有了相邻节点传递的信息之后就可以表示某一结点拥有的节点信息:
m j t = ∑ i ∈ N ( i ) m i j t {\color{DarkGreen} m_j^t=\sum_{i\in N(i)}^{}m_{ij}^t} mjt=i∈N(i)∑mijt将节点信息嵌入到网络中便是RRN网络的精髓。
Park等人也尝试过CNN直接解决数独问题,建立10层卷积层[512]将数独问题暴力求解,也得到了很好的效果。

本篇主要依托GCN及其CNN去尝试解决数独问题。所基于的深度学习框架为tensorflow2.7.
数据准备
这个数据集包含了1百万数独的数据,你可以在这里找到它。https://www.kaggle.com/bryanpark/sudoku

- 点击Download下载164M的CSV数独数据文件并解压至目录。
#构建数组数据
import numpy as np
quizzes = np.zeros((1000000, 81), np.int32)
solutions = np.zeros((1000000

本文介绍如何使用图卷积神经网络(GCN)高效求解数独问题。通过将数独视为图结构,利用节点间的关系定义邻接矩阵,进而提取数独的特征,最终实现快速准确的求解。
最低0.47元/天 解锁文章
644

被折叠的 条评论
为什么被折叠?



