商人过河数学模型.docx

上传人:b****8 文档编号:9302987 上传时间:2023-02-04 格式:DOCX 页数:9 大小:38.21KB
下载 相关 举报
商人过河数学模型.docx_第1页
第1页 / 共9页
商人过河数学模型.docx_第2页
第2页 / 共9页
商人过河数学模型.docx_第3页
第3页 / 共9页
商人过河数学模型.docx_第4页
第4页 / 共9页
商人过河数学模型.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

商人过河数学模型.docx

《商人过河数学模型.docx》由会员分享,可在线阅读,更多相关《商人过河数学模型.docx(9页珍藏版)》请在冰豆网上搜索。

商人过河数学模型.docx

商人过河数学模型

 

商人过河数学模型

 

专业信息与计算科学

班级113010102

罗彪

学号***********

 

一、问题重述

3名商人各带一名随从乘船渡河,一只小船只能容纳二人,由他们自己划行。

随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。

但是如何乘船渡河的大权掌握在商人们手中。

商人们怎样才能安全过河呢?

二、问题分析

商随过河问题可以视为一个多步决策过程,通过多次优化,最后获取一个全局最优的决策方案。

对于每一步,即船由此岸驶向彼岸或由彼岸驶向此岸,都要对船上的人员作出决策,在保证两岸的商人数不少于随从数的前提下,在有限步使全部人员过河。

用状态变量表示某一岸的人员状况,决策变量表示船上的人员状况,可以找出状态随决策变化的规律,问题转化为在状态的允许变化围(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。

三、模型假设

1.每个商人和随从都会划船;

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

输入仆人数目:

3

输入船的最大容量:

2

ans=

00

11

01

03

02

22

11

31

30

32

31

33

Matlab程序

functionfoot=chouxiang

%程序开始需要知道商人数,仆人数,船的最大容量

sr=input('输入商人数目:

');

pr=input('输入仆人数目:

');

c=input('输入船的最大容量:

');

ifpr>sr

sr=input('输入商人数目:

');

pr=input('输入仆人数目:

');

c=input('输入船的最大容量:

');

end

%状态数组生成

zt=1;%状态数组存放在矩阵“A”中,zt为插入新元素的行标初始为1

fori=sr:

-1:

0

forj=pr:

-1:

0

if((i>=j)&((sr-i)>=(pr-j)))|((i==0)|(i==sr))%(i>=j)&((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;

end;

%决策生成

jc=1;

fori=0:

c

forj=0:

c

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;

end

end

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))&(A(:

3)==c(3)));

v(i,x)=1;%x为空不会改变v的值

end

end

%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;

end

forj=1:

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;

end

end

end

mi=min(T(a));

ifmi==inf

break;

else

d=find(T==mi);

d=d

(1);

P(d)=mi;

T(d)=inf;

k=d;

S(d)=1;

end

end

iflmd(y)==inf

foot='cannotreach';

return;

end

foot

(1)=y;

g=2;h=y;

while

(1)

ifh==x

break;

end

foot(g)=lmd(h);

g=g+1;

h=lmd(h);

end

foot=A(foot,:

);

foot(:

3)=[];

五、模型评价与推广

1.模型的优点:

采用了较为成熟的数学理论建立模型,可行度比较高;

模型的求解运用了强大的matlab软件,结果可信度高,便于推广;

2.模型的缺点:

没有找到商人数﹑随从数及船的容量之间的数量关系;没有考虑到实际生活中,在安全渡河的前提下,商人过河的优先级应高于随从。

3.该商人、随从过河模型可以完美解决此类商仆过河的决策问题,并且该模型还可推广至解决m个商人和n个随从过河,以及小船的最大载重人数改变时的问题,只需适当地改变相关的语句即可轻松实现模型的转换。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1