多对商人过河数学建模

多对商人过河数学建模

ID:11042688

大小:179.22 KB

页数:12页

时间:2018-07-09

多对商人过河数学建模_第1页
多对商人过河数学建模_第2页
多对商人过河数学建模_第3页
多对商人过河数学建模_第4页
多对商人过河数学建模_第5页
资源描述:

《多对商人过河数学建模》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、多对商仆过河问题12对商人过河——(算法中多少对可以改变,此为N=12的时候,稍加修改便可以成为你需要的对数解决方案)摘要本文针对商人安全渡河的问题,采用多步决策的过程建立数学模型,求解得到了在随从没有杀人越货的情况下的渡河方案。对于本题而言,在12名商人、12名随从、船的最大容量为2的情况下,首先定义了渡河前此岸的状态,并设安全渡河条件下的状态集定义为允许状态集合,接着得到渡河方案的允许决策集合,然后得到状态随渡河方案变化的规律,最后利用dijkstra算法,并利用MicrosoftVisualC++6.0软件,编译运行程序得到了一种商人安全渡河的方案。但是,本文不仅仅是

2、为了拼凑出一个可行方案,而是希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。基于此目的,利用了dijkstra算法,得到最短路径的最优解。但同时由于该算法遍历计算的节点很多,所以效率低,而且当有多个最短距离时,不能够将所有符合条件的情况逐一列出。我们通过对程序的改善,使可以运行比较多的将符合条件的情况列出来。1问题重述十二名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。在河的任意一岸,一旦随从的人数比商人多,商人就有危险.但是如何乘船渡河的大权掌握在商人们手中。商人们怎样才能安全渡河呢?同时,推广到M名商人带M名随从又如何?2问题分

3、析安全渡河问题可以看成一个多步决策过程。每一步,即船由此岸驶向彼岸或从彼岸驶回此岸,都要对船上的人员(商人随从各几人)作出决策,在保证安全的前提下(两岸的商人数都不比随从数少),在有限步内使人员全部过河。用状态(变量)表示某一岸的人员状况,决策(变量)表示船上的人员状况,可以找出状态随决策变化的规律。问题转化为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到渡河的目的。此类智力问题经过思考,可以拼凑出一个可行方案。但是,我们现在希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。3模型假设及符号说明3.1模型假设(1)每个商人和随从都会划

4、船;(2)只有一条船,且每条船上最多只能乘坐两个人;(3)所有商人与随从之间没有矛盾,不会出现两人不愿意坐一条船的现象;(4)船在渡河的过程中不受外界环境的影响。3.2符号说明初始状态下,商人和随从所在的一岸;初始状态下,商人和随从欲到达的一岸;S商仆对数K船最多载人的数目4模型的建立与求解4.1模型的建立根据题意,可以作出商人渡河初始状态的示意图:渡河目的:——>(选择岸为参考点)4.2C++程序解决根据(1)(2)(3)式,通过利用matlab编写一段程序来求解多步决策问题是可行的,但是当商人和随从数都不多的情况下还可以用平面坐标法解此模型更为方便。接下来,我们先用平面

5、坐标法求解此模型,最后再使用计算机仿真,对求解的结果进行验证,并给予推广。4.2.1C++程序代码//约束条件:岸上仆人不能多于商人数#includeusingnamespacestd;structNode{intnMer;intnSer;intlength;};classA{public:A();~A();voidTspt();//过河的动作voiddoLeft(intnhead,intntail,intnlength);private:boolislegal(intnm,intns);//判断是否满足约束条件,满足为trueNode*funTspt(

6、intnm,intns,boolflag);//添加STEP[head]可以向后延伸的节点boolnoRepeat(intnm,intns);//没有重复返回TRUEvoidfunshow(inta[][2],intntail);boolfunLeft(Nodend,intb1,intb2,intn);voidshow(ints[],intp[][2],int&top,int&count,inta[]);inthead;inttail;intn;//商仆的对数intnB;//船最多的载人数目Node*STEP;};A::~A(){free(STEP);}A::A(){cou

7、t<<"请输入商仆的对数S=";F:cin>>n;if(n==1){nB=2;cout<<"船最多载人的数目K="<>nB;}elseif(n==3){cout<<"船最多载人的数目可以取:";for(intx=n-1;x<=2*n;x++){cout<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。