美文网首页算法
智慧金字塔的数学模型与求解

智慧金字塔的数学模型与求解

作者: 风之骑士_4926 | 来源:发表于2017-10-15 15:25 被阅读231次

       高一的时候看到同学玩智慧金字塔,深感有趣,于是我也买了一套在家里慢慢玩。在高二的暑假我把第5册第11阶段的题目都做出来了,然后试试第12阶段的题目,发现那根本就不是人玩的。。。他喵的,已知两块甚至更少的积木然后让你拼出5层的金字塔,要尝试的可能性实在是太多了;就算你直觉敏锐能看出些端倪,但这些残忍的题目还是完全能够将一个强迫症患者折磨至死。 (根据我的受虐体会,智慧金字塔题目的难度到达一定程度之后,需要的更多是逻辑推理而不是空间想象。)

A~L编号共12块积木 其中一种拼法 残忍的题目

       后来呢,学了些简单的模型和算法,视野宽了点,返过来又思考智慧金字塔。也知道了其实智慧金字塔的玩法就是所谓的“精确覆盖问题”,我感觉应该有希望用“0-1规划”的数学模型求解。于是我用简化了的情形在LINGO上求解一下,发现可行。现在分享一下这个思路。。。

       考虑的简化情形是:只用如下的F和K编号的积木,

        而需要填充的形状为

对每个空位作了编号

        对于这种简单的情形,一眼便能看出答案一定是

       但如果要用数学方法借助计算机求解,则需要将其表达形式抽象化,也就是

F:①④⑤

K:②③⑥⑦

       进而用7维向量表示如下

F1:(1,0,0,1,1,0,0)

K1:(0,1,1,0,0,1,1)

       显然,F1+K1=(1,1,1,1,1,1,1),等式右边全为1表示将这7个空位不多不少地“精确覆盖”了。

       另外,注意到,K积木只有一种可能的摆法,也就是K1:②③⑥⑦,向量形式为K1:(0,1,1,0,0,1,1);F积木一共有6种可能的摆法,分别为

F1:①④⑤                               F1:(1,0,0,1,1,0,0)

F2:③⑥⑦                               F2:(0,0,1,0,0,1,1)

F3:②⑥⑦                               F3:(0,1,0,0,0,1,1)

F4:②③⑦                               F4:(0,1,1,0,0,0,1)

F5:②③⑥                               F5:(0,1,1,0,0,1,0)

F6:②⑤⑥                               F6:(0,1,0,0,1,1,0)

       为了描述问题,我们对以上7个向量各赋予一个系数,分别为k1、f1、f2、f3、f4、f5、f6,然后作出3个约束条件:


 k1 · K1+ f1 · F1 + f2 · F2 + f3 · F3 + f4 · F4 + f5 · F5 + f6 · F6 = (1,1,1,1,1,1,1)                                                                                                                 ——(“精确覆盖”);

 k1、f1、f2、f3、f4、f5、f6均为“0-1变量”                                                                                                                           ——(值为0表示不接受该积木的该种摆法,值为1则表示接受);

 k1 = 1 , f1 + f2 + f3 + f4 + f5 + f6 = 1                                                                                                                                                                          ——(对每个积木,选择一种摆法) ;


       以上便是描述这个简化情形的数学模型,事实上这并不是“0-1规划”,而是“0-1变量方程组”而已。如果将这个模型推广为5层金字塔的情形,用来求解第12阶段的金字塔题目,那么就不是这里的7个7维向量那么简单了,而是数百上千个55维向量,所以求解模型的计算量就很大了,有必要借助LINGO这个解方程的“神器”,但前提是要将模型转化为LINGO语言。

       于是我用MATLAB建立了一个GUI文件,可以生成题目相应的LINGO代码,经LINGO求解得到结果后可以再用MATLAB画出三维图,操作及效果如下(以第477题为例):

       第一步:在格子中选择A~L的字母,也可以为空,表示题目。

将已知的部分表示出来

       第二步:点击“LINGO代码”按钮,将会在桌面生成一个名为“金字塔的LINGO代码”的txt文件;将该文件里的内容全选并复制粘贴到LINGO的模型窗口中,再点击“solve”按钮。

求解

       第三步:看到状态窗口中如果显示“Feasible”,则表示已求出答案,不妨关掉它;然后在结果窗口中按下键盘ctrl+F,在弹出的搜索框中输入“Q”并查找,再将以“Q”开头的那些行全部复制,粘贴到桌面上名为“LINGO结果”的txt文件中(该文件不用手动新建),覆盖掉里面的全部内容,保存。

“Feasible”表示已经求出解 查找以“Q”开头的行 将这几百或上千行结果复制

       第四步:在MATLAB的GUI中点击“三维图”,就会生成题目答案对应的三维效果图,也可以拖动3根滑条来调整大小与角度。

更容易理解的大小与角度 更直观的大小与角度

      我用的MATLAB是R2015a版本,而LINGO是11.0版本,不过版本对运行的影响应该不大。

      说来其实这模型并不难,但要先得到A~L积木的各自可能的摆法,这却有点麻烦。一共有1646个摆法,这些表示积木摆法的55维向量数据也同样可以用MATLAB生成,方法很多,所以我就不给出用来生成这些数据的代码了,而是将这些数据连同GUI文件还有第12阶段的答案一同分享到GitHub和QQ空间。

https://github.com/pengxiquan678/IntelligentPyramid

https://user.qzone.qq.com/529058112

相关文章

  • 智慧金字塔的数学模型与求解

    高一的时候看到同学玩智慧金字塔,深感有趣,于是我也买了一套在家里慢慢玩。在高二的暑假我把第5册第11阶段的题...

  • 如何准备数学建模?附重磅资源

      数学建模就是根据实际问题来建立数学模型,对数学模型来进行求解,然后根据结果去解决实际问题。   当需要从定量的...

  • MBA数学素质怎么培养?

    何为数学素质?它是一种准确理解深奥的数学概念,对实际问题建立数学模型,准确找到求解(求证)的正确途 一、数学素质与...

  • 五大常用算法之一:贪心算法

    一、基本概念 二、贪心算法的基本思路 建立数学模型来描述问题 把求解的问题分成若干个子问题 对每个子问题求解,得到...

  • 关于数学建模竞赛

    【百度百科】数学建模,就是根据实际问题来建立数学模型,对数学模型来进行求解,然后根据结果去解决实际问题。数学建模竞...

  • 如何快速构建某一领域的知识树?

    这段时间,我集中阅读了问题求解类书籍,包括《创造性问题求解策略》、《横向思维》、《餐巾纸的背面》、《金字塔原理》、...

  • 2018-08-18

    第二章 连续时间系统的时域分析 (上) 1、建立和求解线性微分方程的过程建立数学模型KCLKVL线性非时变系统的微...

  • 用数学规划的方式求解优化问题

    本文介绍如何用数学语言对实际中的优化问题进行建模. 通过建立数学模型, 我们利用现成的求解器可以便捷地计算出最优解...

  • 【JS算法】贪心算法

    贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择 贪心算法一般按如下步骤进行:1、建立数学模型来描述问...

  • 瑞宏能量金字塔之九

    金字塔功能介绍亚健康生命智慧管理器-----金字塔,是应用古埃及金字塔的原理和形状所做成。金字塔的形状锥角是52度...

网友评论

    本文标题:智慧金字塔的数学模型与求解

    本文链接:https://www.haomeiwen.com/subject/zhmwlxtx.html