商人过河的民数学模型及编程解决.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
商人过河的民数学模型及编程解决

摘要:M对商仆过河,一只船最多载N人,船上和岸上的仆人数都不能多于商人数,否则商人有危险。安排合理的渡河方案,保证商人能安全渡河。(可利用向量,矩阵,图解等方法) 问题提出: 有M对商仆乘船过河,一只船最多载N人,由商人和仆人自己划船渡河,在河的任意一岸,一旦仆人数多于商人数,仆人就可将商人杀死,谋取利益,但是乘船渡河的主动权掌握在商人们手中,商人们如何安排渡河方案,才能安全渡河? 假设: 商人和仆人都会划船,天气很好,无大风大浪,船的质量很好,船桨足够很多次的运载商人和仆人。 参数: 设(x,y)是状态向量,表示任一岸的商人和仆人数,并且x,y分别要大于等于0,小于等于M。 设(m,n)是运载向量,表示运载的商人数和仆人数,0=m=N,0=n=N,0=m+n=N。 设用s表示所有的可取状态向量的集合。 设用d表示所有运载向量的集合。 设用 表示从此岸到彼岸,作减;用 表示从彼岸到此岸,作加。Sk:表示第k步可取状态向量(sk属于s);dk:表示第k步可取转移向量(dk属于d); 问题分析: 商仆安全渡河问题可以视为一个多步决策过程,多步决策是指决策过程难以一次完成,而是多步优化,最后获取一个全局最优方案的决策方法。对于每一步,即船由此岸驶向彼岸,或者船由彼岸驶向此岸的决策,不仅会影响到该过程的效果,而且还会影响到下一步的初始状态,从而对整个过程都会有影响。所以,在每一次过河时,就不能只从这一次过河本身考虑,还要把它看成是整个过河过程中的一个部分。在对船上的人员做决策时,要保证两岸的商人数不能少于仆人数,用最少的步伐是人员全部过河。应用状态向量和运载向量,找出状态随运载变化的规律,此问题就转化为状态在允许范围内(即安全渡河条件),确定每一次该如何过河,从而达到渡河的目标。现在我们都把它们数量化:即用数学语言来表示。 我们以3名商人为例 设第k次渡河前此岸的商人数为xk,随从数为yk,k=1,2,…,xk,yk =0,1,2,3,将二维向量Sk =(xk,yk)定义为状态。安全渡河条件下的状态集合称为允许状态集合,记为S,则允许状态集合为: S={(x,y)| x = 0或3,y = 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变化的规律即状态转移规律是: Sk+1 = Sk +(- 1)k dk (3) 这样,制定安全渡河方案归结为如下的多步决策问题: 求决策dk ∈ D(k = 1,2,…,n),使状态Sk ∈ S按照规律(3),由初始状态S1=(3,3)经有限步(设为n)到达状态Sn+1=(0,0)。 模型的解答 下面通过程序给出这个多步决策问题的一个解, 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}; (*以上给出10个允许的状态*) d[1]={0,2};d[2]={2,0};d[3]={1,1};d[4]={0,1}; d[5]={1,0}; (*以上表示给出5个允许的决策*) i=1;j=1;k=1;s[0]=s[1]={3,3}; Print[″此岸————船上————对岸″]; Do[ Do[s[i+1]=s[i]+(-1)^i d[j]; t=0; Do[If[s[i+1]= =a[k],t=1],{k,1,10}]; If[t= =0,Continue[ ]]; (*以上是保证状态属于允许的状态*) 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,R

文档评论(0)

132****6080 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档