- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
人狼羊蔬菜运输问题
人、狼、羊、蔬菜运输问题
摘要
本文对人、狼、羊、蔬菜运输问题进行了分析,建立最短路模型。题目要求找运送次数最少的安全运输方案,即找到一个将所有的物体都运送过去的最短的路,要解决这一问题,本文先用四维向量来表示状态量,穷举出所有运输的可行共10种状态,然后运用matlab编程进而找出最短的路是:第一次运羊,人独自返回;第二次运菜,带羊返回;第三次运狼,人独自返回;第四次运羊。这样就可以在7次运输中把人、狼、羊和蔬菜安全运输到B地。
关键词:四维向量 图论 matlab编程 最短路一、问题的重述
某人需把狼、羊、蔬菜从A地运到B地,由于运输设备限制,每次至多能运送三者之一,而当人不在场时狼要吃羊、羊要吃蔬菜。试设计一种安全运输方案,并建立数学模型,使运送次数尽量地少?
二、问题的分析
根据题意,人不在场时,狼要吃羊,羊要吃菜,因此人不在场时,不能将狼与羊羊与蔬菜留在。用四维向量表示状态,其中第一分量表示人,第二分量表示狼,第三分量表示羊,第四分量表示蔬菜;当人或物在A,相应分量取1,在时取0
三、模型的假设
1、假设人不在时,狼或羊不会自己跑掉或被人牵走。
2、假设当时的天气情况良好,不会发生动物受惊离去的情况。
3、假设初状态是人,狼,羊,草均在A地,目标终状态是人,狼,羊,草均在B地。
四、模型的建立
为了更好的表现本文的解题思路,作出初始状态图如下:
图1 运输初始状态图
首先,通过穷举法将所有可行的状态列举出来,可行的状态有(1,1,1,1),(1,1,1,0),(1,1,0,1),(1,0,1,1),(1,0,1,0),(0,1,0,1),(0,1,0,0),(0,0,1,0),(0,0,0,1),(0,0,0,0)可行状态10种。现在、构造赋权图G=(V,E,W)(图2),其中定点集合V={v1,…,v10}中的顶点(按照上面的顺序编号)分别表示上述10个可行状态,当且仅当对应的两个可行状态之间存在一个可行转移时,可以把相应的权重取∞。
因为运输一次就会改变现在的状态,所以再引入一个四维状态转移向量,用它来反映运输情况。用1表示运输B地,0表示停留在A地。例如,(1,1,0,0)表示人带狼到B地。状态转移只有四种情况,用如下向量表示:
(1,0,0,0),(1,1,0,0),(1,0,1,0),(1,0,0,1)
现在规定状态向量与转移向量之间的运算为0+0=0,1+0=1,0+1=1,1+1=0
通过上面的定义,如果某一个可行状态加上转移向量得到的新向量还属于可行状态,则这两个可行状态对应的顶点之间就存在一条边。用计算机编程时,可以利用普通向量的异或运算。
根据matlab编程软件(程序见附件一)可作出赋权图G=(V,E,W)如下:
图2 赋权图
五、模型的求解
根据赋权图G之间的状态转移关系(如图2)和matlab编程软件,最终得到状态转移顺序为1 6 3 7 2 8 5 10经过7次运输就可以把狼、羊、蔬菜运输到B地,第一次运羊,人独自返回;第二次运菜,带羊返回;第三次运狼,人独自返回;第四次运羊。为了更好的表述整个运输过程,作出运输流程图(见附件二)。
六、模型的评价和改进
优点:
1、仅仅靠多幅图像之间的对应关系就可以进行标定,灵活性高,潜在应用范围广;
2、基本模型利用计算机编程来得到求解,具有高效简介的优势,运行结果一目了然;
3、模型结合实际,具有很高的实用价值;
4、建模思路清晰,模型的建立方法比较简单,易于读懂。
缺点:
1、数据较少(运用穷举法)具有一定局限性。
改进:
1、运用其他思路求解。
参考文献
高媛媛,Matlab图论工具箱介绍:2013年;
/p-389826473.html,《数学建模人狼羊菜问题附件一
clc,
clear
a=[1 1 1 1;1 1 1 0;1 1 0 1;1 0 1 1;1 0 1 0;0 1 0 1;0 1 0 0;0 0 1 0;0 0 0 1;0 0 0 0]; %每一行是一个可行状态
b=[1 0 0 0;1 1 0 0;1 0 1 0;1 0 0 1]; %每一行是一个转移状态
w=zeros(10)%邻接矩阵初始化
for i=1:9
for j=i+1:10
for k=1:4
if findstr(xor(a(i,:),b(k,:)),a(j,:))
w(i,j)=1;
end
end
end
end
w=w;
sparse(w); %变成下三角矩阵
c=sparse(w) %构造稀疏矩阵
[x,y,z]=graphshortestpath(c,1,10,Directed,0) %该图是无向图,Direct
文档评论(0)