基于Matlab如何制作一个数独求解器


这篇“基于Matlab如何制作一个数独求解器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于Matlab如何制作一个数独求解器”文章吧。首先我们先尝试如果只满足行、列、3×3块加和均为45的等式约束是否有效。即约束为:每行和为45:每列和为45:每个3×3块和为45:其中对此编写如下代码:那么,这么简单就能够解决数独了嘛???当然不行。。。。上述程序运行结果为:1 8 5 6 2 9 9 1 4
2 9 9 7 4 3 5 1 5
3 1 7 1 4 9 8 3 9
7 2 1 8 9 4 4 5 5
9 6 1 4 1 1 9 8 6
8 7 4 1 8 9 1 6 1
2 1 9 1 9 3 3 9 8
4 9 8 8 5 6 1 3 1
9 2 1 9 3 1 5 9 6可以发现我们的约束确实保证了三种加和都是45,但是不能保证同行、同列、同3×3块内不出现同样的数字,那咋办,总不能一个元素一个元素添加不相等信息吧、我们怎样能让矩阵包含更多的信息,更方便的阐述各个元素之间的联系呢?欸,我们原本是9×9大小的矩阵,要描述每个元素和同一行各个元素、和同一列各个元素之间的联系,一个很自然的想法就是升维!将99的数独矩阵转化为999的三维矩阵(张量),此时X(i,j,k)=1意味原矩阵第i行,第j列的元素为k,整个整数规划从现在开始变成了0-1规划,要想同一行的数值都不免费云主机域名一样,只需要所有的行纤维的和都是1,想要同一列的数值都不一样,只需要所有列纤维的和都是1,非常奇妙的,我们又把问题转换为了一个线性求和的问题,very amazing啊!此时约束条件变为:原矩阵每个小格子只能有一个数值:原矩阵每一行的各个数字均不同:原矩阵每一列的各个数字均不同:原矩阵每一个3×3块各个数字均不同:其中因此编写如下代码求解结果为:LP:Optimal objective value is 81.000000.Optimal solution found.Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05resultMat1 8 5 6 2 9 7 3 4
6 9 2 7 4 3 8 1 5
3 4 7 1 8 5 6 2 9
9 2 1 3 6 8 4 5 7
5 6 3 4 7 1 9 8 2
8 7 4 5 9 2 1 6 3
2 5 6 9 1 7 3 4 8
4 3 9 8 5 6 2 7 1
7 1 8 2 3 4 5 9 6历时 0.017170 秒,快到离谱。不得不说MATLAB规划算法还是niubility!想要做读取图片后识别数独矩阵的功能,但是本文做的只是一个基础款,没打算搞歪歪斜斜的数独题目图像,也没打算识别那些手写字体,于是既没有做角度矫正,也没搞CNN数字识别,大家学会基础款后可以自行添加相关功能,本文中的数字识别只是将图像切割后和数字库里几个图像进行对比:只是做了简单的最小二乘法,求差值平方和,找到差异最小的图片,非常的简单,因此只能应对一些横平竖直的数独题目。反正都很简单,我就GUI版本和App designer版本都做了,以下仅展示GUI版本代码以上就是关于“基于Matlab如何制作一个数独求解器”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注百云主机行业资讯频道。

相关推荐: ps用吸管取样后怎么上色

这篇文章主要介绍“ps用吸管取样后怎么免费云主机域名上色”,在日常操作中,相信很多人在ps用吸管取样后怎么上色问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ps用吸管取样后怎么上色”的疑惑有所帮助!接下来,请跟着小编一起来学习吧…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/06 17:48
Next 05/06 17:48

相关推荐