回 帖 发 新 帖 刷新版面

主题:[讨论]哪位好心人可以告诉我这个题目MATLAB程序怎么弄???急

题目:三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己滑行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船渡船的大权掌握在商人手中,商人们怎么样才能安全渡河?

求解:
数学模型:记第k次渡河前此岸的商人人数为Xk,随从人数为Yk,k=1,2,3...。将二维向量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}     {1}

记第k次渡船上的商人人数为Uk,随从人数为Vk。将二维向量dk=(Uk,Vk)定义为决策。允许决策集合记做D,由小船的容量可知

D={(u,v)|u+v=1,2}   {2}

因为k为奇数时船从此岸驶向彼岸,k为偶数时船由彼岸驶回此岸,所以状态sk随决策dk变化的规律是:

S(k+1)=Sk+(-1)^k*dk    {3}

{3}式称为状态转移律。所以,制定安全渡河方案归结为如下的多步决策问题:
求决策dk属于D(k=1,2,3,...,n),使状态sk属于S按照转移律{3},由初始状态s1=(3,3)经有限步n到达状态s(n+1)=(0,0)

对于式1、2、3,编制程序,求解商人安全过河的多步决策问题。
[size=5][color=800000][b]
用MATLAB编啊```[/b][/color][/size]

回复列表 (共2个回复)

沙发

从网上搜的这个程序,可以运行不出来....


matlab程序如下: 
function [p,q]=du(p) 
q=[0,0]; 
s2=[0 0]; 
[p,q,s1]=go(p,q,s2) %go子函数 
i=1 
while((p(1)+p(2))~=0) 
[p,q,s2]=back(p,q,s1) %back子函数 
i=i+1 
[p,q,s1]=go(p,q,s2) 
i=i+1 
end 

%go子函数为: 
function [p,q,s1]=go(p,q,s2) 
y1=[0 2;2 0;1 1]; 
for i=1:3 
if(s2==y1(i,1:2)) 
continue 
end 
p=p-y1(i,1:2); 
if(p>=[0 0]) 
if(p(1)==0||p(1)>=p(2)) 
q=q+y1(i,1:2); 
else 
p=p+y1(i,1:2); 
continue 
end 
else 
p=p+y1(i,1:2); 
continue 
end 
if(q(1)==0||q(1)>=q(2)) 
s1=y1(i,1:2); 
return 
else 
q=q-y1(i,1:2); 
p=p+y1(i,1:2); 
continue 
end 
end 

%back子函数为: 
function [p,q,s2]=back(p,q,s1) 
y2=[1 0;0 1;1 1;0 2;2 0]; 
for i=1:5 
if(s1==y2(i,1:2)) 
continue 
end 
q=q-y2(i,1:2); 
if(q>=[0 0]) 
if(q(1)==0||q(1)>=q(2)) 
p=p+y2(i,1:2); 
else 
q=q+y2(i,1:2); 
continue 
end 
else 
q=q+y2(i,1:2); 
continue 
end 
if(p(1)==0||p(1)>=p(2)) 
s2=y2(i,1:2); 
return 
else 
p=p-y2(i,1:2); 
q=q+y2(i,1:2); 
continue 
end 
end

板凳

上面这个程序运行不出来......该怎么弄啊???

我来回复

您尚未登录,请登录后再回复。点此登录或注册