4名商人带4名随从安全过河打印版.pdfVIP

4名商人带4名随从安全过河打印版.pdf

  1. 1、本文档共7页,可阅读全部内容。
  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文档。上传文档
查看更多
学 海 无 涯 4 名商人带4 名随从安全过河 一.问题提出: 4 名商人带4 名随从乘一条小船过河,小船每次自能承载至多两人。 随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货. 乘船渡河的方案由商人决定,商人们如何才能安全渡河呢? 二.模型假设: 商人和随从都会划船。 三.问题分析: 商随过河问题可以视为一个多步决策过程,通过多次优化,最后获 取一个全局最优的决策方案。对于每一步,即船由此岸驶向彼岸或由彼 岸驶向此岸,都要对船上的人员作出决策,在保证两岸的商人数不少于 随从数的前提下,在有限步内使全部人员过河。用状态变量表示某一岸 的人员状况,决策变量表示船上的人员状况,可以找出状态随决策变化 的规律,问题转化为在状态的允许变化范围内(即安全渡河条件),确定 每一步的决策,达到安全渡河的目标。 四.模型构成: xk~第k 次渡河前此岸的商人数,yk~第k 次渡河前此岸的随从数 xk, yk=0,1,2,3,4; k=1,2,… … Sk=(xk, yk)~过程的状态, 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} uk~第k 次渡船上的商人数 vk~第k 次渡船上的随从数 1 学 海 无 涯 dk=(uk, vk)~决策,D={(u , v)| 1=u+v=2,uk, vk=0,1,2} ~允许 决策集合 k=1,2,… … 因为k 为奇数时船从此岸驶向彼岸,k 为偶数时船从彼岸驶向此岸, 所以状态Sk 随决策dk 的变化规律是 k Sk 1=Sk+(-1) dk~状态转移律 求 dk∈D(k=1,2, …n), 使 Sk∈S, 并按转移律由 S1=(4,4)到达状 态Sn 1=(0,0)。 五.模型求解: 1.图解法:对于人数不多的情况,可以利用图解法来求解。 在 xoy 平面坐标系上画出如图所示的方格,方格点表示状态 s=(x,y),允许状态集合S 是圆点标出的 13 个格子点,允许决策dk 是 沿方格线移动 1 格或2 格,k 为奇数时向左、下方移动,k 为偶数时向 右、上方移动。要确定一系列的dk 使由S1=(4,4)经过那些圆点最终移 动到原点(0,0)。 由初始状态(4,4)到原点(0,0),无论怎样走,都要经过(2,2),但是 无论怎样变化人数,也只能到达此点后不能继续走下去,只能循环走(由 d7 状态无法不重复循环地走下去),达不到最终的目标(0,0),因此该问 题无解。 2 学 海 无 涯 2.穷举法: 根据分析可以通过编程上机求解,所用的c 程序如下所示: #include stdio.h #define N 30 int x[N],y[N],u[6],v[6],k; /* x,y:状态值,分别表示此岸商人、随从数*/ /*u,v:决策值,分别表示船上商人、随从数*/ /* k:决策步数;k 的奇偶性标志着船在河的此岸或彼岸 */ next(int k,int i)/*计算下一状态*/ { if(k%2) /* k+1 为偶数,船从此岸到彼岸 */ x[k+1]=x[k]-u[i]; y[k+1]=y[k]-v[i]; } 3 学 海 无 涯 else /* k+1 为奇数,船从彼岸到此岸 */ { x[k+1]=x[k]+u[i]; y[k+1]=y[k]+v[i]; } return; } allow(int p,int q)/* 判定状态是否允许,是否重复 */ { int ok,j; /* ok:标记状态是否允许,是否重复;j:循环变

文档评论(0)

moxideshijie2012 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档