收藏 分享(赏)

商人过河模型.docx

上传人:HR专家 文档编号:5909847 上传时间:2019-03-21 格式:DOCX 页数:8 大小:148.57KB
下载 相关 举报
商人过河模型.docx_第1页
第1页 / 共8页
商人过河模型.docx_第2页
第2页 / 共8页
商人过河模型.docx_第3页
第3页 / 共8页
商人过河模型.docx_第4页
第4页 / 共8页
商人过河模型.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、商人过河摘要本文针对商人安全渡河的问题,采用多步决策的过程建立数学模型,求解得到了在随从没有杀人越货的情况下的渡河方案。对于本题而言,在 3 名商人、3 名随从、船的最大容量为 2 的情况下,首先定义了渡河前此岸的状态,并设安全渡河条件下的状态集定义为允许状态集合,接着得到渡河方案的允许决策集合,然后得到状态随渡河方案变化的规律,最后利用平面坐标分析法,并利用计算机进行了仿真,得到了一种商人安全渡河的方案。但是,本文不仅仅是为了拼凑出一个可行方案,而是希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。基于此目的,利用图解法和算法,得到最短路径的最优解。但同时由于该算法遍历

2、计算的节点很多,所以效率低,而且当有多个最短距离时,不能够将所有符合条件的情况逐一列出。最后,从这类问题解得趣味性、合理性进行了深入讨论,得到了“传教士与野蛮人渡河” , “印度夫妻渡河”等问题通用的模型,并将其进行了推广。这也是本文的一大特色。关键词 渡河问题 状态集合 决策集合 平面坐标 图解法 算法一、问题提出问题: 三名商人各带一个随从过河,一只小船只能容纳两个人,随从们约定,只要在河的任何一岸,一旦随从人数多于商人人数就杀人越货,但是商人们知道了他们的约定,并且如何过河的大权掌握在商人们手中,商人们该采取怎样的策略才能安全过河呢?二、问题分析这个问题已经理想化了,所以我们无需对模型进

3、行假设,该问题可以看作一个多步决策问题。每一步,船由此岸划到彼岸或者由彼岸划回此岸,都要对船上的人员进行决策(此次渡河船上可以有几名商人和几名随从),在保证安全(两岸的随从都不比商人多)的前提下,在有限次的决策中使得所有人都到对岸去。因此,我们要做的就是要确定每一步的决策,达到渡河的目标。三、模型假设与建立记第次过河前此岸的商人数为 , 随从数为 , ,kxky12,m定义状态:将二维向量 定义为状态,将安全渡河状态,0,123kxy()S下的状态集合定义为允许状态集合, 记为 ,|,; y0,1 23;y0, 12;y0, 1Sxxx( ) 或 或记第 次渡河船上的商人数为 ,随从数为 .定

4、义决策:将二维向量kukv定义为决策;允许决策集合 记作:(,)kkduv (,)|+1,2Duv因为小船容量为 2,所以船上人员不能超过 2,而且至少要有一个人划船,由此得到上式。由我们定义的状态 和决策 ,我们可以发现它们之间是存在联系的:kskd为奇数是表示船由此岸划向彼岸, 为偶数时表示船由彼岸划回此岸状态 是随着决策 变化的,规律为:kskd1()kkSd我们把上式称为状态转移律,因此渡河方案可以抽象为如下的多步决策模型:求决策 , 使状态 按照转移率,初始状态(1,2)kdDm kS经有限 步后到达状态 。到这里,整个数学模型就已经非常13,S1(0,)清晰了,接下来要做的就是求解

5、模型得出结果。四、模型求解在这个模型的求解中,我将会使用两种方法,一种是数学图解法,用于解决和当前题目一样的规模比较小的问题,优点是比较简便,但是对于规模比较大的问题就无能为力了,比如说有 50 个商人携带 50 个随从过河,第二种方法是通过计算机编程,使用程序来解决该问题,即使问题规模增大,我们也可以利用计算机强大的计算能力来解决。4.1 数学图解法我们首先在 平面坐标系中画出如下方格,方格中的点表示状态xoy,sxy起始状态(下图绿色点) , 终止状态(下图红色点)13s10,ns允许决策 表示的是在方格中的移动,根据允许决策 的定义,它每次kd kd的移动范围为 12 格,并且 为奇数时

6、向左或下方或左下方移动, 位偶数k时向右或上方或右上方移动。于是,这个问题就变成了,根据允许决策 ,在方格中在状态(方格点)kd之间移动,找到一条路径,使得能从起始状态(上图绿色点) ,到达终13s止状态(上图图红色点) 10,ns在下图中,我们给出了一种方案,我们可以很清楚的看到该方案绝对不是最佳方案(渡河次数最少),它只是给出了一种方案,而且我们看来是一种极其不优化的方案,但是可以很清楚地看出图解法是如何工作的。根据上图,我们得出的方案如下:1:两个随从划到对岸2:一个随从划回来3:两个随从划到对岸4:一个随从划回来5:两个商人划到对岸6:一个商人和一个随从划回来7:两个商人划到对岸8:一

7、个随从划回来9:两个随从划到对岸10:一个商人划回来11:一个商人和随从划到对岸最终商人们安全渡河4.2 程序求解我们看到上面介绍的图解法对于小规模问题很直观也很简单,但是无法应对大规模的问题,于是我们采用编程的方法来再次解决上述问题,这次我使用的编程语言为.4.2.1 创建允许状态集合对于允许状态集合,我们要去使用算法对其进行计算,所谓允许状态无非就是,河岸两边的商人们都是安全的:一种情况是:两岸的商人人数都比随从人数多(对于随从和商人人数相同的情况就是河的任一岸,商人人数等于随从人数)另一情况为:所有商人都在河的任何一岸,此时另一岸没有任何商人,对于随从的人数在河的任一岸的数量不论是多少,

8、此时都是安全的按照以上方法编程如下:创建允许状态集合 (): = (. + 1): (. + 1): = 0: .(,) = .: .(,) ( = (.-) = (.-): .(,) 4.2.2 创建允许决策集合对于创建允许决策集合,它和船的容量是相关的,只要每次渡河的商人数量和随从数量小于等于船的容量即可,代码如下:建允许决策集合,它和船的容量是相关的,只要每次渡河的商人数量和随从数量小于等于船的容量即可,代码如下:创建允许决策集合 (): = (. + 1): (. + 1): (+) = (.-) = (.-): .(,) 创建允许决策集合 (): = (. + 1): (. + 1)

9、: (+) = . ( + ) != 0: .(,) 渡河 (,): = 1; = (.,.) != 0,0: = .(0,()-1) = 0+(-1)*)*0,1+(-1)*)*1 ( ): = 0+(-1)*)*0,1+(-1)*)*1 ( % 2 = 1): “%个商人,% 个随从从此岸划到对岸“ %(0,1) ( % 2 = 0): “%个商人,% 个随从从对岸划回此岸“ %(0,1) = + 1 主方法 (): = (3,3,2) = .() “允许状态集合为:“ = .() “允许决策集合为: “ .(,) _ = _: () 4.2.5 运行结果为了缩短运行结果的篇幅,我们同样采

10、取小规模问题来验证算法的正确性,这里还是采用原问题规模,运行结果如下:: 3 3 允许状态集合为: 0, 0, 0, 1, 0, 2, 0, 3, 1, 1, 2, 2, 3, 0, 3, 1, 3, 2, 3, 3 允许决策集合为: 0, 1, 0, 2, 1, 0, 1, 1, 2, 0 1个商人,1 个随从从此岸划到对岸 2个商人,0 个随从从此岸划到对岸 2个商人,0 个随从从对岸划回此岸 2个商人,0 个随从从此岸划到对岸 0个商人,2 个随从从此岸划到对岸1 : 3 3 2 允许状态集合为: 3 0, 0, 0, 1, 0, 2, 0, 3, 1, 1, 2, 2, 3, 0, 3

11、, 1, 3, 2, 3, 3 4 允许决策集合为:5 0, 1, 0, 2, 1, 0, 1, 1, 2, 06 1个商人,1 个随从从此岸划到对岸 7 2个商人,0 个随从从此岸划到对岸 8 2个商人,0 个随从从对岸划回此岸 9 2个商人,0 个随从从此岸划到对岸 10 0个商人,2 个随从从此岸划到对岸五、算法评价与改进该算法可以解决问题,但是有很多的不足,首先,由此算法得到的结果是随机的,它只是一个可行解,并不是最优解,并且其中很可能存在重复的步骤,对于一些超大规模的问题,它会产生许多重复的计算,其中会存在许多重复与环,还有许多可以改进的方法。这里我提出一种改进方法的思路,留待思考:我们可以借助图论中的深度优先算法来改进该问题从而得到最优解。如果不一定需要最优解的话,我们还可以在该算法上应用一个队列的数据结构,记录曾经在当前状态采取的策略,从而避免采取重复决策。参考资料数学模型(第 4 版) - 姜启源 叶金星(编著)(第 3 版)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报