商人过河问题数学建模修订稿
数学建模:研究商人过河问题
数学建模实验一报告实验题目:研究商人过河问题一、实验目的:编写一个程序(可以是C,C++或Mathlab )实现商人安全过河问题。
二、实验环境:Turbo c 2.0、Microsoft Visual C++ 6.0、Matlab 6.0以上 三、实验要求:要求该程序不仅能找出一组安全过河的可行方案,还可以得到所有的安全过河可行方案。
并且该程序具有一定的可扩展性,即不仅可以实现3个商人,3个随从的过河问题。
还应能实现 n 个商人,n 个随从的过河问题以及n 个不同对象且每个对象有m 个元素问题(说明:对于3个商人,3个随从问题分别对应于n=2,m=3)的过河问题。
从而给出课后习题5(n=4,m=1)的全部安全过河方案。
四、实验步骤:第一步:问题分析。
这是一个多步决策过程,涉及到每一次船上的人员以及要考虑此岸和彼岸上剩余的商人数和随从数,在安全的条件下(两岸的随从数不比商人多),经有限步使全体人员过河。
第二步:分析模型的构成。
记第k 次渡河前此岸的商人数为k x ,随从数为k y ,2,1=k ,n y x k k 2,1,=,(具有可扩展性),将)(k k y x ,定义为状态,状态集合成为允许状态集合(S )。
S={2,1;3,2,1,0,3;3,2,1,0,0|,======y x y x y x y x )(}记第k 次渡船的商人数为k u ,随从数为k v ,决策为),(k k v u ,安全渡河条件下,决策的集合为允许决策集合。
允许决策集合记作D ,所以D={2,1,0,,21|,=<+<v u v u v u )(|1<u+v<2,u,v=0,1,2},因为k 为奇数时船从此岸驶向彼岸,k 为偶数时船由彼岸驶向此岸,所以状态k s 随决策k d 变化的规律是k k k k d s s )1(1-+=-,此式为状态转移律。
制定安全渡河方案归结为如下的多步决策模型:求决策)2,1(n k D d k =∈,使状态S s k ∈按照转移律,由初始状态)3,3(1=s 经有限n 步到达)0,0(1=+n s第三步:模型求解。
商人过河问题数学建模
作业1、2:商人过河一、问题重述问题一:4个商人带着4个随从过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人。
随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。
乘船渡河的方案由商人决定。
商人们怎样才能安全过河?问题二:假如小船可以容3人,请问最多可以有几名商人各带一名随从安全过河。
二、问题分析问题可以看做一个多步决策过程。
每一步由此岸到彼岸或彼岸到此岸船上的人员在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。
用状态变量表示某一岸的人员状况,决策变量表示船上的人员情况,可以找出状态随决策变化的规律。
问题就转换为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。
三.问题假设1. 过河途中不会出现不可抗力的自然因素。
2. 当随从人数大于商人数时,随从们不会改变杀人的计划。
3.船的质量很好,在多次满载的情况下也能正常运作。
4. 随从会听从商人的调度。
四、模型构成x(k)~第k次渡河前此岸的商人数x(k),y(k)=0,1,2,3,4;y(k)~第k次渡河前此岸的随从数k=1,2,…..s(k)=[ x(k), y(k)]~过程的状态S~允许状态集合S={(x,y) x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3}u(k)~第k次渡船上的商人数u(k), v(k)=0,1,2;v(k)~ 第k次渡船上的随从数k=1,2…..d(k)=( u(k), v(k))~过程的决策 D~允许决策集合D={u,v |u+v=1,2,u,v=0,1,2}状态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~状态转移律求d(k) ∈D(k=1,2,….n),使s(k)∈S 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)数学模型:k+1k S =S +k k D (-1) (1)'4k k x x += (2)'4k k y y += (3)k.k x y ≥ (4)''k k x y ≥ (5)模型分析:由(2)(3)(5)可得44kk x y -≥- 化简得k k x y ≤综合(4)可得k k x y = 和 {}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)还要考虑 {}'(',')|'0,'0,1,2,3,4kk k k k S x y x y === (7) 把(2)(3)带入(7)可得{}(4,4)|40,40,1,2,3,4k k k k k S x y x y =---=-=化简得{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 综合(6)(7)(8)式可得满足条件的情况满足下式{}(,)|0,4,0,1,2,3,4;k k k k k k k S x y x y x y ==== (9)所以我们知道满足条件的点如上图所示:点移动由{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 到达{}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)时,可以认为完成渡河。
商人过河优化模型.docx
承诺书我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。
如有违反竞赛规则的行为,我们将受到严肃处理。
我们参赛选择的题号是(从A/B/C/D中选择一项填写):A我们的参赛报名号为(如果赛区设置报名号的话):J2202 __________ 所属学校(请填写完整的全名):江西环境工程职业学院参赛队员(打印并签名):1. ___________________________________2. ___________________________________________3. ___________________________________指导教师或指导教师组负责人(打印并签名):教练组_____________________________日期:2012年8月9日赛区评阅编号(由赛区组委会评阅前进行编号):编号专用页赛区评阅编号(由赛区组委会评阅前进行编号):赛区评阅记录(可供赛区评阅时使用):评阅人评分备注全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):商人过河摘要本文针对商人安全渡河的问题,采用多步决策的过程建立数学模型,求解得到了在随从没有杀人越货的情况下的渡河方案。
对于本题而言,在3名商人、3名随从、船的最大容量为2的情况下,首先定义了渡河前此岸的状态,并设安全渡河条件下的状态集定义为允许状态集合,接着得到渡河方案的允许决策集合,然后得到状态随渡河方案变化的规律, 最后利用平而坐标分析法,并利用计算机进行了仿真,得到了一种商人安全渡河的方案。
数学建模 商人过河
数学建模课程作业论文题目:对商人过河问题的研究指导教师:黄光辉小组成员:黄志宇(20156260)车辆工程04班牛凯春(20151927)电气工程05班文逸楚(20150382)工商管理02班一、问题重述3名商人带3名随从乘一条小船过河,小船每次只能承载至多两人。
随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。
乘船渡河的方案由商人决定,商人们如何才能安全渡河呢?二、问题分析本题针对商人们能否安全过河问题,需要选择一种合理的过河方案。
对该问题可视为一个多步决策模型,通过对每一次过河的方案的筛选优化,最终得到商人们全部安全过到河对岸的最优决策方案。
对于每一次的过河过程都看成一个随机决策状态量,商人们能够安全到达彼岸或此岸我们可以看成目标决策允许的状态量,通过对允许的状态量的层层筛选,从而得到过河的目标。
三、模型假设1.过河途中不会出现不可抗力的自然因素。
2.当随从人数大于商人数时,随从们不会改变杀人的计划。
3.船的质量很好,在多次满载的情况下也能正常运作。
4.随从会听从商人的调度,所有人都到达河对岸。
四、符号说明第k次渡河前此岸的商人数第k次渡河前此岸的随从数过程的状态向量允许状态集合第k次渡船上的商人数第k次渡船上的随从数决策向量允许决策集合x y 3322110s 1s n +1d 1d 11五、模型建立本题为多步决策模型,每一次过河都是状态量的转移过程。
用二维向量表示过程的状态,其中分别表示对应时刻此岸的商人,仆人数以及船的行进方向,其中则允许状态集合:=又将二维向量定义为决策,则允许的决策合集为:因为k 为奇数时船从此岸驶向彼岸,k 为偶数时船从彼岸驶向此岸,所以状态随决策的变化规律是该式称为状态转移律。
求决策,使,并按照转移律,由经过有限步n 到达状态六、模型求解本模型使用MATLAB 软件编程,通过穷举法获得决策方案如下(完整matlab 程序详见附录):初始状态:可用图片表示为:X0=33状态为:S =3132303111220203010200决策为:D =0201020120112001020102七、模型推广该商人和随从过河模型可以完美解决此类商人过河的决策问题,并且该模型还可推广至解决m个商人和n个随从过河,以及小船的最大载重人数改变时的问题,只需适当地改变相关的语句即可轻松实现模型的转换。
数学建模案例作业
数学建模案例作业作业1 商人过河问题三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行(六个人都会划船)。
随从们密谋,无论何时,一旦随从的人数比商人多,就杀人越货。
但是如何乘船渡河的决定权掌握在商人手中。
商人们怎样才能安全渡河?示意图如下: 随从:商人: 一、状态变量一次决策),(k k k y x S = 3,2,1=k 表示第k 次渡河时,此岸的商人数,随从数. 最初 )3,3(0=S 且为整数)3,0(≤≤k k y x)}0,0(),1,0(),2,0(),3,0(),0,1(),1,1(),2,1(),3,1(),0,2(),1,2(),2,2(),3,2(),0,3(),1,3(),2,3(),3,3{(=S要安全过河,需保证彼岸此岸都安全,及随从数不能大于商人数,所以安全的情况有10种,即)}0,0(),1,0(),2,0(),3,0(),1,1(),2,2(),0,3(),1,3(),2,3(),3,3{(=S ② 二、决策变量设),(k k k v u d =2,0(≤≤k k v u 且)21≤+≤k k v u 表示第k 次渡河时,船上的商人数和随从数 )}1,0(),0,1(),2,0(),1,1(),0,2{(=D与状态变量相结合,安全的情况有三种,即 )}1,0(),2,0(),1,1{((=D ③ 三、状态转移方程奇数次(此案到彼岸)k k k d S S -=+1 偶数次(彼岸到此案)k k k d S S +=+1 即k k k k d S S )1(1-+=+ ① 数学建模:由①确定的转移方程下,经过n 次决策,将初始状态转移到最终状态)0,0(=n S . 每次的决策取自③式,每次到达的状态在②中. 图解法:①从右上角移到左下角,每次最多移两步;②奇数次渡河往左下方,偶数次渡河往右下方。
建立平面直角坐标系如图:n S 过河方案:从A 点)3,3(0=S 出发到D 点)0,0(=n S 结束① 小船一次最多能载两人,所以每次最多移动两个格子② 由此岸即彼岸时人员减少,即奇数遍时向左下方行走;有彼岸及此岸时人员增加,即偶数遍时向右上方行走。
日常生活中的数学建模
改进模型:
l1: 鱼的有效长度 A1:横截面积
V l1 A 1
l1 l
2 A s 1
W kls
2
W V
数学建模
模型检验
在钓鱼比赛期间收集了有关数据:
第i条鱼 长度li
腰围si
所钓鱼的长度、腰围与重量 cm, g
1 36.83
2 31.75
3
5 32.07
6
7
8 32.07
决策 ~ 每一步(此岸到彼岸或彼岸到此岸)船上的人员 要求 ~ 在商人安全的前提下(两岸的随从数都不比商人多), 经有限步使全体人员过河。
数学建模
模型建立及求解
xk~第k次渡河前此岸的商人数 xk, yk=0,1,2,3; 设 yk~第k次渡河前此岸的随从数 k=1,2, sk=(xk , yk)~过程的状态,S ~允许状态集合 S={(x , y) x=0, y=0,1,2,3; x=3, y=0,1,2,3; x=y=1,2}
态转方程,由 s1=(3,3)到达 sn+1=(0,0)。
数学建模
模型求解
穷举法 ~ 编程上机 图解法
状态s=(x,y) ~ 16个格点
3 2
y
s1
d1
S={(x , y) x=0, y=0,1,2,3;
x=3, y=0,1,2,3; x=y=1,2} 允许状态 ~ 10个 点
1
d11 0sn+1 1 2 3 x
sk+1=sk+(-1)k dk
~状态转移方程
uk~第k次渡船上的商人数 uk, vk=0,1,2; vk~第k次渡船上的随从数 k=1,2, D={(u , v) u+v=1, 2} ~允许决策集合
数学建模作业(商人过河问题)
数学建模作业(四)——商人过河问题一.问题描述有四名商人各带一名仆人过河,但船最多能载二人,商人已获得仆人的阴谋:在河的任一岸,只要仆人数超过商人数,仆人会将商人杀死并窃取财物且安排如何乘船的权力掌握在商人手中。
试为商人制定一个安全过河的方案。
二.解决方案用递归的源程序如下:开始时商人,强盗所在的河的这边设为0状态,另一边设为1状态(也就是船开始时的一边设为0,当船驶到对岸是设为1状态,在这两个状态时,都必须符合条件)#include <stdlib.h>struct node /*建立一个类似栈的数据结构并且可以浏览每一个数据点*/ {int x;int y;int state;struct node *next;};typedef struct node state;typedef state *link;link PPointer1=NULL;link PPointer2=NULL;int a1,b1;int a2,b2;/*栈中每个数据都分为0,1状态*/void Push(int a,int b,int n){link newnode;newnode=(link)malloc(sizeof(state));newnode-> x=a;newnode-> y=b;newnode-> state=n;newnode-> next=NULL;if(PPointer1==NULL){PPointer1=newnode;PPointer2=newnode;}else{PPointer2-> next=newnode;PPointer2=newnode;}}void Pop()/*弹栈*/{link pointer;if(PPointer1==PPointer2){free(PPointer1);PPointer1=NULL;PPointer2=NULL;}pointer=PPointer1;while(pointer-> next!=PPointer2)pointer=pointer-> next;free(PPointer2);PPointer2=pointer;PPointer2-> next=NULL;}int history(int a,int b,int n) /*比较输入的数据和栈中是否有重复的*/ {link pointer;if(PPointer1==NULL)return 1;else{pointer=PPointer1;while(pointer!=NULL){if(pointer-> x==a&&pointer-> y==b&&pointer-> state==n)return 0;pointer=pointer-> next;}return 1;}}int judge(int a,int b,int c,int d,int n)/*判断这个状态是否可行,其中使用了history函数*/{if(history(a,b,n)==0) return 0;if(a> =0&&b> =0&&a <=3&&b <=3&&c> =0&&d> =0&&c <=3&&d <=3&&a+c==3&&b+d==3){switch(n){case 1:{if(a==3){Push(a,b,n);return 1;}else if(a==0){Push(a,b,n);return 1;}else if(a==b){Push(a,b,n);return 1;}else return 0;}case 0:{if(a==3){Push(a,b,n);return 1;}else if(a==0){Push(a,b,n);return 1;}else if(a> =b){Push(a,b,n);return 1;}else return 0;}}}else return 0;}int Duhe(int a,int b,int n)/*递归法解决商人渡河问题,如果这一个状态符合*/ {/*则判断下一个状态,直至问题解决*/ if(a==0&&b==0) return 1;if(n==0)/*判断0状态时,商匪状态是否符合要求*/{if(judge(a-1,b-1,4-a,4-b,1)){if(Duhe(a-1,b-1,1)==1)return 1;}if(judge(a,b-2,3-a,5-b,1)){if(Duhe(a,b-2,1)==1)return 1;}if(judge(a-2,b,5-a,3-b,1)){if(Duhe(a-2,b,1)==1)return 1;if(judge(a-1,b,4-a,3-b,1)){if(Duhe(a-1,b,1)==1)return 1;}if(judge(a,b-1,3-a,4-b,1)){if(Duhe(a,b-1,1)==1)return 1;}else{Pop(0);return 0;}}if(n==1)/*判断0状态时,商匪状态是否符合要求*/{if(judge(a+1,b+1,2-a,2-b,0)){if(Duhe(a+1,b+1,0)==1)return 1;}if(judge(a,b+2,3-a,1-b,0)){if(Duhe(a,b+2,0)==1)return 1;}if(judge(a+2,b,1-a,3-b,0)){if(Duhe(a+2,b,0)==1)return 1;}if(judge(a+1,b,2-a,3-b,0)){if(Duhe(a+1,b,0)==1)return 1;}if(judge(a,b+1,3-a,2-b,0))if(Duhe(a,b+1,0)==1)return 1;}else{Pop(1);return 0;}}return 0;}main(){link pointer;Push(3,3,0);Duhe(3,3,0);pointer=PPointer1;while(pointer!=NULL){printf( "%d,%d---%d\n ",pointer-> x,pointer-> y,pointer-> state);pointer=pointer-> next;}getch();}。
商人怎样安全过河文稿
案例名称:商人怎样安全过河学科分类:数学数学分支:初等数学模型预备知识:线性代数,解析几何,MATLAB适用对象:本科、专科学生1.问题的背景与问题提出这个案例是一个智力游戏。
3名商人各带1个随从乘船渡河,一只小船只能容纳2人,由他们自己划行。
随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。
但是如何乘船渡河的大权掌握在商人手中。
商人们怎样才能安全渡河呢?2.问题的分析与模型建立:将一个智力游戏转化成数学问题。
商人渡河问题是一个多步决策问题。
首先由学生从玩游戏开始,在纸面上完成渡河过程;然后再由学生实际演绎,在黑板上记录渡河过程。
利用学生的演绎记录结果进行问题的分析与模型的建立。
分析整个操作过程,让模型的建立随着思考的深入自然而然的呈现。
Step1 变量的设置:用有序数对(x,y)表示岸上商人数和随从数,(u,v)表示船上的商人数和随从数,代数思想的自然渗入;Step2 过程的数学化表示:(x2,y2)=(x1,y1)-(u1,v1)(x3,y3)=(x2,y2)+(u2,v2)......(x i+1,y i+1)=(x i,y i)+(-1)i(u i,v i)规律即模型自然呈现。
Step3 模型的优化:引入集合的表示法状态允许集S={(x,y):x=0,y=0,1,2,3;x=3,y=0,1,2,3;x=y=1,2}允许决策集D={((u,v)):1≤u+v≤2,u,v=0,1,2}状态转移律 s k+1=s k+(-1)k d k求决策d k(k=1,2,...,n)使状态s k按照转移律,由初始状态s1=(3,3)经过有限步n到达状态s n+1=(0,0)。
3.模型的求解与结果检验求解方法1:符号操作法求解方法2:图解法(引入坐标系)求解方法3:穷举法编程上机4.模型的评注与应用用这种规格化的方法建立的多步决策模型可以用计算机来求解,从而具有推广的意义。
5.参考文献[1]姜启源.数学模型.4版.北京:高等教育出版社,2011×图1 符号法图2 安全渡河的图解法(1)图3 安全渡河的图解法(2)x3 2 1 0sn +139d11dxs n +1dmatlab上机程序:(1)function s=businessmann=input('输入商人数目:');nn=input('输入仆人数目:');nnn=input('输入船的最大容量:');if nn>nn=input('输入商人数目:');nn=input('输入仆人数目:');nnn=input('输入船的最大容量:');endk=1;for i=0:nnn %产生出所有的可能过河的决策for j=0:nnnif (i+j<=nnn) &(i+j>0)d(k,1:3)=[i,j,1]; %1表示从此岸到彼岸d(k+1,1:3)=[-i,-j,-1]; %-1表示从彼岸到此岸k=k+2;endendendk=1;for i=n:-1:0 %产生安全队列for j=nn:-1:0if ((i>=j) & ((n-i)>=(nn-j))) | ((i==0)|(i==n))A(k,1:3)=[i,j,1]; %1表示此岸安全k=k+1;endendend%队列数据结构,第一列表示商人数,第二列表示仆人数,第三列用于记录该结点的上一个结点,第四列表示船的运动方向(1表示此岸往彼岸运动,-1表示从彼岸往此岸运动)sq(1,1)=n;sq(1,2)=nn;sq(1,3)=0;sq(1,4)=1; %初始状态front=1;rear=1; %队列的头尾指针while(front<=rear)x=sq(front,1);y=sq(front,2);flag=0;if (sq(front,4)==1)for v=2:2:size(d,1)i=x+d(v,1);j=y+d(v,2);if (is_save(A,i,j)==1)rear=rear+1;sq(rear,1)=i;sq(rear,2)=j;sq(rear,3)=front;sq(rear,4)=-1;endif (i==0 && j==0)flag=1;endendendif (flag==1)break;endflag=0;if (sq(front,4)==-1)for v=1:2:size(d,1)i=x+d(v,1);j=y+d(v,2);if (is_save(A,i,j)==1) & (sq(sq(front,3),1)~=i | sq(sq(front,3),2)~=j)rear=rear+1;sq(rear,1)=i;sq(rear,2)=j;sq(rear,3)=front;sq(rear,4)=1;endif (i==0 && j==0)flag=1;endendendif (flag==1)break;endfront=front+1;(2)function a=is_save(A,x,y)for i=1:size(A,1)if (x==A(i,1) && y==A(i,2))break;endendif i<size(A,1)a=1;elsea=0;。
数学建模:研究商人过河问题
数学建模实验一报告实验题目:研究商人过河问题一、实验目的:编写一个程序(可以是C,C++或Mathlab )实现商人安全过河问题。
二、实验环境:Turbo c 2.0、Microsoft Visual C++ 6.0、Matlab 6.0以上 三、实验要求:要求该程序不仅能找出一组安全过河的可行方案,还可以得到所有的安全过河可行方案。
并且该程序具有一定的可扩展性,即不仅可以实现3个商人,3个随从的过河问题。
还应能实现 n 个商人,n 个随从的过河问题以及n 个不同对象且每个对象有m 个元素问题(说明:对于3个商人,3个随从问题分别对应于n=2,m=3)的过河问题。
从而给出课后习题5(n=4,m=1)的全部安全过河方案。
四、实验步骤:第一步:问题分析。
这是一个多步决策过程,涉及到每一次船上的人员以及要考虑此岸和彼岸上剩余的商人数和随从数,在安全的条件下(两岸的随从数不比商人多),经有限步使全体人员过河。
第二步:分析模型的构成。
记第k 次渡河前此岸的商人数为k x ,随从数为k y ,2,1=k ,n y x k k 2,1,=,(具有可扩展性),将)(k k y x ,定义为状态,状态集合成为允许状态集合(S )。
S={2,1;3,2,1,0,3;3,2,1,0,0|,======y x y x y x y x )(}记第k 次渡船的商人数为k u ,随从数为k v ,决策为),(k k v u ,安全渡河条件下,决策的集合为允许决策集合。
允许决策集合记作D ,所以D={2,1,0,,21|,=<+<v u v u v u )(|1<u+v<2,u,v=0,1,2},因为k 为奇数时船从此岸驶向彼岸,k 为偶数时船由彼岸驶向此岸,所以状态k s 随决策k d 变化的规律是k k k k d s s )1(1-+=-,此式为状态转移律。
制定安全渡河方案归结为如下的多步决策模型:求决策)2,1(n k D d k =∈,使状态S s k ∈按照转移律,由初始状态)3,3(1=s 经有限n 步到达)0,0(1=+n s第三步:模型求解。
商人过河问题数学建模
商人过河一、问题重述问题一:4个商人带着4个随从过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人。
随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。
乘船渡河的方案由商人决定。
商人们怎样才能安全过河?问题二:假如小船可以容3人,请问最多可以有几名商人各带一名随从安全过河。
二、问题分析问题可以看做一个多步决策过程。
每一步由此岸到彼岸或彼岸到此岸船上的人员在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。
用状态变量表示某一岸的人员状况,决策变量表示船上的人员情况,可以找出状态随决策变化的规律。
问题就转换为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。
三.问题假设1.过河途中不会出现不可抗力的自然因素。
2.当随从人数大于商人数时,随从们不会改变杀人的计划。
3.船的质量很好,在多次满载的情况下也能正常运作。
4.随从会听从商人的调度。
四、模型构成x(k)~第k次渡河前此岸的商人数x(k),y(k)=0,1,2,3,4;y(k)~第k次渡河前此岸的随从数k=1,2,…..s(k)=[x(k),y(k)]~过程的状态S~允许状态集合S={(x,y)x=0,y=0,1,2,3,4;x=4,y=0,1,2,3,4;x=y=1,2,3}u(k)~第k次渡船上的商人数u(k),v(k)=0,1,2;k(1) kv(k)~ 第 k 次渡船上的随从数k=1,2…..d(k)=( u(k), v(k))~过程的决策 D~允许决策集合D={u,v u+v=1,2,u,v=0,1,2}状态因决策而改变 s(k+1)=s(k)+(-1)^k*d(k)~状态转移律 求 d(k)D(k=1,2,….n), 使 s(k)S 并 按 转 移 律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)随从 y商人 x数学模型:S k+1=S +(-1)D kx + x ' = 4kky + y ' = 4k k(2)(3)x ≥ y k.k (4)x ' ≥ y 'kk模型分析:由(2)(3)(5)可得(5)4 - x ≥ 4 - ykk化简得(( ( (( ( k(10) k综合(4)可得x = yk还要考虑x ≤ ykkk 和 S k = { x k , y k ) | x k = 0, y k = 0,1,2,3,4 }(6)S ' = { x ', y ') | x ' = 0, y ' = 0,1,2,3,4 }kkkkk(7)把(2)(3)带入(7)可得S = {(4 - x ,4 - y ) | 4 - x = 0,4 - y = 0,1,2,3,4 }kk k k k化简得S = { x , y ) | x = 4, y = 0,1,2,3,4 }kk k k k综合(6)(7)(8)式可得满足条件的情况满足下式S = { x , y ) | x = 0,4, y = 0,1,2,3,4; x = ykkkkk k k所以我们知道满足条件的点如上图所示:点移动由}(8)(9)S = { x , y ) | x = 4, y = 0,1,2,3,4 }kkkkk(8)到达S = { x , y ) | x = 0, y = 0,1,2,3,4 }kkkkk(6)时,可以认为完成渡河。
商人们怎样安全过河的数学模型
商人们怎样安全过河的数学模型示例文章篇一:话说啊,商人们遇到了一个棘手的问题:他们得带着随从们一起过河,但随从们可不是省油的灯,一有机会就想着害商人抢货。
这河又不宽不窄,一只小船每次只能载两个人,怎么过河才能确保安全呢?咱们来聊聊这个问题吧。
首先,商人们得明白,随从们人多势众,要是他们比商人多了,那可就危险了。
所以,商人们得想个法子,让随从们没法儿耍花招。
其实啊,这个问题可以变成一个数学模型。
想象一下,我们把每次过河的人都看成是一个状态,就像打游戏一样,每过一次河就是进入了一个新的关卡。
在这个关卡里,商人们得保证自己的人数不能少于随从们。
那具体怎么做呢?咱们得先设定一些规则。
比如说,每次过河的人数只能是两个,这是小船的容量决定的。
然后,商人们得选择让哪些人过河,这就得靠他们的智慧和策略了。
想象一下这个场景:商人们先让两个随从过河,然后一个商人再带一个随从回来。
这样,河对岸的随从人数虽然多了,但商人这边还有足够的人手可以应对。
接下来,两个商人再过河,这样河对岸的商人数就比随从数多了,安全就得到了保障。
然后,再让一个商人带一个随从回来,这样河这边也有足够的商人保护随从不敢造次。
最后,两个随从再过河,问题就解决了。
这个数学模型虽然简单,但却非常实用。
它告诉我们,在面对困难和挑战时,只要我们善于运用智慧和策略,就一定能够找到解决问题的方法。
所以,商人们要想安全过河,就得靠他们的智慧和勇气了。
示例文章篇二:话说啊,有这么一个古老的谜题,叫做“商人过河”。
话说有三名聪明的商人,他们各自带着一个狡猾的随从,准备乘船过河。
这船啊,一次只能载两个人,问题就在于,这些随从们心里都有个小九九,他们密谋着,只要到了河的对岸,随从人数多于商人人数,就立马动手抢货。
这商人们也不是吃素的,他们知道随从们的阴谋,但他们毕竟都是聪明人,于是就想出了一个绝妙的策略。
咱们来想想啊,这过河其实就是一个多步决策的过程。
每次渡河,船上的人员选择都至关重要。
商人过河问题数学建模
作业1、2:商人过河一、问题重述问题一:4个商人带着4个随从过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人。
随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。
乘船渡河的方案由商人决定。
商人们怎样才能安全过河?问题二:假如小船可以容3人,请问最多可以有几名商人各带一名随从安全过河。
二、问题分析问题可以看做一个多步决策过程。
每一步由此岸到彼岸或彼岸到此岸船上的人员在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。
用状态变量表示某一岸的人员状况,决策变量表示船上的人员情况,可以找出状态随决策变化的规律。
问题就转换为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。
三.问题假设1. 过河途中不会出现不可抗力的自然因素。
2. 当随从人数大于商人数时,随从们不会改变杀人的计划。
3.船的质量很好,在多次满载的情况下也能正常运作。
4. 随从会听从商人的调度。
四、模型构成x(k)~第k次渡河前此岸的商人数 x(k),y(k)=0,1,2,3,4;y(k)~第k次渡河前此岸的随从数 k=1,2,…..s(k)=[ x(k), y(k)]~过程的状态 S~允许状态集合S={(x,y)|x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3}u(k)~第k次渡船上的商人数 u(k), v(k)=0,1,2;v(k)~ 第k 次渡船上的随从数 k=1,2…..d(k)=( u(k), v(k))~过程的决策 D~允许决策集合D={u,v|u+v=1,2,u,v=0,1,2}状态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~状态转移律求d(k) ÎD(k=1,2,….n),使s(k) ÎS 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)数学模型:k+1k S =S +kk D (-1) (1)'4k k x x += (2)'4k k y y += (3)k.k x y ≥ (4)''k k x y ≥ (5)模型分析:由(2)(3)(5)可得44k k x y -≥-化简得k k x y ≤综合(4)可得kk x y = 和 {}(,)|0,0,1,2,3,4k k k k k S x y x y === (6) 还要考虑{}'(',')|'0,'0,1,2,3,4k k k k k S x y x y === (7) 把(2)(3)带入(7)可得{}(4,4)|40,40,1,2,3,4k k k k k S x y x y =---=-=化简得{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 综合(6)(7)(8)式可得满足条件的情况满足下式{}(,)|0,4,0,1,2,3,4;kk k k k k k S x y x y x y ==== (9)所以我们知道满足条件的点如上图所示:点移动由 {}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)到达{}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)时,可以认为完成渡河。
商人过河案例建模
商人过河设有三名商人,各带一个随从,欲乘一小船渡河,小船只能容纳两人,须由他们自己划行。
随从们密约,在河的任何一岸,一旦随从的人数比商人多,就杀人越货。
而如何乘船渡河的大权掌握在商人们的手中。
商人们怎样才能安全渡河呢?因这已经是一个相当清晰的理想化问题,所以直接讨论其模型描述以及模型求解。
这里将其描述为一个动态决策问题:记第k次渡河前此岸的商人数为,随从数为, k=1,…,n。
将二维向量定义为状态,安全渡河条件下的状态集合称为允许状态集合,记作S, 。
记第k次渡船上的商人数为,随从数为, k=1,…,n。
将二维向量定义为决策。
考虑小船载人数的限制,应满足,而称为允许决策集合。
因为k为奇数时,船从此岸驶向彼岸;k为偶数时,船从彼岸驶回此岸,所以状态随决策的变化规律是(状态转移规律)。
求决策,使状态按照状态转移规律,由初始状态经有限步n到达状态。
接下来讨论模型的求解,设是某个可行的渡河方案所对应的状态序列,若存在某,且同为奇数或同为偶数,满足,则称所对应的渡河方案是可约的。
这时也是某个可行的渡河方案所对应的状态序列。
显然,一个有效的渡河方案应当是不可约的。
设渡河已进行到第k步,为当前的状态,记,,为保证构造的渡河方案不可约,则当前的决策除了应满足:1),且当k为奇数时,,当k为偶数时,;还须满足:2)当k为奇数时,;当k为偶数时,。
通过作图,可以得到两种不可约的渡河方案,如下图:思考题:(1)四名商人各带一名随从的情况(小船同前)。
(2)n名商人各带n名随从的情况(小船同前)。
商人随从过河
数学建模作业题目:商人随从过河队员:姓名:***姓名:***姓名:王*2011年08月25日商人过河问题摘要本文针对商人渡河的问题,建立分步决策模型,采用Dijkstra算法解决了商人和随从渡河问题。
根据题意用三维向量表示商人、随从和船的状态,并且定义此岸允许状态集合、彼岸允许状态集合及决策变量集合。
然后把此岸允许状态集合和彼岸允许状态集合中的每个元素视为节点,按照状态转移规律连接这些节点构成了一个连通图,寻找安全的渡河方案最终转化为从起始状态(节点)到最终状态(节点)的路径,用图论的Dijkstra算法找出所有路径,每一条路径对应一种渡河方案,整体方案如图1(实心点代表此岸,空心点代表彼岸,人数均为此岸人数),由图可知共有四种渡河方案。
图1 整体渡河方案关键词:分步决策 Dijkstra算法三维向量连通图1 问题重述三名商人各带一名随从过河,随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货.但是乘船渡河的方案由商人决定.商人们怎样才能安全过河?(如果推广到四名商人四个随从又如何?)2 模型假设(1)商人和仆人都会划船,并且仆人听从商人的调度 (2)商人和仆人每次渡船都能安全到达(3)船的质量很好,在多次满载情况也能正常运作3 符号说明(1) k s 第k 次渡河前此岸商人和仆人的数量称为状态向量;(2) ks '第k 次渡河前彼岸商人和仆人的数量称为状态向量; (3) S 所有安全渡河条件下状态向量的集合; (4) S '所有安全渡河条件下状态向量的集合; (5) k d 第k 次渡河船上商人和仆人的数称为决策向量; (6) D 所有安全渡河条件下决策向量的集合; (7) k x 第k 次渡河前此岸的商人数;(8) kx ' 第k 次渡河前彼岸的商人数; (9) k y 第k 次渡河前此岸的仆人数;(10) ky ' 第k 次渡河前此岸的仆人数; (11) k u 第k 次渡船上的商人数; (12) k v 第k 次渡船上的仆人数。
(完整word版)商人过河问题数学建模
作业1、2:商人过河一、问题重述问题一:4个商人带着4个随从过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人。
随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。
乘船渡河的方案由商人决定。
商人们怎样才能安全过河?问题二:假如小船可以容3人,请问最多可以有几名商人各带一名随从安全过河。
二、问题分析问题可以看做一个多步决策过程。
每一步由此岸到彼岸或彼岸到此岸船上的人员在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。
用状态变量表示某一岸的人员状况,决策变量表示船上的人员情况,可以找出状态随决策变化的规律。
问题就转换为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。
三.问题假设1. 过河途中不会出现不可抗力的自然因素。
2. 当随从人数大于商人数时,随从们不会改变杀人的计划。
3.船的质量很好,在多次满载的情况下也能正常运作。
4. 随从会听从商人的调度。
四、模型构成x(k)~第k次渡河前此岸的商人数x(k),y(k)=0,1,2,3,4;y(k)~第k次渡河前此岸的随从数k=1,2,…..s(k)=[ x(k), y(k)]~过程的状态S~允许状态集合S={(x,y) x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3}u(k)~第k次渡船上的商人数u(k), v(k)=0,1,2;v(k)~ 第k次渡船上的随从数k=1,2…..d(k)=( u(k), v(k))~过程的决策 D~允许决策集合D={u,v |u+v=1,2,u,v=0,1,2}状态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~状态转移律求d(k) ∈D(k=1,2,….n),使s(k)∈S 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)数学模型:k+1k S =S +k k D (-1) (1)'4k k x x += (2)'4k k y y += (3)k.k x y ≥ (4)''k k x y ≥ (5)模型分析:由(2)(3)(5)可得44kk x y -≥- 化简得k k x y ≤综合(4)可得k k x y = 和 {}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)还要考虑 {}'(',')|'0,'0,1,2,3,4kk k k k S x y x y === (7) 把(2)(3)带入(7)可得{}(4,4)|40,40,1,2,3,4k k k k k S x y x y =---=-=化简得{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 综合(6)(7)(8)式可得满足条件的情况满足下式{}(,)|0,4,0,1,2,3,4;k k k k k k k S x y x y x y ==== (9)所以我们知道满足条件的点如上图所示:点移动由{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 到达{}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)时,可以认为完成渡河。
数学建模:研究商人过河问题之欧阳道创编
数学建模实验一报告实验题目:研究商人过河问题一、实验目的:编写一个程序(可以是C,C++或Mathlab)实现商人安全过河问题。
二、实验环境:Turbo c 2.0、Microsoft Visual C++ 6.0、Matlab 6.0以上三、实验要求:要求该程序不仅能找出一组安全过河的可行方案,还可以得到所有的安全过河可行方案。
并且该程序具有一定的可扩展性,即不仅可以实现3个商人,3个随从的过河问题。
还应能实现n个商人,n个随从的过河问题以及n个不同对象且每个对象有m个元素问题(说明:对于3个商人,3个随从问题分别对应于n=2,m=3)的过河问题。
从而给出课后习题5(n=4,m=1)的全部安全过河方案。
四、实验步骤:第一步:问题分析。
这是一个多步决策过程,涉及到每一次船上的人员以及要考虑此岸和彼岸上剩余的商人数和随从数,在安全的条件下(两岸的随从数不比商人多),经有限步使全体人员过河。
第二步:分析模型的构成。
记第k 次渡河前此岸的商人数为k x ,随从数为k y , 2,1=k ,n y x k k 2,1,=,(具有可扩展性),将)(k k y x ,定义为状态,状态集合成为允许状态集合(S )。
S={2,1;3,2,1,0,3;3,2,1,0,0|,======y x y x y x y x )(}记第k 次渡船的商人数为k u ,随从数为k v ,决策为),(k k v u ,安全渡河条件下,决策的集合为允许决策集合。
允许决策集合记作D ,所以D={2,1,0,,21|,=<+<v u v u v u )(|1<u+v<2,u,v=0,1,2},因为k 为奇数时船从此岸驶向彼岸,k 为偶数时船由彼岸驶向此岸,所以状态k s 随决策k d 变化的规律是k k k k d s s )1(1-+=-,此式为状态转移律。
制定安全渡河方案归结为如下的多步决策模型:求决策)2,1(n k D d k =∈,使状态S s k ∈按照转移律,由初始状态)3,3(1=s 经有限n 步到达)0,0(1=+n s第三步:模型求解。
商人过河问题数学建模
作业1、2:之相礼和热创作贩子过河一、成绩重述成绩一:4个贩子带着4个随从过河,过河的工具只要一艘小船,只能同时载两个人过河,包含划船的人.随从们密约, 在河的任一岸, 一旦随从的人数比贩子多, 就舍己为人.乘船渡河的方案由贩子决定.贩子们怎样才能安全过河?成绩二:假如小船可以容3人,叨教最多可以有几名贩子各带一名随从安全过河.二、成绩分析成绩可以看做一个多步决策过程.每一步由此岸到此岸或此岸到此岸船上的人员在安全的前提下(两岸的随从数不比贩子多),经无限步使全体人员过河.用形态变量暗示某一岸的人员状况,决策变量暗示船上的人员状况,可以找出形态随决策变更的规律.成绩就转换为在形态的容许变更范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目的.三.成绩假设1. 过河途中不会出现不成抗力的自然要素.2. 当随从人数大于贩子数时,随从们不会改变杀人的计划. 3.船的质量很好,在多次满载的状况下也能正常运作.4. 随从会遵从贩子的调度.四、模型构成x(k)~第k 次渡河前此岸的贩子数 x(k),y(k)=0,1,2,3,4; y(k)~第k 次渡河前此岸的随从数 k=1,2,…..s(k)=[ x(k), y(k)]~过程的形态 S~容许形态集合S={(x,y)|x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3}u(k)~第k 次渡船上的贩子数 u(k), v(k)=0,1,2;v(k)~ 第k 次渡船上的随从数 k=1,2…..d(k)=( u(k), v(k))~过程的决策 D~容许决策集合D={u,v|u+v=1,2,u,v=0,1,2}形态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~形态转移律求d(k)ÎD(k=1,2,….n),使s(k)ÎS 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)数学模型: k+1kS =S +k k D (-1)(1) '4k k x x += (2)'4k k y y +=(3)k.k x y ≥ (4)''k k x y ≥(5)模型分析:由(2)(3)(5)可得化简得综合(4)可得k k x y =和 {}(,)|0,0,1,2,3,4k k k k k S x y x y ===(6)还要考虑{}'(',')|'0,'0,1,2,3,4k k k k k S x y x y === (7)把(2)(3)带入(7)可得化简得 {}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)综合(6)(7)(8)式可得满足条件的状况满足下式 {}(,)|0,4,0,1,2,3,4;k k k k k k k S x y x y x y ====(9)以是我们晓得满足条件的点如上图所示:点挪动由 {}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)到达 {}(,)|0,0,1,2,3,4k k k k k S x y x y ===(6)时,可以以为完成渡河. 由于挪动的格数小于等于2,只要中心点(2,2)到(6)点和(8)点的距离为2,以是中心点(2,2)成为渡河的关键点.当我们挪动到(2,2)点时,就无法进行下往.故4个贩子,4个随从,船容量为2人时,无法安全渡河. 对于成绩二,我们可以建立模型为:k+1k S =S +k k D (-1)(10)'k k x x M += (11)'k k y y M += (12)k.k x y ≥(13)''k k x y ≥ (14)u(k), v(k)=0,1,2,3; (15)经过类似于成绩一的步调可以晓得:坐标上的关键点是(3,3),最多可以五名贩子带五名随从过往.必要确定五名贩子带五名随从的方案可行再确定六名贩子带六名随从的方案不成行1、五名贩子带五名随从的状况:(1)首先不成能有三名贩子先过河,两名贩子一名随从过河,一名贩子两名随从过河(2)三个随从先过河(5,2),回来一个随从(5,3),过往两个随从(5,1)回来一个随从(5,2),再过往三个贩子(2,2),回来一个贩子一个随从(3,3),再过往三个贩子(0,3),回来一个随从(0,4),过往三个随从(0,1),回来一个随从(0,2)再过往两个随从(0,0)综上可知:五名贩子带五名随从,小船可以载三个人可以过河2、六名贩子带六名随从的状况:(1)首先不成能有三名贩子先过河,两名贩子一名随从过河,一名贩子两名随从过河(2)三个随从先过河(6,3),回来一个随从(6,4),过往两个随从(6,2)回来一个随从(6,3),过往三个贩子(3,3),此时两岸都是(3,3),由坐标法分析知,这是最接近尽头的临界点,但是假如回来的时分肯定是回来一个贩子和一个随从,假如这一步可行,后面就进行不往综上所述,六个贩子带六个随从,小船载三个人的状况下不克不及渡河结合1、2知,当小船最多载三个人的时分,最多五名贩子各带一个随从可以过河.五、模型的检验与评价由多数人的过河成绩推行到了更多数人的过河成绩,使得成绩变得明了有规律.六、参考文献[1]章胤,2014年燕山大学天下大门生数学建模竞赛培训ppt,2014年4月17日。
商人过河的数学模型及编程解决【范本模板】
14对商仆过河问题题目有14名商人各带一名仆人要过河,但船最多能载4人。
商人已获得仆人的阴谋:在河的任意一岸,只要仆人数超过商人数,仆人会将商人杀死并窃取货物。
安排如何乘船的权利权利在商人手上,试为商人制定一个安全的过河方案。
一.摘要n对商仆过河,一只船最多载m人,船上和岸上的仆人数都不能多于商人数,否则商人有危险。
安排合理的渡河方案,保证商人能安全渡河。
(可利用向量,矩阵,图解等方法)。
二.问题提出:有14对商仆乘船过河,一只船最多载4人,由商人和仆人自己划船渡河,在河的任意一岸,一旦仆人数多于商人数,仆人就可将商人杀死,谋取利益,但是乘船渡河的主动权掌握在商人们手中,商人们如何安排渡河方案,才能安全渡河?三.问题分析商仆安全渡河问题可以视为一个多步决策过程,多步决策是指决策过程难以一次完成,而是多步优化,最后获取一个全局最优方案的决策方法。
对于每一步,即船由此岸驶向彼岸,或者船由彼岸驶向此岸的决策,不仅会影响到该过程的效果,而且还会影响到下一步的初始状态,从而对整个过程都会有影响。
所以,在每一次过河时,就不能只从这一次过河本身考虑,还要把它看成是整个过河过程中的一个部分。
在对船上的人员做决策时,要保证两岸的商人数不能少于仆人数,用最少的步伐是人员全部过河.应用状态向量和运载向量,找出状态随运载变化的规律,此问题就转化为状态在允许范围内(即安全渡河条件),确定每一次该如何过河,从而达到渡河的目标。
现在我们都把它们数量化:即用数学语言来表示。
四.模型假设与符号假设(一)模型假设商人和仆人都会划船,天气很好,无大风大浪,船的质量很好,船桨足够很多次的运载商人和仆人。
(二)符号假设设(x,y)是状态向量,表示任一岸的商人和仆人数,且x,y分别要大于等于0,小于等于M。
1.设(m,n)是运载向量,表示运载的商人数和仆人数,0<=m<=N,0<=n<=N,0〈=m+n〈=N。
2.设用s表示所有的可取状态向量的集合。
数学模型实验商人过河
《数学模型实验》实验报告姓名:王佳蕾学院:数学与信息科学学院地点:主楼402学号:20151001055专业:数学类时间:2017年4 月 16日一、实验名称:商人和仆人安全渡河问题的matlab实现二、实验目的:1.熟悉matlab基础知识,初步了解matlab程序设计;2.研究多步决策过程的程序设计方法;3.(允许)状态集合、(允许)决策集合以及状态转移公式的matlab表示;三、实验任务:只有一艘船,三个商人三个仆人过河,每一次船仅且能坐1-2个人,而且任何一边河岸上仆人比商人多的时候,仆人会杀人越货。
怎么在保证商人安全的情况下,六个人都到河对岸去,建模并matlab实现。
要求:代码运行流畅,结果正确,为关键语句加详细注释。
四、实验步骤:1.模型构成2.求决策3.设计程序4.得出结论(最佳解决方案)五、实验内容:(一)构造模型并求决策设第k次渡河前此岸的商人数为xk,随从数为yk,k=1,2,...,xk,yk=0,1,2,3.将二维向量sk=(xk,yk)定义为状态,安全渡河条件下的状态集合称为允许状态集合,记作S,S 对此岸和彼岸都是安全的。
S={(x,y)|x=0,y=0,1,2,3;x=3,y=0,1,2,3;x=y=1,2}设第k次渡船上的商人数为uk,随从数vk,将二维变量dk=(uk,vk)定义为决策,允许决策集合记为D,由小船的容量可知,D={(u,v)|1<=u+v<=2,u,v=0,1,2}k为奇数时,船从此岸驶向彼岸,k为偶数时,船从彼岸驶向此岸,状态sk随决策变量dk的变化规律为sk+1=sk+(-1)^k*dk(状态转移律)这样制定安全渡河方案归结为如下的多步决策模型:求决策dk∈D(k=1,2,...,n),使状态sk∈S,按照转移律,由初始状态s1=(3,3)经有限步n到达状态sn+1=(0,0)。
(二)程序设计(三)运行结果六、结论体会:安全渡河问题可以看成一个多步决策过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
商人过河问题数学建模 WEIHUA system office room 【WEIHUA 16H-WEIHUA WEIHUA8Q8-
作业1、2:
商人过河
一、问题重述
问题一:4个商人带着4个随从过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人。
随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。
乘船渡河的方案由商人决定。
商人们怎样才能安全过河?
问题二:假如小船可以容3人,请问最多可以有几名商人各带一名随从安全过河。
二、问题分析
问题可以看做一个多步决策过程。
每一步由此岸到彼岸或彼岸到此岸船上的人员在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。
用状态变量表示某一岸的人员状况,决策变量表示船上的人员情况,可以找出状态随决策变化的规律。
问题就转换为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。
三.问题假设
1. 过河途中不会出现不可抗力的自然因素。
2. 当随从人数大于商人数时,随从们不会改变杀人的计划。
3.船的质量很好,在多次满载的情况下也能正常运作。
4. 随从会听从商人的调度。
四、模型构成
x(k)~第k次渡河前此岸的商人数 x(k),y(k)=0,1,2,3,4;
y(k)~第k次渡河前此岸的随从数 k=1,2,…..
s(k)=[ x(k), y(k)]~过程的状态 S~允许状态集合
S={(x,y) x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3}
u(k)~第k 次渡船上的商人数 u(k), v(k)=0,1,2;
v(k)~ 第k 次渡船上的随从数 k=1,2…..
d(k)=( u(k), v(k))~过程的决策 D~允许决策集合
D={u,vu+v=1,2,u,v=0,1,2}
状态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~状态转移律
求d(k) D(k=1,2,….n),使s(k)
S 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)
数学模型:
k+1k S =S +k k D (-1) (1)
'4k k x x += (2)
'4k k y y += (3)
k.k x y ≥ (4)
''k k x y ≥ (5)
模型分析:
由(2)(3)(5)可得
化简得
综合(4)可得
k k x y = 和 {}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)
还要考虑 {}'(',')|'0,'0,1,2,3,4k
k k k k S x y x y === (7) 把(2)(3)带入(7)可得
化简得
{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)
综合(6)(7)(8)式可得
满足条件的情况满足下式
{}(,)|0,4,0,1,2,3,4;k k k k k k k S x y x y x y ==== (9)
所以我们知道满足条件的点如上图所示:点移动由
{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 到达
{}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)
时,可以认为完成渡河。
因为移动的格数小于等于2,只有中心点(2,2)到(6)点和(8)点的距离为2,所以中心点(2,2)成为渡河的关键点。
当我们移动到(2,2)点时,就无法进行下去。
故4个商人,4个随从,船容量为2人时,无法安全渡河。
对于问题二,我们可以建立模型为:
k+1k S =S +k k D (-1) (10)
'k k x x M += (11)
'k k y y M += (12)
k.k x y ≥ (13)
''k k x y ≥ (14)
u(k), v(k)=0,1,2,3; (15)
通过类似于问题一的步骤可以知道:坐标上的关键点是(3,3),最多可以五名商人带五名随从过去。
需要确定五名商人带五名随从的方案可行再确定六名商人带六名随从的方案不可行
1、五名商人带五名随从的情况:
(1)首先不可能有三名商人先过河,两名商人一名随从过河,一名商人两名随从过河
(2)三个随从先过河(5,2),回来一个随从(5,3),过去两个随从(5,1)回来一个随从(5,2),再过去三个商人(2,2),回来一个商人一个随从(3,3),再过去三个商人(0,3),回来一个随从(0,4),过去三个随从(0,1),回来一个随从(0,2)再过去两个随从(0,0)
综上可知:五名商人带五名随从,小船可以载三个人可以过河
2、六名商人带六名随从的情况:
(1)首先不可能有三名商人先过河,两名商人一名随从过河,一名商人两名随从过河
(2)三个随从先过河(6,3),回来一个随从(6,4),过去两个随从(6,2)回来一个随从(6,3),过去三个商人(3,3),此时两岸都是(3,3),由坐标法分析知,这是最
接近终点的临界点,但是如果回来的时候一定是回来一个商人和一个随从,如果这一步可行,后面就进行不去
综上所述,六个商人带六个随从,小船载三个人的情况下不能渡河
结合1、2知,当小船最多载三个人的时候,最多五名商人各带一个随从可以过河。
五、模型的检验与评价
由少数人的过河问题推广到了更多数人的过河问题,使得问题变得明了有规律。
六、参考文献
[1]章胤,2014年燕山大学全国大学生数学建模竞赛培训ppt,2014年4月17日。