魔方求解问题的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机类毕业论文
魔方求解问题的设计与实现
摘要
本文介绍一个可以对魔方进行求解的程序。通过采用专家系统理论中的方法,它可以快速地对输入的魔方状态文件求解。本程序是魔方求解与动画演示程序的一部分。
程序的核心是一个专家的知识模块。这个模块是关于魔方的旋转序列的表示。程序不断地将当前的魔方状态图与这个模块中的符合要求的状态图对比,如果符合要求就调用相应的旋转序列,得到一个新的魔方的状态图。从而可以快速地找到魔方的求解方法。
程序中用到了关于图搜索的A*算法。这是一个关于图搜索和结点扩展的通用的算法,但是这个算法并没有规定搜索树的扩展方式。在这里,搜索树的扩展方式采用广度优先搜索,这样可以找到符合要求的状态图的最佳路径。在程序中,将广度优先搜索与A*算法相结合来对状态图进行搜索和结点的扩展,在搜索的过程中用到了回朔操作。
有时候有些特殊的魔方状态图程序并不能给出求解的过程。但这种情况不是很多,程序在大多数情况下可以顺利对魔方求解。这个问题主要是由采取的专家序列的不同而引起的。好的专家序列可以减少这种情况的出现。
关键词:魔方;回朔;最佳路径
Abstract
The thesis introduces a program for quickly resolving the Rubik’s Cube problem. By exploiting the methods in the expert system theory, the program can give the rotation sequence for any inputted state to the destination state. The program is a part of the whole program for automatically solving the Rubik Cube and demonstrating it in animation.
The core of the program is a module of expert knowledge, a representation of rotation sequences. The program repeatedly matches the current state with the states in the representation. If a math happens, the corresponding rotation operation will be called and a new state will be obtained, so that the destination state can be found at last within a short time.
The program exploits the A* algorithm for graph searching. It is a common algorithm based on node expansion, but it does not define the actual expanding method of search trees. Here, the breadth-first search is used so that the best path may be found. The program integrates the breadth-first search with the A* algorithm to traverse the state graph and conduct node expansion. In programming, backtracking is employed in the process of searching.
Sometime the program cannot give the answer to some special inputted state. It is not because of the algorithm which the program using, but because of the limitation of the expert knowledge
Key words:rubik cube; backtracking; best path
目录
第1章概述 (1)
1.1魔方问题简介 (1)
1.2关于搜索与存储的问题 (1)
1.3关于专家系统的简介 (2)
1.4文件的输入 (2)
1.5本章小结 (3)
第2章程序总规划 (4)
2.1程序的总体设计 (4)
2.2全局变量的定义 (5)
2.3各个模块间的调用关系 (5)
2.4本章小结 (7)
第3章各个模块的详细设计 (8)
3.1主模块 (8)
3.2文件接收模块 (9)
3.3程序执行模块 (10)
3.4旋转操作模块 (12)
3.5搜索模块 (14)
3.6专家系统模块 (18)
3.7本章小结 (20)
第4章程序演示 (21)
结论 (24)
参考文献 (25)
致谢 (26)
第1章概述
1.1魔方问题简介
魔方(RUBIK'S CUBE)是由匈牙利的厄尔诺·鲁毕克在1979年设计的。他是一个建筑学家,在布达佩斯执教。同时日本的石毛也独立完成了这个设计。两人都取得专利。设计魔方的目的在于帮助人们更好的理解三维空间里的各种运动。
魔方是一个看似简单的玩具,它的每个面有九个格。我们目标是使每个面的格子颜色都相同。每个格子实际上是小方块的一部分。小方块的每个面都可以旋转,角方块有三个面,边方块有两个面。一共有八个角块,十二个边块和六个中块。
目标是把一个每面都是随机颜色的魔方还原成每面颜色都相同的魔方。问题是,有无数的方法操作魔方,然而只有极少的方法能够达到目的。使用盲目的搜索算法是不行的,即使在最大型的计算机也要用上几年的时间。然而会玩的人在几分钟内就可以将魔方复原,很显然这不是使用盲目搜索算法。解决魔方问题困难之一就是当你想移动一个方块时,不得不移动其它七个方块(中间方块不动)。在求解的早期,这不是大问题,但是当大部分方块都到达正确位置时,新的旋转将会破坏已完成的部分。一些玩魔方的高手都知道许多复杂的旋转方法,这些方法能够只改变少数方块的位置而不影响其它的方块。
而由程序来表示魔方求解的难点就在于,如何将这些复杂的旋转序列带到程序中去,因为盲目的搜索不可能解决魔方问题。关于这些后面将有详细的介绍。
1.2关于搜索与存储的问题
在魔方问题的解决过程当中离不开搜索,对魔方状态图的搜索。但魔方的状态图很大,以致它们不能通过显示图来表示。正如魔方在求解过程中的状态图。所以,这些只能用隐式状态空间图来解决,而解决这个问题的关键是如何用公式来表示隐式状态空间图搜索的方法。
因为在魔方问题中状态图相当大,所以盲目搜索将不起作用。这时必须使用优化算法指导搜索。使用不同的优化方法,搜索空间将极大的减少,从而达到在有限时间内能够找到结果的程度。这个问题和其它人工智能问题一样,分为三个设计阶段。首先我们必须决定如何表示魔方的当前状态。然后还必须表示对魔方