商人们怎样安全过河 (附MATLAB程序完整)

绝世美人儿
839次浏览
2021年02月23日 09:19
最佳经验
本文由作者推荐

-

2021年2月23日发(作者:世纪英文)

















商人们怎样安全过河









随从们密约


,


在河的任一岸


,


一旦随从








人< /p>



,







.





























< br>.














商人们怎样才能安全过河


?




















问题分析:


多步决策过程



决策


~


每一步


(


此岸到彼岸或彼岸到此岸


)


船上< /p>


的人员



要求


~


在安全的前提下


(


两岸的随从数不比商 人多


),


经有限步使全体人员过河


.


建立模型



xk~


k


次渡河前此岸的商人数






























xk, yk=0,1,2,3;


yk~



k


次渡河前此岸的随从数




































k=1,2,|....






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}


uk~



k


次渡船上的商人数


































uk, vk=0,1,2;


vk~



k


次渡船上的随从数

































k=1,2,.....






dk=(uk , vk)~


决策

























D={(u , v)




u+v=1, 2} ~


允许决策集合
























~


状态转移律




多步决策问题










dk< /p>



D(k=1,2,



n),


使


sk



S,


并按转移律由



s1=(3,3)


到达



sn+1=(0,0).



模型求解







~




程< /p>























S={(x , y)




x=0, y=0,1,2,3;x=3, y=0,1,2,3; x=y=1,2}



图解法



状态


s=(x,y) ~ 16


个格点允许状态


~ 10







允许决策



~


移动


1



2



; k



,


左下移


; k



,


右上移


.

d1,.......



d11


给 出安全渡河方案






评注和思考



规格化方法


,


易于推广


< p>
考虑


4


名商人各带一随从的情况

< br>


程序



%%%%%%%%%%%%%%%%


开始



%%%%%%%%%%%%%%%%%%%%%%


function jueche=guohe


clear all


clc




%%%%%%%%%%


程序开始需要知道商人和仆人数;


%%%%%%%%%%%%%






shangren=input('


输入商人数目


: ');


puren=input('


输入仆人数目


: ');


ronglian g=input('


输入船的最大容量


: ');




if puren>shangren


shangren=input('

< br>输入商人数目


:');


puren=input('< /p>


输入仆人数目


:');


ronglia ng=input('


输入船的最大容量


:');





end



%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%






生成






jc=1;





%


决策向量放在矩阵


d


中,


jc


为插入新元素的行 标初始为


1





for i=0:rongliang

































for j=0:rongliang






























if (i+j<=rongliang)&(i+j>0)





% < /p>


满足条


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













d(jc,1:3)=[i,j ,1];









%


生成一个决策向量立刻扩充为三维;













d(jc+1,1:3)=[-i,-j,-1];







%



同时生成他的负向量;
















jc=jc+2;










%


< /p>


由于生成两个决策向量,则


jc


要向下移 动两个;



















end








end











j=0;












































end




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%






状态数


组生成






kx=1;















% < /p>


状态向量放在


A


矩阵中,生成方法同矩阵 生成;



for



i=shangren:-1:0










for j=puren:-1:0













if



((i>=j)&((sha ngren-i)>=(puren-j)))|((i==0)|(i==shangren))




















%


(i >=j)&((shangren-i)>=(puren-j)))|((i==0)|(i==shangr en))


为可以存在的状态的约束条件
















A(kx,1:3)=[i,j,1];



























%


生成状态数组集合


D `














A(kx+1,1:3)=[i,j,0];

























kx=kx+2;










end






end

-


-


-


-


-


-


-


-