商人们怎样安全过河-(附MATLAB程序完整)培训讲学

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档