商人们怎样安全过河-(附MATLAB程序完整)培训讲学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
商人们怎样安全过河
建立模型
xk~第k次渡河前此岸的商人数
yk~第k次渡河前此岸的随从数
sk=(xk , yk)~过程的状态
S={(x , y) x=0, y=0,1,2,3; x=3, y=0,1,2,3; x=y=1,2} uk~第k次渡船上的商人数
vk~第k次渡船上的随从数
dk=(uk , vk)~ 决策
多步决策问题求dk
到达sn+仁(0,0).
模型求解
穷举法~ 编程上机
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给出安全渡河方案
xk, yk=0,1,2,3;
k=1,2,|....
S~允许状态集合
uk, vk=0,1,2;
k=1,2,..…
u+v=1,2} ~允许决策集合
~状态转移律
n),使sk S,并按转移律由s仁(3,3)
要求~在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过
河
D={(u , v)
D(k=1,2,
评注和思考
规格化方法 ,易于推广
考虑 4 名商人各带一随从的情况 程序
%%%%%%%%%%%%%%%% 开始 %%%%%%%%%%%%%%%%%%%%%% function jueche=guohe clear all clc
%%%%%%%%%% 程序开始需要知道商人和仆人数; %%%%%%%%%%%%% shangren=input(' 输入商人数目 : '); puren=input(' 输入仆人数目 : ');
rongliang=input(' 输入船的最大容量 : ');
if puren>shangren shangren=input(' 输入商人数目 :'); puren=input(' 输入仆人数目 :'); rongliang=input(' 输入船的最大容量 :');
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 决 策 生成
jc=1; %决策向量放在矩阵 for
i=0:rongliang
for j=0:rongliang
if (i+j<=rongliang)&(i+j>0)
d(jc,1:3)=[i,j ,1];
d(jc+1,1:3)=[-i,-j,-1];
jc=jc+2;
end
end
j=0; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 状态数 组生成
kx=1; % 状态向量放在 A 矩阵中,生成方法同矩阵生成;
for i=shangren:-1:0
for j=puren:-1:0
if ((i>=j)&((shangren-i)>=(puren-j)))|((i==0)|(i==shangren))
% (i>=j)&((shangren-i)>=(puren-j)))|((i==0)|(i==shangren)) 为可以存在的状态的约束条件
A(kx,1:3)=[i,j,1];
%生成状态数组集合 D '
A(kx+1,1:3)=[i,j,0];
kx=kx+2;
end
end 中, jc 为插入新元素的行标初始为 1; % 满足条 D={(u,v)|1<=u+v<=rongliang,u,v=0,1,2} %生成一个决策向量立刻扩充为三维; % 同时生成他的负向量; 由于生成两个决策向量,则 jc