无向图最短路径
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、问题重述
最强大脑中的收官蜂巢迷宫变态级挑战,相信大家都叹为观止!最强大脑收官战打响后,收视率节节攀升,就连蚁后也不时出题难为一下她的子民们。在动物世界中,称得上活地图的,除了蜜蜂,蚂蚁当仁不让。在复杂多变的蚁巢中,蚂蚁总是能以最快、最高效的方式游历在各个储藏间(存储食物)。今天,她看完最新一期节目,又发布了一项新任务:小蚁同学,我需要玉米库的玉米,再要配点水果,去帮我找来吧。小蚁正准备出发,蚁后又说:哎呀,回来,我还没说完呢,还有若干要求如下:
1.小蚁同学,你需要尽可能以最少的花费拿到食物(附件图中路线上的数值表示每两个储物间的花费);
2.小蚁同学,你最多只能经过9个储藏间拿到食物(包含起止两个节点,多次通过同一节点按重复次数计算);
3.小蚁同学,你必须经过玉米间,水果间(附件图中标绿色节点);
4.别忘了,食蚁兽也在路上活动呢,一旦与食蚁兽相遇,性命危矣!不过小蚁微信群公告已经公布了敌人信息(附件图中标红色路段);
5.最后,千万别忘了,还有两段路是必须经过的,那里有我准备的神秘礼物等着你呢(附件图中标绿色路段)。
这下小蚁犯难了,这和它们平时找食物的集体活动规则不一样嘛,看来这次需要单独行动了。要怎么选路呢?小蚁经过一番苦思冥想,稿纸堆了一摞,啊,终于找到了!亲爱的同学们,你们能否也设计一种通用的路径搜索算法,来应对各种搜索限制条件,找到一条最优路径,顺利完成蚁后布置的任务呢?
注:
1、蚁巢,有若干个储藏间(附件图中圆圈表示),储藏间之间有诸多路可以到达(各储藏间拓扑图见附件);
2、节点本身通行无花费;
3、该图为无向图,可以正反两方向通行,两方向都会计费,并且花费相同;
4、起止节点分别为附件图中S点和E点。
5、最优路径:即满足限制条件的路径。
图1
二、模型假设与符号说明
2.1 模型假设
1.因为题目中并未明确给出是否是从起始点开始到达终止点,即从s到e,为防止歧义、方便计算,假设每条路径都是从起点到终点;
2.下文中说到的点或点数均代表存储室或存储室数量;
3.通过图1各路段关系,可以假设,为得到最优路径,不会再从N1、N2、N3走回起点。
三、问题分析
3.1整体分析
题目的总体思路是在各种约束条件下求出一条从起点到终点的最优路径,最优可以说是有两个方面:第一是经过的储藏室即经过的点最好,题目中给定为9个,第二是在途中花费的费用最少。基于以上分析,我们决定建立无向图最优路径模型,从通过的点数和费用进行优化。
3.2约束条件分析
(1)题目中并未明确给出是从起始点到达终点(即图中给出的s和e),为了不产生歧义,以及方便计算,我们在假设中规定该路线是从起始点到达终点(即图1中给出的s和e)。
(2)最多只能经过9个储藏室(即9个点)
(3)必须经过两条绿色的路线,即必须经过N2、N4、N13、N14,并且N2
和N3相邻,N13和N14相邻。
(4)必须经过水果间和玉米间,即必须经过N7和N12。
(5)不能经过有食蚁兽的红色路段,可以有两种解决办法,第一:即N11和N12不能相邻出现,第二:N11和N12之间没有连线,没有通路。
(6)所有的路都是可以双向通行的。
3.3可行性分析
经过约束条件的分析,我们发现,有八个特殊点(N2、N4、N7、N12、N13、N14、)必须经过,那么按照题目要求,只能再选择一个非特殊点通过以完成该路径,
通过图1分析,这显然是无法完成的,经过进一步的分析与计算,我们发现在满足以上约束条件的情况下,最少需要通过11个点才能完成任务(相关计算与证明在4.3.1中给出)。
四、模型建立与求解
4.1模型准备
影响实际问题的因素很多,要解决实际问题就要建立适当的模型,既要把所得模型的次要因素忽略,否则所得模型会因为结构复杂而失去可解性同时又不能把与实质相关的因素忽略掉,而造成所得模型不能够正确反映实际情况而失去可靠性。但若是无法取得实际问题的最优解,只能在牺牲次要因素的条件下获得最优近似解。因此要对实际问题进行简化、确定变量和参数,并用某些“规律”建起变量与参数间的数学模型。
影响路线选择因素很多:经过储藏间数量限制、必经节点与路径、危险路径阻碍、费用最少。对于问题中两种不同决策变量最少节点与最少花费建立两种模型分别求出在侧重点不同情况下的最优解。
经过以上的问题分析,针对此问题应该建立一个无线图最优路径模型。
4.2模型的建立与求解
此模型是要找出从起始点到终点满足约束条件,并且使得经过的点最少、费用最少,因此其核心表达式是一个由一个点指向另一个点的路线。
4.2.1 确定所有路线表达式
式(1)
式(2)
]
公式说明:
式(1)表示从到的所有点,用有向箭头连起来,表示一条经过了N的点的路径,起始点显而易见为,终点为。
式(2)与式(1)对应,对应,为的确定方法。比如此时走到点,那么下一个点的确定必然与有关,具体由集合中的第i(i从0到-1)个元素确定。第j个点的编号即对应的j、、都在表2中有详细列举。
公式意义:
从开始,遍历与它相邻的所有点,并且每个点都尝试走,走到下一个点,同样遍历与其相邻的所有点,重复上述步骤,直到走到第N个点(即编号为N-1的点),便不再继续走,或者没有走到第N个点,而是已经走到了终点即e,也不再继续走。这样可以找到所有走过点数为N或者能到达终点的路径。
4.2.2 对路径的筛选(添加程序)
(1)限制经过的最多点数
为了保证程序能够正常、快速地运行,在第一步寻找路径中其实已经限制了最多经过的点数,走到第N个点(即编号为N-1的点),便不再继续走,或者没有走到第N个点,而是已经走到了终点即e,也不再继续走,这样已经保证了每条路走过的点数都限制在N个以内。
(2)经过N7和N12
每条路走完之后,遍历一下所有的点,看看其中是否有7和12这两个值,没有的话此路不满足约束条件,否则继续检验其他条件。
(3)经过两条绿的路线
首先可以确定2、4、13、14必须通过,就是必须有这两个数值,其次,2和4,13和14还必须相邻出现,才能说明通过绿的路段。
(4)不经过红的的路线,两种解决方案
第一:直接切断N11和N12间的路线,在表2中编号为11的节点中不添加12这个相邻节点,在编号为12的节点中不添加11这个相邻节点,这样所得到的路线绝对不会经过红色路段。