利用GCN图卷积神经网络求解数独问题

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

利用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(hit1,hjt1)

m i j m_{ij} mij t t t时刻从 i i i节点到j节点传递的信息, h i t − 1 h_i^{t-1} hit1 t − 1 t-1 t1时刻 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=iN(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值