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

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

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

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

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

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

10

20

21

30

31

32

40

41

42

50

51

60

过河步骤:

第1步:

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

第2步:

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

第3步:

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

第4步:

第5步:

3商3仆过河,完成

 

过河过程中状态变化:

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

1116==>

-8-3

117<

==-8-4

266==>

-3-3

77<

==-4-4

344==>

-1-1

55<

==-2-2

422==>

33<

==00

500==>

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

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

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

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

2

4

6

8

10

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,:

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<

N%搜索可行的策略

k=1;

sa=[];

sb=[];

fori0=1:

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

s0=q(i0,:

iff0==1

break

fori=1:

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

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

ifs1==[m0,n0]

sa=[m0,n0];

sb=D(i,:

f0=1;

forj=2:

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

ifs1==S(j,:

ifk==1

sa(k,:

)=s1;

sb(k,:

)=D(i,:

k=k+1;

ifk>

1%对重复状态删除处理

f1=0;

forii=1:

k-1

ifs1==sa(ii,:

f1=1;

iff1==0

end

q=sa;

le=size(q,1);

Q1(1:

le,t*2-1:

t*2)=q;

Q2(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;

sbb=Q2(:

k*2-1:

k*2);

saa=Q1(:

k1*2-1:

k1*2);

2*N

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

forj=1:

ifsaa2==saa(j,:

saa1=saa2;

sbb1=sbb(i,:

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

\n允许的决策向量:

\n过河步骤:

fori=1:

nStepfprintf('

第%i步:

%i商%i仆过河'

i,SB(2*i-1,:

));

ifi<

,%i商%i仆返回\n'

SB(2*i,:

else

,完成\n\n'

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

nStep

%3i%4i%8i==>

%4i%8i\n'

i,SA(2*i-1,:

),SC(2*i-1,:

%4i%8i<

==%4i%8i\n'

SA(2*i,:

),SC(2*i,:

友情提示:

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

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

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

当前位置:首页 > 农林牧渔 > 农学

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

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