商人过河模型.docxVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
商人过河模型 商人过河 摘要 本文针对商人安全渡河的问题,采用多步决策的过程建立数学模型,求解得到了在随从没有杀人越货的情况下的渡河方案。 对于本题而言,在3名商人、3名随从、船的最大容量为2的情况下,首先定义了渡河前此岸的状态,并设安全渡河条件下的状态集定义为允许状态集合,接着得到渡河方案的允许决策集合,然后得到状态随渡河方案变化的规律,最后利用平面坐标分析法,并利用计算机进行了仿真,得到了一种商人安全渡河的方案。 但是,本文不仅仅是为了拼凑出一个可行方案,而是希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。基于此目的,利用图解法和算法,得到最短路径的最优解。但同时由于该算法遍历计算的节点很多,所以效率低,而且当有多个最短距离时,不能够将所有符合条件的情况逐一列出。 最后,从这类问题解得趣味性、合理性进行了深入讨论,得到了“传教士与野蛮人渡河”,“印度夫妻渡河”等问题通用的模型,并将其进行了推广。这也是本文的一大特色。 关键词 渡河问题 状态集合 决策集合 平面坐标 图解法 算法 记第 次渡河船上的商人数为 ,随从数为.定义决策:将二维向量 定义为决策;允许决策集合 记作: 因为小船容量为2,所以船上人员不能超过2,而且至少要有一个人划船,由此得到上式。 由我们定义的状态 和决策 ,我们可以发现它们之间是存在联系的: 为奇数是表示船由此岸划向彼岸, 为偶数时表示船由彼岸划回此岸 状态 是随着决策变化的,规律为: 我们把上式称为状态转移律,因此渡河方案可以抽象为如下的多步决策模型: 求决策, 使状态 按照转移率,初始状态经有限步后到达状态。到这里,整个数学模型就已经非常清晰了,接下来要做的就是求解模型得出结果。 四、模型求解 在这个模型的求解中,我将会使用两种方法,一种是数学图解法,用于解决和当前题目一样的规模比较小的问题,优点是比较简便,但是对于规模比较大的问题就无能为力了,比如说有50个商人携带50个随从过河,第二种方法是通过计算机编程,使用程序来解决该问题,即使问题规模增大,我们也可以利用计算机强大的计算能力来解决。 4.1数学图解法 我们首先在 平面坐标系中画出如下方格,方格中的点表示状态 起始状态(下图绿色点) , 终止状态(下图红色点) 允许决策 表示的是在方格中的移动,根据允许决策 的定义,它每次的移动范围为1~2格,并且 为奇数时向左或下方或左下方移动, 位偶数时向右或上方或右上方移动。 于是,这个问题就变成了,根据允许决策 ,在方格中在状态(方格点)之间移动,找到一条路径,使得能从起始状态(上图绿色点) ,到达终止状态(上图图红色点) 在下图中,我们给出了一种方案,我们可以很清楚的看到该方案绝对不是最佳方案(渡河次数最少),它只是给出了一种方案,而且我们看来是一种极其不优化的方案,但是可以很清楚地看出图解法是如何工作的。 根据上图,我们得出的方案如下: 1:两个随从划到对岸 2:一个随从划回来 3:两个随从划到对岸 4:一个随从划回来 5:两个商人划到对岸 6:一个商人和一个随从划回来 7:两个商人划到对岸 8:一个随从划回来 9:两个随从划到对岸 10:一个商人划回来 11:一个商人和随从划到对岸 最终商人们安全渡河 4.2程序求解 我们看到上面介绍的图解法对于小规模问题很直观也很简单,但是无法应对大规模的问题,于是我们采用编程的方法来再次解决上述问题,这次我使用的编程语言为. 4.2.1创建允许状态集合 对于允许状态集合,我们要去使用算法对其进行计算,所谓允许状态无非就是,河岸两边的商人们都是安全的: 一种情况是:两岸的商人人数都比随从人数多(对于随从和商人人数相同的情况就是河的任一岸,商人人数等于随从人数) 另一情况为:所有商人都在河的任何一岸,此时另一岸没有任何商人,对于随从的人数在河的任一岸的数量不论是多少,此时都是安全的 按照以上方法编程如下: 创建允许状态集合 (): = [] (. + 1): (. + 1): == 0: .([,]) == .: .([,]) ( = ((.-) = (.-))): .([,]) 4.2.2创建允许决策集合 对于创建允许决策集合,它和船的容量是相关的,只要每次渡河的商人数量和随从数量小于等于船的容量即可,代码如下: 建允许决策集合,它和船的容量是相关的,只要每次渡河的商人数量和随从数量小于等于船的容量即可,代码如下: 创建允许决策集合 (): = [] (. + 1): (. + 1): (+) = . ( + ) != 0: .([,]) 4.2.3如何渡河 对于如何渡河问题我采取的是一种随机的方法,对于当前安全状态,随机选择一种决策进行试探,如果采

文档评论(0)

183****9588 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档