商人安全过河问题a
去2随从
(3商人1随从)
回1随从
(3商人2随从)
去2随从
(3商人)
回1随从
(3商人1随从)
去2商人
(1商人1随从)
回1商人1随从
(2 商 人 2随 从 )
去2商人
(2随从)
回1随从
(3随从)
去2随从
(1随从)
if(ML,CL,BL=1) then (ML-1,CL,BL-1) ——P10操作 if(ML,CL,BL=1) then (ML,CL-1,BL-1) ——P01操作 if(ML,CL,BL=1) then (ML-1,CL-1,BL-1)——P11操作 if(ML,CL,BL=1) then (ML-2,CL,BL-1) ——P20操作 if(ML,CL,BL=1) then (ML,CL-2,BL-1) ——P02操作 if(ML,CL,BL=0) then (ML+1,CL,BL+1) ——q10操作 if(ML,CL,BL=0) then (ML,CL+1,BL+1) ——q01操作 if(ML,CL,BL=0) then (ML+1,CL+1,BL+1)—q11操作 if(ML,CL,BL=0) then (ML+2,CL,BL+1) ——q20操作 if(ML,CL,BL=0) then (ML,CL+2,BL+1) ——q02操作
3. 这种适当设置状态和决策,并确定状态转移规律是有效地
解决很广泛的一类问题的建模方法。
4. 不易找到所有的解。
可以得出经过11步的渡河就能达到安全渡河的目标及满
足渡河次数尽量少的条件。这11步的渡河方案就是上面程序 运行结果中船上下面的那一列。渡河的整个过程如下所示:
(3商人3随从)
(3,3,1)
(0,0,0)
状态空间的总状态数为4×4×2=32,根据约束条件的 要求,可以看出只有20个合法状态。再进一步分析后,
又发现有4个合法状态是不可能达到的。因此实际的状态空间
仅由16个状态构成。下表列出分析结果:
(0,0,1)达不到 (0,1,1)
(0,2,1)
(0,3,1)
(1,0,1)不合法 (1,1,1)
从状态空间图看出解序列相当之多,但最短解序列只有4个, 均由11次操作构成。若给定其中任意两个状态分别作为初始状态 和目标状态,就可以立即找出对应的解序列来。在一般情况下, 求解过程就是对状态空间搜索出一条解路径的过程!
3、状态空间图求解
(3,3,1)
(2,2,0) (3,2,0) (3,1,0)
(3,2,1)
(3,3,1)
(3,0,0) (3,1,1) (1,1,0) (2,2,1) (0,2,0) (0,3,1) (0,1,0) (0,1,1) (0,0,0)
(3,3,1)
4、结果分析
状态空间图是一个有向图,其节点可表示问题的各种状态,节 点之间的弧线代表一些操作,它们可把一种状态导向另一种状态。 这样建立起来的状态空间图描述了问题所有可能出现的状态及状 态和操作之间的关系,因而可以较直观地看出问题的解路径及其 性质。实际上只有问题空间规模较小的问题才可能作出状态空间 图。
(2,1,0)不合法 (2,2,0)
(2,3,0)不合法
(3,0,0)
(3,1,0)
(3,2,0)
(3,3,0)达不到
2、规则集合:由摆渡操作组成。该问题主要有两种操作:pmc操 作(规定为从左岸划向右岸)和qmc操作(从右岸划向左岸)。 每次摆渡操作,船上人数有五种组合,因而组成有10条规则的 集合。
回1随从
(2随从)
去2随从
(渡河成功)
设N和K分别表示商人数目和随从数目,如下图所示, 图中L和R表示左岸和右岸,
LR
M3 0 C 30 B 10
LR
M3 0 C 30 B 10
1
有船
B= 0
无船
ST.
M≥C
M+C≤2
1、三维向量表示,即
(ML,CL,BL),其中 0≤ML,CL≤3 ,BL∈{0,1} 此时问题描述简化为
二、实验目的
1、使学生进一步巩固和理解向量的定义、运算规则、多 步决策理论、状态空间图及其应用。
2、增强编程知识和数学软件的应用。
三、预备知识
1、向量定义及运算,多步决策理论,状态空间图。 2、熟悉Mathematica、 Matlab等数学工具。
四、实验内容与要求
建立起商人安全渡河的数学模型,并给出商 人们如何安全渡河的一个或多个方案,使得渡河 的次数尽量少。
五、思考问题
在上述的约束条件下,若商人有4名时,问商 人们是否能实现安全渡河?更一般地,若商人数 是m,小船最多 只能坐n(1〈n〈m〉人,m和n有 何关系时,商人们才能实现安全渡河?
1、多步决策 2、状态空间
解题思路
一、问题分析与建立模型
由于这个问题已经理想化了,所以不必再作假设。这个问 题可以看作一个多步决策的过程。设第k次渡河前此岸的商人 数为XK,随从数为YK,k=1,2,…。XK,YK=0,1,2,3。将二维向 量SK=( XK,YK)定义为状态。安全渡河条件下的状态集合称为允 许状态集合,=0,1,2,3;x=y=1,2}
(1)
又设第k次渡船上的商人数为UK,随从数为VK,将二 维向量DK=(UK,VK)定义为决策,则允许决策集合为:
D={(u,v)|u+v=1,2}
(2)
因为k为奇数时船从此岸驶向彼岸,k为偶数时船由彼 岸驶回此岸,所以状态SK随着决策DK变化的规律即状态转 移规律是:
a[1]={0,0};a[2]={0,1};a[3]={0,2};a[4]={0,3};a[5]={3,0};
a[6]={3,1};a[7]={3,2};a[8]={3,3};a[9]={1,1};a[10]={2,2}; (* 以 上 两 行 表 示 给 出 十 个 允 许 的 状 态 . 而
{1,0},{1,2},{1,3},{2,0},{2,1},{2,3}六种状态是不可能出现的。*) d[1]={0,2};d[2]={2,0};d[3]={1,1};d[4]={0,1}; d[5]={1,0}; (*此行表示给出五个允许的状态,而{0,0},{1,2},{2,1},{2,2}是 不可能出现的*)
SK+1=SK+(—1)KDK
(3)
这样,制定安全渡河方案归结为如下的多步决策问题:
求决策DK∈D(k=1,2,…,n),使SK∈S按照转移 律(3),由初始状态S1=(3,3)经有限步(设为n)到达 状态Sn+1=(0,0)。
二、计算过程
下面通过Mathematica的程序给出这个多步决策问题的一个解, 同时满足了渡河次数尽量少的条件。
程序运算结果如下: 此岸 ———— 船上 ———— 对岸 {3,3} ———— {0,2} ———— {0,2} {3,1} ———— {0,1} ———— {0,1} {3,2} ———— {0,2} ———— {0,3} {3,0} ———— {0,1} ———— {0,2} {3,1} ———— {2,0} ———— {2,2} {1,1} ———— {1,1} ———— {1,1} {2,2} ———— {2,0} ———— {3,1} {0,2} ———— {0,1} ———— {3,0} {0,3} ———— {0,2} ———— {3,2} {0,1} ———— {0,1} ———— {3,1} {0,2} ———— {0,2} ———— {3,3}
l=Mod[i+1,2];m=l;u=0;
if[i+1>=3,
DO[If[s[i+1]==s[m],u=1,Break[]],{m,l,i-1,2}] ];
if[u==0,c[i+1]=d[j];Break[]] (*以上五行是保证状态不重复以满足渡河的次数尽
量少*)
,{j,1,5}]; If[t==0,Print[No Result];Break[]]; b[i+1]={3,3}—s[i+1]; Print[s[i],”————”,c[i+1],”————”,b[i+1]]; If[s[i+1]=={0,0},Break[]] ,{i,1,12}]
(1,2,1)不合法 (1,3,1)不合法 (2,0,1)不合法
(2,1,1)不合法 (2,2,1)
(2,3,1)不合法
(3,0,1)达不到 (3,1,1)
(3,2,1)
(3,3,1)
(0,0,0)
(0,1,0)
(0,2,0)
(0,3,0)达不到 (1,0,0)不合法 (1,1,0)
(1,2,0)不合法 (1,3,0)不合法 (2,0,0)不合法
三、结果分析
1 上述程序中五个允许的决策或十个允许的状态顺序进行整
时,可以得到不同的结果。例如把d[1]={0,2},d[3]={1, 1}调整成d[1]={1,1},d[3]={0,2}就会得到安全渡河的另 一个方案。需要注意的是进行调整时也可能得不到安全渡 河的方案。
2. 该模型求解方法有多种,例如可以利用动态规划的方法来 求解,也可以利用图解的方法来求解。
i=1;j=1;k=1;s[0]=s[1]={3,3};Print[“此岸————船 上————对岸”]; DO[
DO[s[i+1]=s[i]+(-1)^id[j];
t=0;
DO[if[s[i+1]==a[k];t=1]{k,1,10}];
if[t==0,Continue[]]; (*以上三行是保证状态属于允许的状态*)
实验1 怎样安全过河问题