商人过河问题matlab程序

合集下载

商人过河模型

商人过河模型

商人过河模型商人过河摘要本文针对商人安全渡河的问题,采用多步决策的过程建立数学模型,求解得到了在随从没有杀人越货的情况下的渡河方案。

对于本题而言,在3名商人、3名随从、船的最大容量为2的情况下,首先定义了渡河前此岸的状态,并设安全渡河条件下的状态集定义为允许状态集合,接着得到渡河方案的允许决策集合,然后得到状态随渡河方案变化的规律,最后利用平面坐标分析法,并利用计算机进行了仿真,得到了一种商人安全渡河的方案。

但是,本文不仅仅是为了拼凑出一个可行方案,而是希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。

基于此目的,利用图解法和算法,得到最短路径的最优解。

但同时由于该算法遍历计算的节点很多,所以效率低,而且当有多个最短距离时,不能够将所有符合条件的情况逐一列出。

最后,从这类问题解得趣味性、合理性进行了深入讨论,得到了“传教士与野蛮人渡河”,“印度夫妻渡河”等问题通用的模型,并将其进行了推广。

这也是本文的一大特色。

关键词渡河问题状态集合决策集合平面坐标图解法算法一、问题提出问题: 三名商人各带一个随从过河,一只小船只能容纳两个人,随从们约定,只要在河的任何一岸,一旦随从人数多于商人人数就杀人越货,但是商人们知道了他们的约定,并且如何过河的大权掌握在商人们手中,商人们该采取怎样的策略才能安全过河呢?二、问题分析这个问题已经理想化了,所以我们无需对模型进行假设,该问题可以看作一个多步决策问题。

每一步,船由此岸划到彼岸或者由彼岸划回此岸,都要对船上的人员进行决策(此次渡河船上可以有几名商人和几名随从),在保证安全(两岸的随从都不比商人多)的前提下,在有限次的决策中使得所有人都到对岸去。

因此,我们要做的就是要确定每一步的决策,达到渡河的目标。

三、模型假设与建立记第次过河前此岸的商人数为k x , 随从数为k y ,1,2,,k m =,,0,1,2,3k k x y =定义状态:将二维向量(,)k k k S x y =定义为状态,将安全渡河状态下的状态集合定义为允许状态集合, 记为{},y |0,3; y 0, 1, 2, 31;y 0, 12;y 0, 1,2S x x x x =======()或或记第 次渡河船上的商人数为 k u ,随从数为k v .定义决策:将二维向量(,)k k k d u v = 定义为决策;允许决策集合 记作:{}(,)|+1,2D u v u v ==因为小船容量为2,所以船上人员不能超过2,而且至少要有一个人划船,由此得到上式。

商人过河问题数学建模

商人过河问题数学建模

作业1、2:商人过河一、问题重述问题一:4个商人带着4个随从过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人。

随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。

乘船渡河的方案由商人决定。

商人们怎样才能安全过河?问题二:假如小船可以容3人,请问最多可以有几名商人各带一名随从安全过河。

二、问题分析问题可以看做一个多步决策过程。

每一步由此岸到彼岸或彼岸到此岸船上的人员在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。

用状态变量表示某一岸的人员状况,决策变量表示船上的人员情况,可以找出状态随决策变化的规律。

问题就转换为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。

三.问题假设1. 过河途中不会出现不可抗力的自然因素。

2. 当随从人数大于商人数时,随从们不会改变杀人的计划。

3.船的质量很好,在多次满载的情况下也能正常运作。

4. 随从会听从商人的调度。

四、模型构成x(k)~第k次渡河前此岸的商人数 x(k),y(k)=0,1,2,3,4;y(k)~第k次渡河前此岸的随从数 k=1,2,…..s(k)=[ x(k), y(k)]~过程的状态 S~允许状态集合S={(x,y)|x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3}u(k)~第k次渡船上的商人数 u(k), v(k)=0,1,2;v(k)~ 第k 次渡船上的随从数 k=1,2…..d(k)=( u(k), v(k))~过程的决策 D~允许决策集合D={u,v|u+v=1,2,u,v=0,1,2}状态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~状态转移律求d(k) ÎD(k=1,2,….n),使s(k) ÎS 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)数学模型:k+1k S =S +kk D (-1) (1)'4k k x x += (2)'4k k y y += (3)k.k x y ≥ (4)''k k x y ≥ (5)模型分析:由(2)(3)(5)可得44k k x y -≥-化简得k k x y ≤综合(4)可得kk x y = 和 {}(,)|0,0,1,2,3,4k k k k k S x y x y === (6) 还要考虑{}'(',')|'0,'0,1,2,3,4k k k k k S x y x y === (7) 把(2)(3)带入(7)可得{}(4,4)|40,40,1,2,3,4k k k k k S x y x y =---=-=化简得{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 综合(6)(7)(8)式可得满足条件的情况满足下式{}(,)|0,4,0,1,2,3,4;kk k k k k k S x y x y x y ==== (9)所以我们知道满足条件的点如上图所示:点移动由 {}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)到达{}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)时,可以认为完成渡河。

动态规划第7讲 - 商人过河问题

动态规划第7讲 - 商人过河问题

8.7 动态规划:商人过河问题问题提出三名商人各带一个随从乘船渡河(A岸到B岸)。

现此岸有一小船只能容纳两人,由他们自己划行。

若在河的任一岸随从人数比商人多,他们就可能杀人越货。

不过如何乘船渡河的大权由商人们掌握。

商人们怎样才能安全过河呢?模型建立此问题可视为一个多步决策模型建立决策变量:(a,b)a------船上的商人数b ------船上的随从数a,b的取值范围:{0,1,2}且满足a+b<=2,且均为整数。

允许决策集合:D={(a,b)|a+b=1,2}={(0,1), (0,2), (1,1), (1,0), (2,0)}模型求解这样问题要求由(3,3,1)变到(0,0,0)的一条道路。

根据题意,状态转移时要满足一定的规则:1. Z从1变为0与从0变为1交替进行(船在哪个岸);2. 当Z从1变为0时,即船从A岸到B岸,A岸人数减少1或2个;即(x,y,1)→(u,v,0)时, u≤x, v≤y, u+v=x+y-1 oru+v=x+y-23. 当Z从0变为1时,即船从B岸到A岸,A岸人数增加1或2个;即(x,y,0)→(u,v,1)时, u≥x, v≥y,u+v=x+y+1 oru+v=x+y+24. 不重复已出现过的状态,如(3,3,1)→(3,1,0)→(3,3,1);按照以上规则,求解过程如下从(3,2,0)只能到达(3,3,1)/*不必考虑*/从(3,3,1)出发(3,2,0)(3,1,0)如右图(2,2,0)(3,3,1)(3,2,0)(3,1,0)(2,2,0)从(3,1,0)出发(3,3,1) /*不必考虑*/(3,2,1)/*可取*/从(2,2,0)出发(3,3,1) /*不必考虑*/(3,2,1)/*可取*/模型求解如下图所示:逐步求解,可得:模型求解由此可得到渡河策略:(3,3,1) (3,2,1)→(3,0,0)→(3,1,1)→(1,1,0)→(2,2,1)→(0,2,0)→(0,3,1)→(0,1,0) (0,0,0)(2,2,0)(3,1,0)(1,1,1)(0,2,1)模型求解思考(1) 夫妻过河问题有三对夫妻要过河,船最多可载两人。

C语言培训第26章商人过河游戏

C语言培训第26章商人过河游戏

26.2 问题分析及实现
➢ 26.2.1 问题分析 ➢ 26.2.2 问题实现 ➢ 26.2.3 程序运行
26.2 问题分析及实现
➢ 对于此问题,首先想到的前面提到的要 领:看清、想明、把握每一个细节。由 问题描述可知,我们要实现的是打印安 全过河的方案,即不触发杀人越货并能 安全过河的方案。
26.2.1 问题分析
➢ 我们的将要开发的程序,就是从所有过河方 案中,排除错误的方案,留下正确可行的方 案。
26.2.2 问题实现
➢ 本小节就来通过编程来实现商人过河的游戏。 ➢ 1. 采用结构体保存过程数据 ➢ 通过定义一个结构体类型,模拟商人过河时,
所有可能的方案及此方案的状态,即需要记 录当前河东(原点)有几位商人、几位仆人, 当前河西(目的地)有几位商人、几位仆人。 实现代码见随书光盘中的代码26-1.txt。
26.2.2 问题实现
➢ 2. 求解问题的主要实现函数 ➢ 由于渡河过程有两种情况:向东渡河,向西
返回,因此,与仆人个数是否合法。代 码如下(代码26-1.txt)。
26.2.2 问题实现
➢ 3. 求解问题的判断函数 ➢ 如果合法则继续递归查找剩下的商人和仆人
商人过河游戏
➢ C语言的功能是强大而又灵活的。特别是在 算法与数据结构上,其灵活性、高效性更加 明显。本章研究对商人过河问题的求解。
26.1 问题描述
➢ 三名商人各带一个随从乘船渡河,一只小 船只能容纳二人,由他们自己划行。随从 们密约,在河的任一岸,一旦随从的人数 比商人多,就杀人越货。但是如何乘船渡 河的大权掌握在商人们手中。商人们怎样 才能安全渡河呢?
过河的方案,否则为不合法的方案,则应该 将此方案放弃。放弃后,程序返回上一级, 继续递归判断其他情况是否合法,直到全部 情况递归完毕。代码如下(代码26-2.txt)

商人过河问题数学建模

商人过河问题数学建模

作业1、2:之相礼和热创作贩子过河一、成绩重述成绩一:4个贩子带着4个随从过河,过河的工具只要一艘小船,只能同时载两个人过河,包含划船的人.随从们密约, 在河的任一岸, 一旦随从的人数比贩子多, 就舍己为人.乘船渡河的方案由贩子决定.贩子们怎样才能安全过河?成绩二:假如小船可以容3人,叨教最多可以有几名贩子各带一名随从安全过河.二、成绩分析成绩可以看做一个多步决策过程.每一步由此岸到此岸或此岸到此岸船上的人员在安全的前提下(两岸的随从数不比贩子多),经无限步使全体人员过河.用形态变量暗示某一岸的人员状况,决策变量暗示船上的人员状况,可以找出形态随决策变更的规律.成绩就转换为在形态的容许变更范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目的.三.成绩假设1. 过河途中不会出现不成抗力的自然要素.2. 当随从人数大于贩子数时,随从们不会改变杀人的计划. 3.船的质量很好,在多次满载的状况下也能正常运作.4. 随从会遵从贩子的调度.四、模型构成x(k)~第k 次渡河前此岸的贩子数 x(k),y(k)=0,1,2,3,4; y(k)~第k 次渡河前此岸的随从数 k=1,2,…..s(k)=[ x(k), y(k)]~过程的形态 S~容许形态集合S={(x,y)|x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3}u(k)~第k 次渡船上的贩子数 u(k), v(k)=0,1,2;v(k)~ 第k 次渡船上的随从数 k=1,2…..d(k)=( u(k), v(k))~过程的决策 D~容许决策集合D={u,v|u+v=1,2,u,v=0,1,2}形态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~形态转移律求d(k)ÎD(k=1,2,….n),使s(k)ÎS 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)数学模型: k+1kS =S +k k D (-1)(1) '4k k x x += (2)'4k k y y +=(3)k.k x y ≥ (4)''k k x y ≥(5)模型分析:由(2)(3)(5)可得化简得综合(4)可得k k x y =和 {}(,)|0,0,1,2,3,4k k k k k S x y x y ===(6)还要考虑{}'(',')|'0,'0,1,2,3,4k k k k k S x y x y === (7)把(2)(3)带入(7)可得化简得 {}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)综合(6)(7)(8)式可得满足条件的状况满足下式 {}(,)|0,4,0,1,2,3,4;k k k k k k k S x y x y x y ====(9)以是我们晓得满足条件的点如上图所示:点挪动由 {}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)到达 {}(,)|0,0,1,2,3,4k k k k k S x y x y ===(6)时,可以以为完成渡河. 由于挪动的格数小于等于2,只要中心点(2,2)到(6)点和(8)点的距离为2,以是中心点(2,2)成为渡河的关键点.当我们挪动到(2,2)点时,就无法进行下往.故4个贩子,4个随从,船容量为2人时,无法安全渡河. 对于成绩二,我们可以建立模型为:k+1k S =S +k k D (-1)(10)'k k x x M += (11)'k k y y M += (12)k.k x y ≥(13)''k k x y ≥ (14)u(k), v(k)=0,1,2,3; (15)经过类似于成绩一的步调可以晓得:坐标上的关键点是(3,3),最多可以五名贩子带五名随从过往.必要确定五名贩子带五名随从的方案可行再确定六名贩子带六名随从的方案不成行1、五名贩子带五名随从的状况:(1)首先不成能有三名贩子先过河,两名贩子一名随从过河,一名贩子两名随从过河(2)三个随从先过河(5,2),回来一个随从(5,3),过往两个随从(5,1)回来一个随从(5,2),再过往三个贩子(2,2),回来一个贩子一个随从(3,3),再过往三个贩子(0,3),回来一个随从(0,4),过往三个随从(0,1),回来一个随从(0,2)再过往两个随从(0,0)综上可知:五名贩子带五名随从,小船可以载三个人可以过河2、六名贩子带六名随从的状况:(1)首先不成能有三名贩子先过河,两名贩子一名随从过河,一名贩子两名随从过河(2)三个随从先过河(6,3),回来一个随从(6,4),过往两个随从(6,2)回来一个随从(6,3),过往三个贩子(3,3),此时两岸都是(3,3),由坐标法分析知,这是最接近尽头的临界点,但是假如回来的时分肯定是回来一个贩子和一个随从,假如这一步可行,后面就进行不往综上所述,六个贩子带六个随从,小船载三个人的状况下不克不及渡河结合1、2知,当小船最多载三个人的时分,最多五名贩子各带一个随从可以过河.五、模型的检验与评价由多数人的过河成绩推行到了更多数人的过河成绩,使得成绩变得明了有规律.六、参考文献[1]章胤,2014年燕山大学天下大门生数学建模竞赛培训ppt,2014年4月17日。

3对夫妻过河的Matlab程序

3对夫妻过河的Matlab程序

function kexing = f_kexing(a)% ycu sunkanry% 判断一个状态a是否可行状态% 可行状态为(0,i),(i,i),(3,i);0<=i<=3if (a(1) == a(2) && a(1) >= 0 && a(1) <= 3)%可行状态为(i,i), kexing = 1;elseif (a(1) == 0 ) && a(2) >= 0 && a(2) <= 3%可行状态为(0,i) kexing = 1;elseif((a(1) == 3) && a(2) >= 0 && a(2) <= 3)%可行状态为(3,i) kexing = 1;elsekexing = 0;endendendfunction jie = guohe()kaishi = [3,3];%开始状态jieshu = [0,0];%结束状态jie = -ones(2,50) ;jie(:,1) = kaishi;jie(:,2) = [3,1];%第一次移动两个人过去%过去时人尽量多,去多qu = [0 2 1 0 1;2 0 1 1 0];%回来时人尽量少hui = [0 1 0 2 1;1 02 0 1];yd_cishu = 2;%移动次数index = zeros(1,50);%指示第yd_cishu次移动是采用的是那种方式index(1) = 1;index(2) = 1;%注意矩阵是否相等的判断while(jie(1,yd_cishu) ~= jieshu(1) || jie(2,yd_cishu) ~= jieshu(2) ) if( mod(yd_cishu,2) ~= 0 )%奇数次移动while(index(yd_cishu)<=5 )switch(index(yd_cishu))case {1}%左移一位jixu = jie(:,yd_cishu) - qu(:,1);case {2}%左移两位jixu= jie(:,yd_cishu) - qu(:,2);case {3}%向下移一位jixu = jie(:,yd_cishu) - qu(:,3)';case {4}%向下移两位jixu = jie(:,yd_cishu) - qu(:,4)';case {5}%左下移一位jixu = jie(:,yd_cishu) - qu(:,5)';endif(f_kexing(jixu))%当移动状态可行,则保存移动情况yd_cishu = yd_cishu + 1;%继续移动jie(:,yd_cishu) = jixu;index(yd_cishu) = index(yd_cishu) + 1;index(yd_cishu) = 1;%下一次移动选择从新开始break;elseindex(yd_cishu) = index(yd_cishu) + 1;endendif(index(yd_cishu)>5)yd_cishu = yd_cishu - 1;%回退endelse%偶数次移动while(index(yd_cishu)<=5 )switch(index(yd_cishu))case {1}%向上移两位jixu = jie(:,yd_cishu) + hui(:,1);case {2}%向上移一位jixu = jie(:,yd_cishu) + hui(:,2);case {3}%右移两位jixu = jie(:,yd_cishu) + hui(:,3);case {4}%右移一位jixu = jie(:,yd_cishu) + hui(:,4);case {5}%右上移一位jixu = jie(:,yd_cishu) + hui(:,5);end%当移动状态可行,则保存移动情况且回来船上的人员状态不能和上一次的情况完全一样,否则就重复操作无意义了。

案例-商人过河

s 3 = ( 3 , 2 ) 故 s 2 = {( 2 , 2 ), ( 3 , 1 )} 且 s 3 = ( 3 , 2 )
穷举法适宜编程上机运算
问题分析
这是一类智力游戏问题, 这是一类智力游戏问题,可经过一番逻辑 推理求解。当然也可视为一个多步决策问题 多步决策问题, 推理求解。当然也可视为一个多步决策问题, 每一步(此岸到彼岸或彼岸到此岸) 每一步(此岸到彼岸或彼岸到此岸)都要对船 上的人员作出决策,在保证安全的前提下( 上的人员作出决策,在保证安全的前提下(两 岸的随从数不比商人多) 岸的随从数不比商人多)经有限步使全体人员 过河
S = {( 0 , 0 ), ( 0 , 1 ), ( 0 , 2 ), ( 0 , 3 ), ( 1 , 1 ), ( 2 , 2 ) ( 3 , 0 ), ( 3 , 1 ), ( 3 , 2 ), ( 3 , 3 )}
记 第k次渡船上的商人数为 uk ,随从数 为过程中的决策。 为 vk ,而 d k = ( uk , vk ) 为过程中的决策。
sk +1 = sk + ( −1)k d k
多步决策问题模型: 多步决策问题模型: 转移律由 求 d k ∈ D 使 s k ∈ S 并按转移律由 s1 = ( 3, 3) 到达 sn+1 = (0,0)
模型求解
• 图解法
y 3 2
16个格点 状态s=(x,y)为16个格点 允许状态为10个点 允许状态为10个点 10 允许决策为移动1 允许决策为移动1或2格; k为奇数时,向左、下移; 奇数时,向左、下移; k为偶数时,向右、上移. 偶数时,向右、上移.
安全渡河条件下的决策称为允许决策, 安全渡河条件下的决策称为允许决策,全 允许决策 体允许决策构成的集合记为 D

商人过河

商人们怎样安全过河摘要:四名商人各带一名随从乘船渡河,一只小船至多容纳两人,由他们自己制定,随从约定,在河的任一岸,一旦随从的人数比商人多,就杀了越货。

但是如何乘船渡河的大权掌握在商人们手中,另外,当船的的容量增大为3,最多可以有几对商人安全过河。

商人们怎么才安全渡河,那将再此文中分析过河问题。

模型主要通图表法对过河的方案进行举例,然后根据小船的容量和商人们要安全过河为前提对各种方案进行层层筛选,最终得到商人安全过河方案。

关键词:多步决策图解法商人过河一、问题重述四名商人各带一名随从乘船渡河,一只小船至多容纳俩人,由他们自己划行,随从约,在河的任一岸,一旦随从的人数比商人多,就杀了越货。

另外,当船的的容量增大为3最多可以有几对商人安全过河但是如何乘船渡河的大权掌握在商人们手中。

现在需要解决的问题如下:1.四名商人在不被随从谋杀和小船最多能为2人的情况下,商人们将如何安全过河?2.如果有m名商人m名随从,小船的容量为3时,最多可以有多少商人各带一名随从过河。

二、模型的假设1.假设过河的过程中不会发生以外事故。

2.假设当随从人数多国商人时,不会改变杀人越货计划。

3.假设所有人最终都必须到达河对岸。

三、符号说明=0,1,2,3,4…;x k~第k次渡河前此岸的商人数x k,yk~第k次渡河前此岸的随从数k=1,2,…,) ~过程的状态S ~ 允许状态集合xS={(x , y)x=0, y=0,1,2,3,..; x=m, y=0,1,2,3,..; x=y=1,2,3..}=0, 1, 2..;~第k次渡船上的商人数~第k次渡船上的随从数k=1,2,…=( , ) ~过程的决策 D ~允许决策集合D={(u , v)u+v=1, 2, ….,u, v=0, 1, 2,…}状态因决策而改变~状态转移律四、模型分析针对商人们能否安全过河问题,需要选择一种合理的过河方案,对该问题可将看为一个多步决策模型,通过对每一次过河的方案的筛选优化,最终得到商人们全部安全过河。

商人过河问题

最后本文就此问题进行推广,当有m名商人m名随从 且小船的容量为k时,将会得到几种解决方案给出了说明。 关键词:穷举法 多步决策 图解法 商人过河 状态空间
问题的提出
三名商人各带一个随从乘船渡河。现此岸 有一小船只能容纳两人,由他们自己划行 。若在河的任一岸随从人数比商人多,他 们就可能抢劫财物。不过如何乘船渡河的 大权由商人们掌握。商人们怎样才能安全 过河呢?
模型的求解
y
3
d8 2 d9
商仆
商仆
d1
商仆
d10
d7
d6
d2
1 d11
d3 d5 d4
O
1
2
3x
模型的要求从(3,3,1)开始经过对每次过河的安全 状态量的选择最终安全到达(0,0,0)。
根据题意状态转移必须满足以下规则; (1)Z从1变0或0变1交替进行。 (2)Z从1变为0即从河的此岸到彼岸,此案的人数减少1或2;即(m,n,1)
示为
当m=0或3, n={0,1,2,3},
当m=1或2,m=n
或用三维向量表示允许状态量如下表格1:
(3,3,1) (3,2,1) (3,1,1) (2,2,1) (0,3,1) (0,2,1) (1,1,1) (0,1,1)
(3,2,0) (3,1,0) (2,2,0) (0,3,0) (0,2,0) (1,1,0) (0,1,0) (0,0,0)
(3,2,1)/*可取*/
(3,3,1) /*不必考虑*/
从(2,2,0)出发
(3,2,1)/*可取*/
最终我们得到商人们安全渡河的方案有四种如下 第一种方案
(3,3,1)(2,2,0)(3,2,1)(3,0,0)(3,1,1)(1,1,0)

商人过河问题数学建模

功课1.2:商人过河一、问题重述问题一:4个商人带着4个侍从过河,过河的对象只有一艘划子,只能同时载两小我过河,包含荡舟的人.侍从们密约, 在河的任一岸, 一旦侍从的人数比商人多, 就杀人越货.乘船渡河的筹划由商人决议.商人们如何才干安然过河?问题二:假如划子可以容3人,请问最多可以有几名商人各带一名侍从安然过河.二.问题剖析问题可以看做一个多步决议计划进程.每一步由此岸到此岸或此岸到此岸船上的人员在安然的前提下(两岸的侍从数不比商人多),经有限步使全部人员过河.用状况变量暗示某一岸的人员状况,决议计划变量暗示船上的人员情形,可以找出状况随决议计划变更的纪律.问题就转换为在状况的许可变更规模内(即安然渡河前提),肯定每一步的决议计划,达到安然渡河的目的.三.问题假设1. 过河途中不会消失不成抗力的天然身分.2. 当侍从人数大于商人数时,侍从们不会转变杀人的筹划.3.船的质量很好,在多次满载的情形下也能正常运作.4. 侍从会服从商人的调剂.四.模子组成x(k)~第k 次渡河前此岸的商人数 x(k),y(k)=0,1,2,3,4; y(k)~第k 次渡河前此岸的侍从数 k=1,2,…..s(k)=[ x(k), y(k)]~进程的状况 S~许可状况聚集 S={(x,y)|x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3} u(k)~第k 次渡船上的商人数 u(k), v(k)=0,1,2; v(k)~ 第k 次渡船上的侍从数 k=1,2…..d(k)=( u(k), v(k))~进程的决议计划 D~许可决议计划聚集D={u,v|u+v=1,2,u,v=0,1,2}状况因决议计划而转变s(k+1)=s(k)+(-1)^k*d(k)~状况转移律 求d(k)ÎD(k=1,2,….n),使s(k)ÎS 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0)数学模子: k+1k S =S +k k D (-1)(1)'4k k x x += (2)'4k k y y +=(3)k.k x y ≥ (4)''k k x y ≥(5)模子剖析:由(2)(3)(5)可得化简得分解(4)可得k k x y =和 {}(,)|0,0,1,2,3,4k k k k k S x y x y ===(6)还要斟酌{}'(',')|'0,'0,1,2,3,4k k k k k S x y x y === (7)把(2)(3)带入(7)可得化简得{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)分解(6)(7)(8)式可得知足前提的情形知足下式{}(,)|0,4,0,1,2,3,4;k k k k k k k S x y x y x y ====(9) 所以我们知道知足前提的点如上图所示:点移动由{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8)到达{}(,)|0,0,1,2,3,4k k k k k S x y x y ===(6)时,可以以为完成渡河.因为移动的格数小于等于2,只有中间点(2,2)到(6)点和(8)点的距离为2,所以中间点(2,2)成为渡河的症结点.当我们移动到(2,2)点时,就无法进行下去.故4个商人,4个侍从,船容量为2人时,无法安然渡河. 对于问题二,我们可以树立模子为:k+1k S =S +k k D (-1)(10)'k k x x M+= (11) 'k k y y M += (12)k.k x y ≥(13)''k k x y ≥ (14) u(k), v(k)=0,1,2,3; (15)经由过程相似于问题一的步调可以知道:坐标上的症结点是(3,3),最多可以五名商人带五名侍从曩昔.须要肯定五名商人带五名侍从的筹划可行再肯定六名商人带六名侍从的筹划不成行1.五名商人带五名侍从的情形:(1)起首不成能有三名商人先过河,两名商人一名侍从过河,一名商人两名侍从过河(2)三个侍从先过河(5,2),回来一个侍从(5,3),曩昔两个侍从(5,1)回来一个侍从(5,2),再曩昔三个商人(2,2),回来一个商人一个侍从(3,3),再曩昔三个商人(0,3),回来一个侍从(0,4),曩昔三个侍从(0,1),回来一个侍从(0,2)再曩昔两个侍从(0,0)综上可知:五名商人带五名侍从,划子可以载三小我可以过河 2.六名商人带六名侍从的情形:(1)起首不成能有三名商人先过河,两名商人一名侍从过河,一名商人两名侍从过河(2)三个侍从先过河(6,3),回来一个侍从(6,4),曩昔两个侍从(6,2)回来一个侍从(6,3),曩昔三个商人(3,3),此时两岸都是(3,3),由坐标法剖析知,这是最接近终点的临界点,但是假如回来的时刻必定是回来一个商人和一个侍从,假如这一步可行,后面就进行不去综上所述,六个商人带六个侍从,划子载三小我的情形下不克不及渡河联合 1.2知,当划子最多载三小我的时刻,最多五名商人各带一个侍从可以过河.五、模子的磨练与评价由少数人的过河问题推广到了更多半人的过河问题,使得问题变得清楚明了有纪律.六、参考文献[1]章胤,2014年燕山大学全国大学生数学建模比赛培训ppt,2014年4月17日。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
break;
end
jueche(g)=lmd(h);
g=g+1;
h=lmd(h);
end
jueche=A(jueche,:);
jueche(:,3)=[];
d(jc,1:3)=[i,j,1];%生成一个决策向量立刻扩充为三维;
d(jc+1,1:3)=[-i,-j,-1];%同时生成他的负向量;
jc=jc+2;%由于生成两个决策向量,则jc要向下移动两个;end
end
j=0;
end%状态数组生成
kx=1;%状态向量放在A矩阵中,生成方法同矩阵生成;
fori=n:-1:0
kx=kx+2;
end
end
j=nn;
end;%将状态向量生成抽象矩阵
k=(1/2)*size(A,1);
CX=zeros(2*k,2*k);
a=size(d,1);
fori=1:2*k
forj=1:a
c=A(i,:)+d(j,:);
x=find((A(:,1)==c(1))&(A(:,2)==c(2))&(A(:,3)==c(3)));
ifnn>n
n=input(''输入商人数目:');
nn=input('输入仆人数目:');
nnn=input('输入船的最大容量:');
end
%决策生成
jc=1;%决策向量放在矩阵d中,jc为插入新元素的行标初始为1;
fori=0:nnn
forj=0:nnn
if(i+j<=nnn)&(i+j>0)%满足条D={(u,v)|1<=u+v<=现方式做保护处理对用户上传分享的文档内容本身不做任何修改或编辑并不能对任何下载内容负责
商人过河
functionjueche=guohe
%程序开始需要知道商人和仆人数;
n=input('输入商人数目:');
nn=input('输入仆人数目:');
nnn=input('输入船的最大容量:');
ifmi==inf
break;
else
d=find(T==mi);
d=d(1);
P(d)=mi;
T(d)=inf;
k=d;
S(d)=1;
end
end
iflmd(y)==inf
jueche='cannotreach';
return;
end
jueche(1)=y;
g=2;h=y;
while(1)
ifh==x
v(i,x)=1;%x为空不会改变v值
end
end%dijstra算法
x=1;y=size(A,1);
m=size(v,1);
T=zeros(m,1);
T=T.^-1;
lmd=T;
P=T;
S=zeros(m,1);
S(x)=1;
P(x)=0;
lmd(x)=0;
k=x;
while(1)
a=find(S==0);
aa=find(S==1);
ifsize(aa,1)==m
break;
end
forj=1:size(a,1)
pp=a(j,1);
ifv(k,pp)~=0
ifT(pp)>(P(k)+v(k,pp))
T(pp)=(P(k)+v(k,pp));
lmd(pp)=k;endeFra bibliotekdend
mi=min(T(a));
forj=nn:-1:0
if((i>=j)&((n-i)>=(nn-j)))|((i==0)|(i==n))%(i>=j)&((n-i)>=(nn-j)))|((i==0)|(i==n))为可以存在状态的约束条件
A(kx,1:3)=[i,j,1];%生成状态数组集合D`
A(kx+1,1:3)=[i,j,0];
相关文档
最新文档