【doc】多因素制约的迷宫问题最优解的求解算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多因素制约的迷宫问题最优解的求解算法
第29卷第3期
2012年3月
计算机应用与软件
ComputerApplicationsandSoftware
V o1.29No.3
Mar.2012
多因素制约的迷宫问题最优解的求解算法
王桂平孟宪虎
(重庆大学计算机学院重庆400030)
(浙江财经学院信息学院浙江杭州310018)
摘要介绍迷宫问题及其最优解,引入多因素制约的迷宫问题.重点讨论多因素制约迷宫问题最优解的含义及基于广度优先
搜索的求解算法,并通过两个实例分析如何基于广度优先搜索算法求解这类迷宫问题的最优解,并给出算法的伪代码.最后,进一
步讨论和总结这类迷宫问题最优解的求解算法.
关键词迷宫问题多因素制约最优解广度优先搜索
中图分类号TP301.6文献标识码A
MULTⅡ'LEFACToRSRESTRICTEDLABYRINTHPRoBLEM oPTIMALSoLUTIoNALGoRITHM
WangGuipingMengXianhu
(CollegeofComputerScience,ChongqingUniversity,Chongqing400030,China)
.(Schooloflnfomation,ZhejiangUniversityofFinanceandEconomy,Hangzhou310018,Zh ejiang,China) AbstractLabynnthproblemanditsoptimalsolutionaredescribed.Thenamultiplefactorsrest rictedlabyrinthproblemisintroduced. Thepapermainlydiscussesthemeaningofmultiplefactorsrestrictedlabyrinthproblemopti
malsolutionaswellassolvingalgorithmsbasedon
breadthfirstsearch.Withtwoexamples,itanalyseshowtosolvethiskindoflabyrinthproblem sforKnoptimalsolutionbasedonbreadthfirst
search.Inaddition,pseudocodesofthealgorithmalegiven.Atlast,itdiscussesandsummarize smethodsforoptimallysolvingthiskindof
labyrinthproblems.
KeywordsLabyrinthproblem'Multiplefact0rsrestrictedOptimalsolutionBreadthfirstsear ch
0引言
迷宫问题是一种古老的智力游戏,具有非常悠久的历史,最
早可以追溯到古希腊神话_lJ.迷宫问题也是娱乐数学J,数据
结构,图论,拓扑学,人工智能等领域的一类经典问题.许多智
能问题,如下棋游戏,战略决策,机器人路径规划等,都可以转化
成寻找迷宫最优路径的问题J.
在用计算机求解迷宫问题时,通常将迷宫简化为行×N
列的网格,如图1所示.在图1中,每个方格代表迷宫的一小部
分,可能为:'#'一不能通行(如墙壁等),'?'一可以通行,'S'

起始位置,'D'一目标位置等.人(或机器人等)从迷宫中某
个可通行方格出发,可以移动到相邻的可通行方格.迷宫问题
要求解的是从初始位置到目标位置的一条有效路径,即由相邻
可通行方格组成的路径.一般来说,一个方格的相邻方向有两
种:4相邻方向和8相邻方向,分别如图1(a)和(b)所示.
囝串圈
间最少的路径.假定从某个可通行方格出发,移动到每个相邻
可通行方格所需的时间是一样的,那么迷宫问题的最优解实际
上也是从起始位置到目标位置所需步数最少的路径.
在图1中,如果按4相邻方向进行行走,则最优解如图1
(a)所示,所需的步数为6步;如果按8相邻方向进行行走,则最
优解如图1(b)所示,所需的步数为2步.
求解迷宫问题最优解的基本算法是广度优先搜索算法.文
献[2—5]讨论了迷宫问题最优解的其他一些求解算法,如蚁群
算法J,注水法等.
前面所讨论的迷宫问题,其最优解只受一个因素的制约,即
到达目标位置所需的时间(即步数).然而,有的迷宫问题同时
受到多种因素的制约,例如不仅要考虑到达目标位置所需的时
间,而且人在走迷宫时还会消耗体力,所以还要考虑体力因素;
又如迷宫中可能有多种可通行方格,且人在通过这些方格时所
花费的时间和消耗的体力可能不一样,等等.本文主要讨论这
种多因素制约迷宫问题最优解的求解.
研究多因素制约迷宫问题有着重要的实际意义,例如在机
器人路径规划中,如果机器人可以跨过一些障碍物但需要花费
收稿日期:2010—10—15.2010年浙江省自然科学基金资助项目(YllO
图1迷宫问题及最优解o177).王桂平,讲师,主研领域:计算理论,计算复杂性理论,算法分析与设
迷宫问题的最优解通常是指从起始位置到目标位置花费时计.
172计算机应用与软件2012血
较多的时间,此时机器人就面临究竟是跨过该障碍物还是绕过
该障碍物寻找另外一条路径的问题.
1多因素制约迷宫问题最优解的求解
1.1最优解的含义
对多因素制约迷宫问题,从起始位置到目标位置的一条路
径,即使时间比最优解的时间更短,但如果不满足其他因素的约
束(比如人沿着这条路径走,达到目标位置时体力小于0),则该
解不是最优解,甚至不是一个合理的解.因此这类迷宫问题的
最优解是指在满足所有因素制约的前提下,从起始位置到目标
位置所需时间最小的路径.
1.2搜索与广度优先搜索
搜索:有一些问题在求解时需要一定的步骤,通常求解这些
问题采取的策略是从初始位置(或步骤)出发,试探性地选择可行的步骤,直至找到解或判定出"无解"为止,这种求解问题的
策略称为搜索.
广度优先搜索BFS(BreadthFirstSearch):是一个分层的搜
索过程,算法的基本思路是从初始位置出发先试探走1步能达到的所有位置,并判断是否为目标位置,如果都不是则再从这些位置出发再试探走1步能到达的所有位置……,如此直至到达目标位置为止,或者所有位置都走遍但没有找到目标位置,从而得出"无解"的结论.因此,如果问题的解存在,则用广度优先
搜索求得的解肯定是步数最少的解,即最优解.
在BFS算法中,为了实现逐层访问,需要使用一个队列,以
记忆正在访问的这一层和上一层的迷宫位置(及到达该位置的状态),以便于向下一层访问在BFS算法中,还需要一个数组visited[],用于记录各位置是否已经走到.
用BFS算法求解迷宫问题最优解的伪代码为:
BFS(位置s)//从位置s出发进行广度优先搜索
{
将初始位置s入队列;
当(队列不为空)
{
将队列头的位置(设为h)弹出;
如果h是目标位置,则:
找到最优解,算法结束;
对h的每个相邻可通行位置t,如果还没有走到
将t入队列;
}
如果队列为空,但没有找到目标位置
则判定迷宫问题无解;
},
用BFS算法求解迷宫问题,其时间复杂度为O(MXN),其
中MXN为迷宫的规模.
1.3多因素制约迷宫问题最优解的求解
求多因素制约迷宫问题最优解的基本算法是广度优先搜索
算法,但需要根据具体情况做一些改进.比如通常需要设计一个结构体表征到达迷宫某个位置的状态(步数,时间,体力等), 对达到每个位置的方案必须考虑制约因素来进行取舍,等等. 接下来通过两个实例具体分析如何采用广度优先搜索算法
求多因素制约迷宫问题的最优解.其中,"营救"实例的解不仅
受时间因素的限制,而且通过不同的可通行方格所需时间不一样;"送情报"实例更复杂,不仅有时间因素的约束,还有体力因素的约束,通过不同的可通行方格所需的时间和体力都不同. 对于受三个甚至更多个因素制约的迷宫问题,可先分别筛
选出满足每个因素制约的解,再筛选出满足所有因素制约的可行解,最后在这些可行解中筛选出时间最少的解,此解即为最优解.具体可参考"送情报"实例.
2实例分析
2.1实例:"营救"
迷宫描述:Angel被关押在监狱里,监狱是一个MXN大小
的迷宫,5≤,Ⅳ≤20.迷宫由MXN个方格组成,每个方格中
可能为墙壁('#'),道路('?'),警卫('X'),Angel('a')或
Angel的朋友('r').
Angel的朋友想去营救Angel,他需要到达Angel被关押的
位置.如果Angel的朋友想到达某个方格,但方格中有警卫,那么必须杀死警卫,才能到达这个方格.假定Angel的朋友向上, 下,左,右移动一步用时为1个单位时间,杀死警卫用时也为1 个单位时间.假定Angel的朋友是如此强壮,可以杀死所有的警卫.
本题的任务是计算Angel的朋友到达Angel所在的位置至
少需要多长时间,只能向上,下,左,右移动,而且墙壁不能通过. 分析:本题要求从r位置出发到达Angel所在位置并且所需
时间最少,适合采用BFS算法求解,但BFS算法求出来的最优解通常是步数最少的解,而在本题中,步数最少的解不一定是最优解.
例如,在图2所描绘的监狱迷宫中,从t到a所需的最少步
数为8步,其中(a),(b)和(e)所表示的路线步数均为8步,所
花费的时间分别为13,13和14;而(d)所表示的路线步数为12 步,所花费的时间为12.在该迷宫中,(d)所表示的路线才是最
优解.
#拳
昌.撑r
XxIX
XXxIX聱

母#撑#撑
#a#XrI
#X撑X×
XX×X嚣
扞撑拳
撑a●#XrI
#X×X
IXXxI撑
#

(b)
##撑
Xr●1'
#撑XXI?
XXX撑


(d)
图2实例:"雷救"
因此,在本题中,最优解不一定是步数最少的解.为了求出
最优解,本题采取如下的思路进行BFS搜索:
1)将Angel的朋友到达某个方格时的状态用一个结构体
point表示,该结构体包含了Angel的朋友到达该方格时所走过
的步数及所花费的时间;在BFS搜索过程中,队列中的结点是
point型数据.
//表示到达某个方格时的状态
第3期王桂平等:多因素制约的迷宫问题最优解的求解算法173
mtX,Y;
lntstep;
lnttime;
//方格的位置时间为1个单位时间,消耗的体力为1个单位的体力.
//走到当前位置所进行的步数迷宫中的各种方格所对应的符号及含义,从相邻方格到达
//走到当前位置所花时间该方格所消耗的时间和体力如表1所示.
};
2)在算法中再定义一个二维数组mintime[][],mintime
[i][]表示Angel的朋友走到(i,J)位置所需最少时间(初始时
均为..).在BFS搜索过程中,从当前位置走到相邻位置(,
y)时,只有当该种走法比之前走到(,Y)位置所花时间更少,才
会把当前走到(,Y)位置所表示的状态入队列,否则是不会入
队列的.
3)在BFS搜索过程中,不能一判断出到达目标位置就退出
BFS算法,否则求出来的最少时间仅仅是从r到达a花费步数为最小步数的若干个方案中的最小时间,不一定是最优解;一定要等到队列为空,BFS算法结束后才能求得最优解或者得出"无法到达目标位置"的结论.
因此,本题求解最优解的BFS算法的伪代码为:
BFS(状态S)//从初始状态S进行广度优先搜索
{
将初始状态S入队列;
当(队列不为空)
{
将队列头的状态(设为h)弹出;
对h的每个相邻可通行位置t,计算按照此种
走法到达该位置所处的状态(设为ts),如果所
需时间比之前记录的时间更少,则:
将ts入队列;
}
}
上述BFS算法执行完毕后,如果在mintime数组中,到达目
标位置所需时间仍为,则说明无解;否则该时间就是最优解.
注意,在本题中,并不需要使用标明各位置是否访问过的状
态数组visited,也没有在BFS算法过程中将访问过的相邻位置设置成不可再访问,那么BFS算法过程会不会无限搜索下去呢?实际上是不会的,因为从某个位置出发判断是否需要将它的相邻位置(,),)入队列时,条件是这种走法比之前走到(,
Y)位置所花时间更少;如果所花时间更少,则(,Y)位置会重复
入队列,但不会无穷下去,因为到达(,Y)位置的最少时间肯定
是有下界的.
2.2实例:"送情报"
迷宫描述:战争年代,通讯员经常要穿过敌占区去送情报,
敌占区是一个由M×N个方格组成的迷宫,5≤M,Ⅳ≤20,通讯员要从初始方格出发,送情报到达目标方格,初始时,通讯员具有一定的体力.
迷宫中,每个方格可能为安全的方格('?'),布有敌人暗
哨的方格('W'),埋有地雷的方格('m'),被敌人封锁的方格
('#')以及起始方格('S')和目标方格('D').
通讯员从某个方格出发,对上,右,下,左4个方向上的相邻
方格:如果某相邻方格为安全的方格,通讯员能顺利到达,所需时间为1个单位时间,消耗的体力为1个单位的体力;如果某相邻方格为敌人布置的暗哨,则通讯员要消灭该暗哨才能到达该方格,所需时间为2个单位时间,消耗的体力为2个单位的体力;如果某相邻方格为埋有地雷的方格,通讯员要到达该方格, 则必须清除地雷,所需时间为3个单位时间,消耗的体力为1个单位的体力.另外,从目标方格的相邻方格到达目标方格,所需表1实例"送情报"中迷宫的方格
符号含义花费时间消耗体力
#被敌人封锁的方格\|
安全的方格11
W布有敌人暗哨的方格22
埋有地雷的方格33
S通讯员起始方格\|
D目标方格11
本题要求解的是:通讯员能否到达指定的目的地,如果能到达,所需最少的时间是多少(只需要保证到达目标方格时,通讯员的体力>0即可).
分析:这个例子跟"营救"实例有点类似,但与"营救"不同
的是,到达某个方格不仅有时间因素,还有体力因素.本题要求的是时间最少的方案,体力因素似乎不重要.然而,如果按照2.1节中的方法,以"到达方格(,Y)所花费时间更少"作为"是
否将这种到达(,Y)的方案入队列"的标准,所求出来的解可能是错误的.
例如,在图3所描述的迷宫中,图3(a)给出了一种时间最
少的方案,按这种方案到达目标方格时所花费的时间为13,所剩体力为1,该方案就是最优的方案.然而这种方案到达(4, 5)位置(图3(b)中圆圈所表示的位置)所需时间为5,另一种方案(图3(b)中虚线所表示的方案)到达该位置所需时间为4,按照2.1节中的方法,前一种方案将会被舍去(即不会入队列). 而按照后一种方案行走时,因为到达目标方格时体力为0,从而得到"无法到达"的错误结论.
WW撑W撑W
撑WW
D群W撑
mmWWW
mmIm_SW
(a)
WW襻W撑W
撑WW
D.撑W
mmWwlW
mITI聋mS1w
(c)
图3实例:"送情报"
本题可以采取的思路是:(1)先BFS搜索一遍,求得从起
始方格到达每个方格所需最少时间(记录在数组mintimel[] []中)及剩余的体力(记录在数组corresppower[][]中),从而
求得到达目标方格所需的最少时间(设为mintl,可能为*); (2)再BFS搜索一遍,对到达(,Y)位置的每个方案,只有所需
时间比到达该位置所需最少时间mintimel[][Y]更多但剩余
体力比corresppower[][Y]更大,才入队列;从而求得从起始方
格到达每个方格所需的另一个最少时间(记录在数组mintime2 [][]中)及到达目标方格的另一个最小时间(设为mint2);
(3)最后取mint1和mint2之间的较小者,如果为∞则表示无法到达.
在本题中,同样为到达每个方格所处的状态设计一个point
结构体.
structpomt
mtx,Y;
lntstep;
//表示到达某个方格时的状态
//方格的位置
//走到当前位置所进行的步数
174计算机应用与软件2012丘
inftime;//走到当前位置所花时间
intpower;//走到当前位置剩余的体力
};
本题求解最优解的BFS算法的伪代码为:
BFS1(状态S)//从初始状态S进行广度优先搜索
{
将初始状态入队列;
当(队列不为空)
{
将队列头的状态(设为h)弹出;
对h的每个相邻可通行位置t,计算按照此种
走法到达该位置所处的状态(设为ts),如果所
需时间比之前记录的时间更少,则:
将ts人队列;
}
BFSI执行完毕后,对迷宫中的每个位置(,Y),都求得从
起始位置到达该位置所需的最小时间mintimel[][Y]及剩余
的体力corresppower[][Y].
BFs2(状态S)//从初始状态S进行广度优先搜索
{
将初始状态入队列;
当(队列不为空)
{
将队列头的状态(设为h)弹出;
对h的每个相邻可通行位置t,计算按照此种
走法到达该位置所处的状态(设为ts),如果所
需时间比之前记录的最小时间更多但剩余体力
更大,则:
将ts人队列;
}
}
BFS2执行完毕后,对迷宫中的每个位置(,Y),都求得从
起始位置到达该位置所需的另一个最小时间mintime2[][Y]. 对目标位置,取以上两个最小时间的较小者,如果该时间为,
则说明无解;否则该时间就是最优解.
3实验分析
本文对前面两个实例提出的算法,其时间复杂度仍为O( XN).本节对这两个算法进行程序实现及实验分析,所采用的实验数据及测试得到的算法运行时间如表2所示.测试用的机器配置为:IntelCore2DuoCPU,2.26GHz,3GB内存.
表2实验分析
营救送情报
数据规模5≤M.N≤205≤M,N,初始体力≤20
数据量1000组随机数据1000组随机数据
算法运行时间125毫秒265毫秒
测试结果表明,算法运行正确,算法运行时间也满足实时求
解的要求.
4结语
本文介绍了一类存在多种因素制约的迷宫问题,并讨论了
这类迷宫问题最优解的求解.通过对两个实例的讨论和分析,
可以总结出多因素制约迷宫问题的最优解求解算法具有以下特点:
1)可以用BFS算法求解,但通常都需要灵活地变动.
2)都需要设计一个结构体表征从初始方格到每个方格所
处的状态,记录各因素的值;并且在BFS算法的队列中都是表
征这种状态的结构体数据.
3)通常需要用一个数组记录从初始位置到达每个位置所
需的最小时间.
4)从起始位置到达某个位置,可能有多种方案,这些方案

般不能轻易地根据时间多少而进行舍弃,因为时间较少的方
案可能会因为到达目标位置时某个因素无法满足,从而得'出"无法达到"的错误结论.
参考文献
[1]吴鹤龄,毛晚堆.迷宫趣话[M].北京理工大学出版社,2007.
[2]张公敬,徐熙君.蚁群算法求解迷宫最优路径[J].青岛大学学报:自然科学版,2008,21(1):61—65.
[3]张公敬,杨厚俊,刘征.注水法求解迷宫最优路径[J].计算机仿真,2007,24(8):171—173.
[4]张林锋,吕辉,瞿军锋.迷宫最短路径问题新算法[J].计算机工程与应用,2006(32):63—65.
[5]胡小兵,黄席樾.蚁群算法在迷宫最优路径问题中的应用[J].计算机仿真,2005,22(4):114—117.
(上接第153页)
作者下一步的工作是进一步进行精细化的加速方法研究,减少
用户参与,在用户无感知情况下实现更优的网络优化效果,方便
网络运营商部署.
参考文献
[1]tencyandUserBehavioronaMuhiplayerGame Server[C]//NGC2001,LNCS2233,2001:1—13.
[2]XinboJiang,FarzadSafaei,tencyandScalability:A SurveyofIssuesandTechniquesforSupportingNetworkedGames [C]//IEEE7thMalaysiaInternationalConferenceonCommunication 2005andthe13thIEEEInternationalConferenceonNetworks2005, 16—18November2005.
[3]NCsoft[OL].www.1ineage.corn.
[4]Blizzard[OL].www.blizzard.corn.
[5]Counter-Strike[OL].www.counter?strike,corn.
[6]Wu?chugFeng,Wu-chiFeng.OntheGeographicDistributionofOn—lineGameServersandPlayers[C]//ACM2003.
[7]ftp:///bussys/Winsock/Winsock2.
[8]WrightS,TischerS.ArchitecturalConsiderationinOnlineGameServ—iceoverDSLNertworks[C]//IEEEInternationalConferenceonCom—munication,2004.
[9]MarkClaypool,tencyandPlayerActioninOnline Games[J].CommunicationsoftheACM,2006,49(11).
[10]MartinGairing,BurkhardMonien,KarstenTiemann.Routing(Un-) SplittableFlowInGameswithPlayer-SpecificLinearLatencyFunctions
[C]//ICALP2006,Part1,LNCS4051,2006:501—512.
[11]WeiHua,JimOhlund,BarryButterklee.UnravelingtheMysteriesof WritingaWinsock2LayeredServiceProvider[EB].MicrosoftSys- ternsJourna1.,1999.。

相关文档
最新文档