商人过河实验报告参考模板.docx

上传人:b****5 文档编号:6802600 上传时间:2023-01-10 格式:DOCX 页数:12 大小:123.47KB
下载 相关 举报
商人过河实验报告参考模板.docx_第1页
第1页 / 共12页
商人过河实验报告参考模板.docx_第2页
第2页 / 共12页
商人过河实验报告参考模板.docx_第3页
第3页 / 共12页
商人过河实验报告参考模板.docx_第4页
第4页 / 共12页
商人过河实验报告参考模板.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

商人过河实验报告参考模板.docx

《商人过河实验报告参考模板.docx》由会员分享,可在线阅读,更多相关《商人过河实验报告参考模板.docx(12页珍藏版)》请在冰豆网上搜索。

商人过河实验报告参考模板.docx

商人过河实验报告参考模板

数学模型实验—实验报告6

学院:

工商学院专业:

电气二类(计算机)姓名:

辛文辉尚磊张亨

学号:

___201248401920124840912012484055____实验时间:

__3.18____实验地点:

b3

一、实验项目:

Matlab程序设计

安全渡河问题可以看成一个多步决策过程。

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

用状态(变量)表示某一岸的人员状况,决策(变量)表示船上的人员状况,可以找出状态随决策变化的规律。

问题转化为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到渡河的目的。

此类智力问题经过思考,可以拼凑出一个可行方案。

但是,我们现在希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。

二、实验目的和要求

a.了解Matlab程序设计有关基本操作

b.掌握有关程序结构

三、实验内容

允许的状态向量

00

01

02

03

04

05

06

07

08

09

010

011

11

22

33

44

55

66

77

88

99

1010

110

111

112

113

114

115

116

117

118

119

1110

允许的决策向量:

01

02

03

04

05

06

10

11

20

21

22

30

31

32

33

40

41

42

50

51

60

过河步骤:

第1步:

0商5仆过河,0商1仆返回

第2步:

5商1仆过河,1商1仆返回

第3步:

3商3仆过河,1商1仆返回

第4步:

3商3仆过河,1商1仆返回

第5步:

3商3仆过河,完成

 

过河过程中状态变化:

步骤此岸商此岸仆方向彼岸商彼岸仆

1116==>-8-3

117<==-8-4

266==>-3-3

77<==-4-4

344==>-1-1

55<==-2-2

422==>11

33<==00

500==>33

对于经典的3对商仆、小船容量为2人时的问题,运行程序求得结果如下

11对商仆,小船容量为6人时,运行程序求得结果如下:

图311对商仆、小船容量为6时的求解结果

 

事实上,11对商仆时的状态空间如图:

0

2

4

6

8

10

0

2

4

6

8

10

11

11

可行状态

图412对商仆时的状态空间

显然的船容量必须至少保证状态转移能够沿对角线方向向下移动,问题才会有解。

船容量为2时可以使状态转移沿对角线移动,但不能持续向下移动,船容量至少为4才可使状态能够沿对角线向下移动。

下面说明何时需要状态空间沿对角线移动。

当商仆对数为6时,状态空间为:

图56对商仆时的状态空间

此时状态中心(3,3)距离边界状态(6,3)的距离为3,船容量至少为4才可避免状态转移沿对角线下行,而船容量为4已经是状态转移沿对角线移动的条件,即当商仆对数大于等于6时,船容量至少为4,问题有解。

不难说明,当商仆对数为4或5时,所需的最小船容量为3。

综上,使问题有解的商仆对数与船容量之间的关系如下:

表1商仆对数与船容量的关系

商仆对数

小船容量

1、2、3

≥2

4、5

≥3

≥6

≥4

从图中可以看出,商仆对数为3,容量为2,3,4,5,6的时候,均可以安全过河。

当容量为2时并且有4种方式。

通过计算机运行此c++程序,当题目中给定出任意数量的商人,随从,以及规定出任意船的容量,都可以判断出“商人们能否安全渡河?

”以及解决“如果能,那么安全渡河的方案是什么?

”的问题。

从而使这个模型更具有一定的推广价值。

.附件

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

');

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

');

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

');

m0=0;n0=0;

LS=0;%允许的状态集合S与个数LS

LD=0;%允许的决策集合D与个数LD

fori=0:

n

forj=0:

m

ifi>=j&n-i>=m-j|i==n|i==0

LS=LS+1;S(LS,:

)=[ij];

end

ifi+j>0&i+j<=h&(i>=j|i==0)

LD=LD+1;D(LD,:

)=[ij];

end

end

end%用搜寻法找出符合条件的渡河方案

N=15;

Q1=inf*ones(2*N,2*N);

Q2=inf*ones(2*N,2*N);

t=1;le=1;

q=[mn];f0=0;%判断循环终止标记

whilef0~=1&t

k=1;sa=[];sb=[];fori0=1:

le%第n次允许的策略集逐次搜索

s0=q(i0,:

);

iff0==1

break

end

fori=1:

LD%由s0搜索D后得到允许的状态

s1=s0+(-1)^t*D(i,:

);

ifs1==[m0,n0]

sa=[m0,n0];

sb=D(i,:

);

f0=1;

break

end

forj=2:

LS-1%搜索对比S后允许状态

ifs1==S(j,:

ifk==1

sa(k,:

)=s1;

sb(k,:

)=D(i,:

);

k=k+1;

break

end

ifk>1%对重复状态删除处理

f1=0;

forii=1:

k-1

ifs1==sa(ii,:

f1=1;

break

end

end

end

iff1==0

sa(k,:

)=s1;

sb(k,:

)=D(i,:

);

k=k+1;

break

end

end

end

end

end

q=sa;

le=size(q,1);

Q1(1:

le,t*2-1:

t*2)=q;

Q2(1:

le,t*2-1:

t*2)=sb;

t=t+1;

end%在可行方案集合中逆向搜寻唯一方案

tr=t-1;

saa1=sa;

SA=zeros(tr,2);

SB=zeros(tr,2);

fork=tr:

-1:

2

k1=k-1;f0=0;

sbb=Q2(:

k*2-1:

k*2);

saa=Q1(:

k1*2-1:

k1*2);

fori=1:

2*N

saa2=saa1-(-1)^k*sbb(i,:

);

forj=1:

2*N

ifsaa2==saa(j,:

saa1=saa2;

sbb1=sbb(i,:

);

f0=1;

break

end

end

iff0==1

break

end

end

SA(k1,:

)=saa1;

SB(k,:

)=sbb1;

end

SA(tr,:

)=[m0n0];

SB(1,:

)=[m,n]-SA(1,:

);%输出

SC=ones(size(SA))*3-SA;nStep=ceil(size(SB,1)/2);

fprintf('\n允许的状态向量:

\n');

disp(S);

fprintf('\n允许的决策向量:

\n');

disp(S);

fprintf('\n过河步骤:

\n');

fori=1:

nStepfprintf('第%i步:

%i商%i仆过河',i,SB(2*i-1,:

));

ifi

));

else

fprintf(',完成\n\n');

end

end

fprintf('过河过程中状态变化:

\n步骤此岸商此岸仆方向彼岸商彼岸仆\n');

fori=1:

nStep

fprintf('%3i%4i%8i==>%4i%8i\n',i,SA(2*i-1,:

),SC(2*i-1,:

));

ifi

fprintf('%4i%8i<==%4i%8i\n',SA(2*i,:

),SC(2*i,:

));

end

end

友情提示:

范文可能无法思考和涵盖全面,供参考!

最好找专业人士起草或审核后使用,感谢您的下载!

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

当前位置:首页 > 职业教育 > 职业技术培训

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

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