商人过河数学模型Word文件下载.docx
《商人过河数学模型Word文件下载.docx》由会员分享,可在线阅读,更多相关《商人过河数学模型Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
2.只有一条船,且每条船上最多只能乘坐两个人;
3.所有商人与随从之间没有矛盾,不会出现两人不愿意坐一条船的现象;
4.船在渡河的过程中不受外界环境的影响。
四、模型的建立与求解
1.模型建立
~第k次渡河前此岸的商人数,
~第k次渡河前此岸的随从数
=0,1,2,3;
k=1,2,……
=(
ck)~过程的状态,其中
ck分别表示对应时刻此岸的商人,仆人数以及船的行进方向,其中c取值1表示即将向彼岸运行,为0表示即将向此岸运行
S~允许状态集合,S={(x,y)|x=0,y=0,1,2,3;
x=3,y=0,1,2,3;
x=y=1,2}
~第k次渡船上的商人数
~第k次渡船上的随从数
)~决策,D={(u,v)|
=0,1,2}~允许决策集合
k=1,2,……
因为k为奇数时船从此岸驶向彼岸,k为偶数时船从彼岸驶向此岸,所以状态
随决策
的变化规律是
=
+
~状态转移律
求
∈D(k=1,2,…n),使
∈S,并按转移律由
=(3,3,1)到达状态
=(0,0,0
(1))。
2.模型求解
本模型使用MATLAB软件编程求解,运行结果如下
>
chouxiang
输入商人数目:
3
输入仆人数目:
输入船的最大容量:
2
ans=
00
11
01
03
02
22
31
30
32
33
Matlab程序
functionfoot=chouxiang
%程序开始需要知道商人数,仆人数,船的最大容量
sr=input('
'
);
pr=input('
c=input('
ifpr>
sr
end
%状态数组生成
zt=1;
%状态数组存放在矩阵“A”中,zt为插入新元素的行标初始为1
fori=sr:
-1:
forj=pr:
if((i>
=j)&
((sr-i)>
=(pr-j)))|((i==0)|(i==sr))%(i>
=(pr-j)))|((i==0)|(i==sr))为可以存在的状态的约束条件
A(zt,1:
3)=[i,j,1];
%表示此岸安全
A(zt+1,1:
3)=[i,j,0];
zt=zt+2;
end
j=pr;
end;
%决策生成
jc=1;
fori=0:
c
forj=0:
if(i+j<
=c)&
(i+j>
0)%满足条件D={(u,v)|1<
=u+v<
=c,u,v=0,1,2}
d(jc,1:
3)=[i,j1];
%表示从此岸到彼岸
d(jc+1,1:
3)=[-i,-j,-1];
%表示从彼岸到此岸
jc=jc+2;
j=0;
end
%将状态数组生成抽象矩阵
k=(1/2)*size(A,1);
CX=zeros(2*k,2*k);
a=size(d,1);
fori=1:
2*k
forj=1:
a
c=A(i,:
)+d(j,:
);
x=find((A(:
1)==c
(1))&
(A(:
2)==c
(2))&
3)==c(3)));
v(i,x)=1;
%x为空不会改变v的值
%dijstra方法
x=1;
y=size(A,1);
m=size(v,1);
T=zeros(m,1);
T=T.^-1;
lmd=T;
P=T;
S=zeros(m,1);
S(x)=1;
P(x)=0;
lmd(x)=0;
k=x;
while
(1)
a=find(S==0);
aa=find(S==1);
ifsize(aa,1)==m
break;
size(a,1)
pp=a(j,1);
ifv(k,pp)~=0
ifT(pp)>
(P(k)+v(k,pp))
T(pp)=(P(k)+v(k,pp));
lmd(pp)=k;
mi=min(T(a));
ifmi==inf
else
d=find(T==mi);
d=d
(1);
P(d)=mi;
T(d)=inf;
k=d;
S(d)=1;
iflmd(y)==inf
foot='
cannotreach'
;
return;
foot
(1)=y;
g=2;
h=y;
while
(1)
ifh==x
foot(g)=lmd(h);
g=g+1;
h=lmd(h);
end
foot=A(foot,:
foot(:
3)=[];
五、模型评价与推广
1.模型的优点:
采用了较为成熟的数学理论建立模型,可行度比较高;
模型的求解运用了强大的matlab软件,结果可信度高,便于推广;
2.模型的缺点:
没有找到商人数﹑随从数及船的容量之间的数量关系;
没有考虑到实际生活中,在安全渡河的前提下,商人过河的优先级应高于随从。
3.该商人、随从过河模型可以完美解决此类商仆过河的决策问题,并且该模型还可推广至解决m个商人和n个随从过河,以及小船的最大载重人数改变时的问题,只需适当地改变相关的语句即可轻松实现模型的转换。