商人过河优化模型

商人过河优化模型
商人过河优化模型

2011高教社杯全国大学生数学建模竞赛

承诺书

我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.

我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。

我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。

我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受到严肃处理。

我们参赛选择的题号是(从A/B/C/D中选择一项填写): B

我们的参赛报名号为(如果赛区设置报名号的话):

所属学校(请填写完整的全名):西京学院

参赛队员(打印并签名) :1. 邹高永

2. 张大伟

3. 钱晓东

指导教师或指导教师组负责人(打印并签名):

日期:年月日赛区评阅编号(由赛区组委会评阅前进行编号):

2011高教社杯全国大学生数学建模竞赛

编号专用页

赛区评阅编号(由赛区组委会评阅前进行编号):

赛区评阅记录(可供赛区评阅时使用):

全国统一编号(由赛区组委会送交全国前编号):

全国评阅编号(由全国组委会评阅前进行编号):

商人过河

摘要

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

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

但是,本文不仅仅是为了拼凑出一个可行方案,而是希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。基于此目的,利用了dijkstra算法,得到最短路径的最优解。但同时由于该算法遍历计算的节点很多,所以效率低,而且当有多个最短距离时,不能够将所有符合条件的情况逐一列出。

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

关键词渡河问题状态集合决策集合平面坐标dijkstra算法

1 问题重述

三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任意一岸,一旦随从的人数比商人多,就杀人越货.但是如何乘船渡河的大权掌握在商人们手中。商人们怎样才能安全渡河呢?同时,推广到四名商人带四名随从又如何?

2 问题分析

安全渡河问题可以看成一个多步决策过程。每一步,即船由此岸驶向彼岸或从彼岸驶回此岸,都要对船上的人员(商人随从各几人)作出决策,在保证安全的前提下(两岸的商人数都不比随从数少),在有限步内使人员全部过河。用状态(变量)表示某一岸的人员状况,决策(变量)表示船上的人员状况,可以找出状态随决策变化的规律。问题转化为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到渡河的目的。

此类智力问题经过思考,可以拼凑出一个可行方案。但是,我们现在希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。

3 模型假设及符号说明

3.1 模型假设

(1)每个商人和随从都会划船;

(2)只有一条船,且每条船上最多只能乘坐两个人;

(3)所有商人与随从之间没有矛盾,不会出现两人不愿意坐一条船的现象;

(4)船在渡河的过程中不受外界环境的影响。

3.2 符号说明

A初始状态下,商人和随从所在的一岸;

B初始状态下,商人和随从欲到达的一岸;

x第k次渡河前,A岸的商人数;

k

y第k次渡河前,A岸的随从数;

k

S渡河前A岸商人与随从数的状态;

k

S 渡河前A 岸商人与随从数的允许状态的集合;

k u 第k 次渡河时,船上的乘坐商人数; k v 第k 次渡河时,船上的乘坐随从数; k d 第k 次渡河方案的决策;

D 渡河方案的允许决策集合

k D 第k 次状态的转移

4 模型的建立与求解

4.1 模型的建立

根据题意,可以作出商人渡河初始状态的示意图:

渡河目的:A ——>B (选择A 岸为参考点)

记第k 次渡河前A 岸的商人数为k x ,随从数为k y ,1,2,,k m = ,且

,0,1,2,3k k x y =

将二维向量(,)k k k S x y =定义为状态,安全渡河条件下的状态集定义为允许状态集合,记为S ,因此有:

{},y |0,3; y 0, 1, 2, 31;y 0, 12;y 0, 1,2S x x x x =======()或或 (1) 记第k 次渡河时,船上的乘坐商人数为k u ,随从数为k v ,将二维向量

(,)k k k d u v =定义为第k 次渡河方案的决策,渡河方案的允许决策集合记为D 根据题意可知,船的容量是一定的,因此,得

{}(,)|+1,2D u v u v == (2)

因为当21k n =-时,船由A 岸驶向B 岸;当2k n =时,船由B 岸驶向A 岸。所以状态k S 随着k d 的变化的规律为:

1(1)k k k k S S d +=+- (3)

这样,制定安全渡河方案归结为如下的多步决策问题:

即:求决策(1,2,,)k d D k m ∈= ,使状态k S S ∈。按照转移规律,由初始状态

()13,3S =经有限m 步后到达状态1(0,0)m S +=。

4.2 模型的求解

根据(1)(2)(3)式,通过利用matlab 编写一段程序来求解多步决策问题是可行的,但是当商人和随从数都不多的情况下还可以用平面坐标法解此模型更为方便。接下来,我们先用平面坐标法求解此模型,最后再使用计算机仿真,对求解的结果进行验证,并给予推广。 4.2.1 平面坐标法

设x 为商人数,y 为随从数。在xoy 平面坐标系上作分析。先标出此案的安全状态点。

起始点-----(3,3);最终点-----(0,0)

即模型求解就是探求从状态(3,3)经过有限次转移之后到达状态(0,0)的方案。设k D 为第k 次状态的转移,

当21k n =-时,船由A 岸驶向B 岸,此时,x y 只能减少,不能增加。故坐标点只能向左下方移动。由于受船的容量的限制,x y +至多减少2,即至多只能向左下方移动两格。如下图所示:

从图中可以看出,在这种渡河方案中,时刻都能够确保“两岸安全”,不会出现随从们“杀人越货”。

4.2.2 计算机仿真

通过利用matlab编写一段程序来求解这种多步决策问题[见附件:程序一],当我们将商人数与随从数以及船的容量按照题意输入时,便会得到商人们的渡河方案如下:

表 1 4种可供商人选择的不同渡河方案

经检验,结果与使用平面坐标法得到的结果完全一致。

通过计算机仿真,当题目中给定出任意数量的商人,随从,以及规定出任意船的容量,都可以判断出“商人们能否安全渡河?”以及解决“如果能,那么安全渡河的方案是什么?”的问题。从而使这个模型更具有一定的推广价值。

5 模型的评价与改进

5.1 模型的评价

5.1.1 模型的优点

(1)采用了较为成熟的数学理论建立模型,可行度比较高;

(2)在讨论商人安全渡河的方案时,运用了图表,比较直观;

(3)模型的求解运用了强大的matlab软件,结果可信度高,便于推广;

(4)通过matlab程序,能判断出“当任意个商人﹑任意个随从﹑船的容量任意

时,商人能否安全渡河?”及解决了“如果能,那么渡河方案又是什么?”的问题,使得所建模型更加全面。

5.1.2 模型的缺点

(1)利用平面坐标法求解该模型时,出现了明显的遗漏,考虑的不够全面;(2)没有找到商人数﹑随从数及船的容量之间的数量关系;

(3)没有考虑到实际生活中,在安全渡河的前提下,商人过河的优先级应高于随从。

5.2 模型的改进

基于以上求解模型用到的方法,我们明显意识到了结果考虑到的不够全面。为此,我们利用dijkstra算法,通过相应程序求解前面模型[见附件:程序二],得到最短路径的最优解。但同时由于该算法遍历计算的节点很多,所以效率低。而且当有多个最短距离时,不能够将所有符合条件的情况逐一列出。

综合以上的努力,我们与致力于研究出一套方案:即给出任意个商人与任意个随从以及船的容量任意的时候,都可以给出安全渡河的方案;并且在给出商人数、随从数、船的容量中任意两者,并要使其能够安全渡河情况下的第三者的取值范围,以及得到最优的渡河方案。

由于水平有限,我们只能提出这个美好的想法,用某种方法能把在所有安全状态集合和决策集合中,搜索出所有可能的解,从而从其中找出最优的解。

6 模型的推广

“商人渡河”模型适合于解决很多问题,如“传教士与野蛮人渡河”,“印度夫妻渡河”等。这些问题本质上都是相同或相似的,由此可见这个趣

味问题流传的广泛性。另外还有所谓“人狗鸡米过河”问题,也是颇有趣味的,人、狗、鸡、米均要过河,船需人划,而船上至多还可载一物,但若人

不在时,狗会吃鸡,鸡会吃米,问如何设计安全过河方案。我们完全可以仿

照商人渡河问题建立一个多步决策模型,将上述算法稍作修改,就可以得到

它的解。这里就不再赘述了。另外,用一定容积的若干油瓶倒出一定量的油

的问题也属此类问题。

7 参考文献

[1]数学建模案例分析白其峥主编北京:海洋出版社,2000

[2]数模竞赛赛题简析与论文点评:西安交大近年参赛论文选编赫孝良等[选编] 西安:西安交通大学出版社,2002

[3]百度百科文献https://www.360docs.net/doc/3b1080013.html,访问日期 2011年8月25日

[4]《数学模型精品课程》第四章

https://www.360docs.net/doc/3b1080013.html,/courses/sxmx/sm2/sm2252.htm网站制作日期2010年7月14日

商人过河问题

商人过河 一、问题重述和分析 随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。现有4名商人各带一个随从一起渡河一只船只能容纳两个人,但如何乘船渡河的大权掌握在商人的手里,商人怎样安排才能在有限步内安全渡河? 二、模型假设 1、在商人人数多于随从时乘船渡河的大权掌握在商人的手里; 2、商人和随从都会划船; 三.符号说明 x表示商人人数; y表示随从人数; z表示划船到河的此岸与彼岸。 四、模型的建立与求解 本题为多步决策模型,每一次过河都是状态量的转移过程。 此岸四个商人用x=0、1、2、3、4表示,此岸四个随从用y=0、1、2、3、4表示,z=0时表示划船到河的此岸时,z=1时表示划船到河的彼岸时,用有序数对(x,y,z)表示每次转移的状态量。解决此问题就是状态量(4,4,0)转移至(0,0,1),以下就是状态量转移的全部情况(其中“!”表示不能再转移下去或与前面步骤重复): (4,4,0)→(3,3,1) ↓↓ (4,2,1)→(4,3,0)→(4,1,1)→(4,2,0)→(4,0,1)→(4,1,0)→! ↓ (2,2,1) ↓ ! 由以上关系可知,一只船只能容纳两个人的情况下,四名商人各带一个随从无法过河。 此外,如果船的容量增加到3人,那么商人就能以几种方式安全过河,以下

是其中一种方案: (4,4,0)→(4,2,1)→(4,3,0)→(4,1,1,)→(4,2,0)→(2,2,1) ↓ (0,1,1)←(0,3,0)←(0,2,1)←(0,4,0)←(0,3,1)←(3,3,0)↓ (0,2,0)→(0,0,1) 五、模型推广 通过以上模型的建立,若商人和随从人数增加或小船容量加大,考虑n名商人各带一随从的情况。

商人过河问题数学建模修订稿

商人过河问题数学建模 WEIHUA system office room 【WEIHUA 16H-WEIHUA WEIHUA8Q8-

作业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,vu+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)

基于投入产出优化方法的行业节能潜力和节能目标分析

基于投入产出优化方法的行业节能潜力和 节能目标分析 夏炎1,2,3杨翠红1,2,3 (1.中国科学院数学与系统科学研究院,北京100190; 2.中国科学院管理、决策与信息系统重点实验室(MADIS),北京100190; 3.中国科学院预测科学研究中心,北京100190) 摘要:本文基于投入产出优化方法,提出了行业实际节能潜力和行业实际结构调整潜力两个概 念,并将全国总节能目标按照各个不同的行业进行优化分解。同时分析了产业结构调整前后不 同情景下,行业能源效率优化的结果。得到三点主要结论:(1)产业结构调整情况下,行业可以 制定更小的节能目标;(2)行业能源利用效率的提高,有利于高耗能行业产业结构减小,对产业 结构长期良性调整有利;(3)节能潜力大的行业,对实现全国目标的贡献大,但能实现的节能目 标不一定大,因此要给予政策扶持。 关键词:投入产出优化;实际节能潜力;实际结构调整潜力;行业节能目标 引言 为了实现我国“十一五”规划中提出的2010年末单位国内生产总值(GDP)能源消耗量比2005年末降低20%的节能目标,并将各行业、各地区的年均节能目标定为4%,以此作为每年地区节能减排绩效考核的标准,而这一节能目标能否实现成为人们普遍关注的焦点。2010年3月10日,国家发展与改革委员会副主任解振华表示:2006年至2009年,全国单位GDP能耗累计降低了14.38%,完成目标进程的70%,但2010年实现节能目标仍需付出巨大努力。2009年11月26日,温家宝主持召开国务院常务会议提出到2020年末我国单位GDP的二氧化碳排放比2005年末下降40%-45%,非化石能源占一次能源消费的比重达到15%左右,并将此项决定在2010年哥本哈根气候变化会议上向世界各国庄严承诺。可以说,与“十一五”规划中的节能目标相比,哥本哈根会议的承诺实现了由节能目标到减排目标的转变。那么这个目标能否实现,又如何实现,特别是各行业能在多大程度上实现相应的目标,是非常值得研究的问题。本文将基于投入产出模型,并结合优化方法,对这一问题进行深入研究。 投入产出优化方法 投入产出优化方法是指将最优化理论与投入产出技术相结合的方法。最优化方法是近几十年形成的,它主要运用数学方法研究各种系统的优化途径及方案,为决策者提供科学决策的依据。最优化方法的主要研究对象是各种经济系统问题及其生产活动,其目的在于针对所研究的系统,求得一个合理运用现有资源和经济收稿日期:2010-03 基金项目:国家自然科学基金项目(70941030;70871108;70810107020);北京市科委博士生论文资助专项项目(ZZ0914)。 作者简介:夏炎,中国科学院数学与系统科学研究院博士研究生;杨翠红,中国科学院数学与系统科学研究院研究员。

商人过河问题

商人过河问题 /*************************************************** *M个商人与每人各带的一个仆人过河问题 *船每次至多运N个人,至少要有一人划船 *在任一岸,当商人数<仆人数时,仆人就杀人越货 *过河由商人安排运送人员及数目 *找出安全渡河的全部方法并打印(原问题中M=3,N=2) *2010-10-10 20时许(纪念伟大的双十) * LYP ***************************************************/ /****************************************************************** *本题为多步决策 *若考虑只针对人数为 M = 3 对,每次过河人数最多 N = 2 *可以证明路径中必须经坐标中(3,1)过至(1,1)点(过诃时), *后返回至(2,2)点,再过诃至(0,2)点(只剩2个仆人) *可以先考虑(3,3)到(3,1)点 *再经(0,2)至(0,0),完成过诃(由图形的对称性关系,可以直接将(3,1)至(3,1)路径翻转,更改对应标号即可) *当然也可以用动态规划求解 *本代码不限定M,N值,可通过修改宏M,N的值,求其他商人(仆人)数与最大过河人数的全部路径 *******************************************************************/ /********************************************************************* * *商人数x < 仆人数y时遭杀人越货,过河失败 *对应可行域为: *x = 0, y = 0…M; elements[]中编号0…M *0 < x < M, y = x; elements[]中编号M+1…2M-1 *x = M, y = 0…M; elements[]中编号2M…3M *图像上表示如下:(共 3*M+1 个点),过河即从3M点到0点 *过河为左下方1/4圆区域 *返回为右上方1/4圆区域

煤炭产业动态投入产出多目标优化模型讲解

第6卷第3期辽宁工程技术大学学报(社会科学版 V ol.6,N o.32004年5月 Journal of Liaoning T echnical University (S ocial Science Edition May ,2004 煤炭产业动态投入产出多目标优化模型 王峰1,吕渭济1,杨德武2 (1.辽宁工程技术大学工商管理学院,辽宁阜新123000; 2.中国银行业监督管理委员会阜新分局监管二科,辽宁阜新123000 摘要:文章以煤炭产业的适度发展为出发点,在考虑中国经济发展速度与综合经济平衡的前提下,基于动态投入产出分析技术以及多目标规划理论建立了煤炭产业多目标动态投入产出优化模型。并根据各产业煤炭消耗变化规律提出了应用马尔科夫概型修订直接消耗系数的方法,同时应用计量经济学方法对中国未来十年的煤炭消耗量作出了预测,为准确求解该模型提供了依据。 关键词:煤炭产业;多目标模型;动态投入产出 中图分类号:F 270文献标识码:A 文章编号:1008-391X (200403-0253-03 Multi 2object optimization models of coal industry dynamic input 2output CUI Wei 1,LU Wei -ji 1,Y ANG De -wu 2 (1.C ollege of Business Administration ,Liaoning T echnical University ,Fuxin 123000,China ;2.The Second Supervision O ffice ,Fuxin Section of China Banking Regulatory C ommission ,Fuxin 123000,China

基于商人过河游戏的数学建模-最新教育文档

基于商人过河游戏的数学建模 1提出问题 文献[1]给出一个智力游戏:“三名商人各带一个随从渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船的大权掌握在商人们手中。商人怎样才能安全渡河呢?”此类智力问题当然可以通过一番思考,拼凑出一个可行的方案来。文献[1]中通过图解法给出了解答,但是当商人数与随从数发生变化,船能容纳的人数不是二人时,图解法就会变得繁复而难以解决问题。 因此,将上述游戏改为n名商人各带一个随从过河,船每次至多运p个人,至少要有一个人划船,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。 但是如何乘船的大权掌握在商人们手中。商人怎样才能安全渡河的问题。 除此之外,考虑了随着船载人数的增多,以及商人与仆人的对数增多到多少时,会影响商人的安全渡河的问题。 2问题分析 由于这个虚拟的游戏已经理想化了,所以不必再作假设。我们希望能找出这类问题的规律性,建立数学模型,并通过计算机编程进行求解。安全渡河游戏可以看做是一个多步决策过程,分步优化,船由此岸驶向彼岸或由彼岸驶回此岸的每一步,都要对船上的商人和随从做出决策,在保证商人安全的前提下,在无限步内使全部人员过河。用状态表示某一岸的人员状况,决策表示船上的人员情况,可以找出状态随决策变化的规律。问题转化为在状态的允许范围内,确定每一步的决策,最后获取一个全局最优方案的决策方案,达到渡河的目标。 除此以外,我们还要找出,随着船载人数的增加,商人与仆人对数达到多少时,会影响到商人不能安全过河。这里要对船载人数进行限制,因为船载人数过多时,此智力游戏会变得相当繁复,就会失去作为游戏的本来意义。 3模型构成

《投入产出分析企业投入产出模型》

§3.6 企业投入产出模型 一、企业投入产出表 对于一个部门或一个大中型企业,包括能源工业部门或能源工业企业,生产多种产品,一部分作为企业(或部门)的最终产品,一部分在企业(或部门)内部生产过程中作为中间产品被消耗,多种产品间也存在着复杂的联系。一般讲,在计划经济下,国家对该企业(或部门)下达一定的销售指标,给予该企业(或部门)一定的物资(如能源、原材料等),企业(或部门)如何根据国家下达的销售指标来安排企业(或部门)内部各种产品的生产呢?如何安排各种外购物质(包括能源)的供应呢?如何在保证完成国家任务和国家给定的能源和其它物资限制下最优地安排企业(或部门)的生产呢?投入产出法是解决这些问题的一种好方法。在市场经济下,企业根据市场需要预测销售指标,同样存在如何根据销售指标来安排企业内部各种产品的生产,如何安排各种外购物质(包括能源)的供应,以及如何在保证满足市场需求下最优地安排企业的生产等问题。而且在市场经济下,企业内部具有很强的计划性。所以,企业投入产出模型无论对于计划经济,还是市场经济,都是重要的。部门是同类企业的集合,下面仅就企业为例加以说明。 表3.6.1为企业投入产出表表式。表中包括企业内部产品n 种,外购物质m 种。企业销售产品一般即为企业最终产品,国家或者市场给企业下达的生产任务一般就是销售指标。用x ij 表示企业在生产第j 种产品过程中直接消耗的第i 种产品的数量,v i 、m j 分别表示生产第j 种产品的劳动报酬和纯收入。这样,从投入产出表中,可以得到下列系数: j j vj X v a = j ij ij X x a = j j mj X m a = j ij ij X w = γ a ij 为对本企业产品的直接消耗系数,γij 为对外购物资的直接消耗系数,a vj 为劳动报酬系数,a mj 为纯收入系数。 若企业的销售指标为Y Y Y n 12,,…,,则为完成该销售指标,企业必须安排各种产品 的生产量为X X X n 12,,, ,企业必须外购各种物资数量为n W W W ,21 ,,,这里

商人过河问题matlab程序

商人过河functionjueche=guohe %程序开始需要知道商人和仆人数; n=input(' 输入商人数目:'); nn=input(' 输入仆人数目:'); nnn=input(' 输入船的最大容量:'); ifnn>n n=input('' 输入商人数目:'); nn=input(' 输入仆人数目:'); nnn=input(' 输入船的最大容量:'); end %决策生成 jc=1;% 决策向量放在矩阵 d 中,jc 为插入新元素的行标初始为 1 ; for i=0:nnn for j=0:nnn if(i+j<=nnn)&(i+j>0)% 满足条D={(u,v) |1<=u+v<=nnn,u,v=0,1,2} 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 矩阵中,生成方法同矩阵生成; for i=n:-1:0 for j=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]; kx=kx+2; end end j=nn; end; % 将状态向量生成抽象矩阵 k=(1/2)*size(A,1); CX=zeros(2*k,2*k); a=size(d,1); for i=1:2*k for j=1:a c=A(i,:)+d( j,:); x=find((A(:,1)==c(1))&(A(:,2)==c(2))&(A(:,3)==c(3)));

商人过河问题数学建模

作业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)可得 44k k x y -≥- 化简得 k k x y ≤

数学建模 商人过河

数学建模课程作业 论文题目: 对商人过河问题的研究 指导教师:黄光辉 小组成员:黄志宇(20156260)车辆工程04班 牛凯春(20151927)电气工程05班 文逸楚(20150382)工商管理02

一、问题重述 3名商人带3名随从乘一条小船过河,小船每次只能承载至多两人。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。乘船渡河的方案由商人决定,商人们如何才能安全渡河呢? 二、问题分析 本题针对商人们能否安全过河问题,需要选择一种合理的过河方案。对该问题可视为一个多步决策模型,通过对每一次过河的方案的筛选优化,最终得到商人们全部安全过到河对岸的最优决策方案。对于每一次的过河过程都看成一个随机决策状态量,商人们能够安全到达彼岸或此岸我们可以看成目标决策允许的状态量,通过对允许的状态量的层层筛选,从而得到过河的目标。 三、模型假设 1.过河途中不会出现不可抗力的自然因素。 2.当随从人数大于商人数时,随从们不会改变杀人的计划。 3.船的质量很好,在多次满载的情况下也能正常运作。 4.随从会听从商人的调度,所有人都到达河对岸。 四、符号说明 第k次渡河前此岸的商人数 第k次渡河前此岸的随从数 过程的状态向量 允许状态集合 第k次渡船上的商人数 第k次渡船上的随从数 决策向量 允许决策集合

x y 3322110s 1s n +1d 1d 11五、模型建立 本题为多步决策模型,每一次过河都是状态量的转移过程。 用二维向量表示过程的状态,其中分别表示对应时刻此岸的商人,仆人数以及船的行进方向,其中则允许状态集合: = 又将二维向量定义为决策,则允许的决策合集为: 因为k 为奇数时船从此岸驶向彼岸,k 为偶数时船从彼岸驶向此岸,所以状态随决策的变化规律是 该式称为状态转移律。 求决策,使,并按照转移律,由经过有限步n 到达状态 六、模型求解 本模型使用MATLAB 软件编程,通过穷举法获得决策方案如下(完整matlab 程序详见附录): 初始状态: 可用图片表示为:X0= 3 3状态为: S = 3 13 23 03 11 12 20 20 30 10 20 0决策为: D = 02

数学建模商人过河__论文

组长:王鹏道110714 组员:任利伟110713、孙祎110706 小组成员负责情况: 王鹏道:选择论文题目、设计论文版面字体、分配成员任务、总结任利伟:一、问题提出、关键、分析。二、模型假设、三、模型建立孙祎:四、模型求解、五、模型的检验、拓展及延伸 2014年11月24日 摘要 为了求解3个商人和3个随从的过河问题,用数学分析方法,建立数学模型,并且加以求解,展示动态规划思想的应用步骤。最后利用计算机蝙程进行求解,获得过河问题的完整求解过程;有效地求解类似多步决策问题的作用。 关键词:多步决策计算机求解状态转移律图解法

一、 问题的提出 随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货,但是乘船渡河的方案由商人决定.商人们怎样才能安全过河? 二、 问题的关键 解决的关键集中在商人和随从的数量上,以及小船的容量上,该问题就是考虑过河步骤的安排和数量上。各个步骤对应的状态及决策的表示法也是关键。 三、 问题的分析 在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。由于船上人数限制,这需要多步决策过程,必须考虑每一步船上的人员。动态规划法正是求解多步决策的有效方法。它要求把解的问题一层一层地分解成一级一级、规模逐步缩小的子问题。直到可以直接求出其解的子问题为止。分解成所有子问题按层次关系构成一棵子问题树.树根是原问题。原问题的解依赖于子问题树中所有子问题的解。 四、 模型假设 记第k 次过河前A 岸的商人数为X K , 随从数为Y K k=1,2,? X K ,Y K =0,1,2,3,将二维向量S K =(X K ,Y K )定义为状态.把满足安全渡河条件下的状态集合称为允许状态集合。记作S 。则 S={(X K ,Y K )|(X K =0,Y K =0,1,2,3),(X K =3,Y K =0,1,2,3),(X K =Y K =1)(X K =Y K =2)} 记第k 次过河船上的商人数为U K 随从数为V K 将二维向量D K =(U K ,V K )定义为决策.由小船的容量可知允许决策集合(记作D)为 D={(U K ,V K )|U K +V K =l,2}={(O,1);(O,2);(1,O);(1,1);(2,O)} 五、 模型建立: 动态规划法正是求解多步决策的有效方法。它要求把解的问题一层一层地分解成一级一级、规模逐步缩小的子问题。直到可以直接求出其解的子问题为止。分解成所有子问题按层次关系构成一棵子问题树.树根是原问题。原问题的解依赖于子问题树中所有子问题的解。

投入产出模型的应用

投入产出分析在XX中的应用 投入产出分析在xx的应用 一、投入产出简介 投入产出是国民经济各部门间投入原材料和产出产品的平衡关系。投入产出分析是由俄罗斯裔美国经济学家瓦西里·列昂惕夫(Wassily Leontief 1905-1999)创立的。主要应用数学方法和电子计算机,研究各部门间这种平衡关系的一种现代管理方法。其理论基础是瓦尔拉的一般均衡理论。 投入产出分析主要通过编制投入产出表来实现的。投入产出表是由投入表与产出表交叉而成的。前者反映各种产品的价值,包括物质消耗、劳动报酬和剩余产品;后者反映各种产品的分配使用情况。在投入产出表的基础上,可以建立相应的数学模型。例如,产品平衡模型、价值构成模型等,用以进行经济分析、政策模拟、计划论证和经济预测。 应用最早的是美国劳工部劳动统计局,于1942- 1944年编制了美国1939年投入产出表,利用这张表来研究美国的经济结构,预测战后美国的钢铁工业的生产和美国的就业情况,制定战时军备生产计划,研究裁军对美国经济的影响,收到了良好的效果。由此,得到了美国政府和经济学界的重视,引起了世界各国的关注。由于投入产出表的科学性、先进性和实用性,自50年代以来世界各国纷纷研究投入产出分析、编制和应用投入产出表。到1990年,除个别国家外,世界上绝大多数国家都编制了投入产出表。投入产出原理也得到了发展,由静态模型向优化模型发展,并应用到各个方面来研究宏观经济问题。 投入产出分析在我国的应用主要经历了以下几个阶段:1、初步研究及引入阶段。五十年代末六十年代初,在著名经济学家孙冶方和著名科学家钱学森倡导下,经济理论界和一些高等院校开始研究投入产出理论。"文革"期间,此项工作几乎中断。2、快速发展阶段。1974年,为研究宏观经济发展情况的需要,在国家统计局和国家计委的组织下,由国家统计局、国家计委、中国科学院、中国人民大学等单位联合编制了1973年全国61种产品的实物型投入产出表。利用该表开展的分析应用工作,在制定社会经济发展计划等方面发挥了积极的作用。3、全面发展和广泛应用阶段。十一届三中全会以后,党和国家把工作重点放到经济建设上,这就为包括投入产出在内的数量经济分析方法的研究和应用创造了良好的条件。1980年,国家统计局布置山西省统计局编制《山西省1979年投入产出表》,以探索编制全国投入产出表的经验。1982年,国家统计局、国家计委及有关部门编制了1981年全国投入产出价值表和实物表。为了适应改革开放的需要,加强国民经济宏观调控和管理,提高经济决策的科学性,1987年,国务院办公厅发出了《关于进行全国投入产出调查的通知》,并于1987年进行全国投入产出调查,编制《中国1987年投入产出表》。这张表于1988年底编制成功,达到国际先进水平。它标志着我国投入产出分析步入世界先进行列。投入产出分析在我国得到了广泛应用,投入产出表成为宏观经济调控、决策和管理的重要工具。 二、投入产出模型 投入产出模型是一种经济数学模型,是指用数学形式体现投入产出表所反映的经济内容的线性代数方程组。 投入产出表是指反映各种产品生产投入来源和去向的一种棋盘式表格。这种描述一般只涉及表面象限。按表式分为三个象限。第I象限是由名称相同、排列次序相同,数目一致的几个产品部门纵横交叉而成的,其主栏为中间投入,宾栏为中间产出,它可提供国民经济各部门之间相互间依存、相互制约的技术经济联系资料,反映国民经济各部门之间相互依赖、相互提供劳动对象供生产和消耗的过程第II象限,其主栏和第I象限的主栏相同,也是

商人安全过河问题

讨论资金积累、国民收入与人口增长的关系 班级:2009级数学与应用数学 黄全(组长): P092314746 邱亚彪: P091712712 谢志成:P091712679 央金:P091715381 罗国庭:P091712739

讨论资金积累、国民收入与人口增长的关系 摘要 如何保证人口增长对国民收入影响的正效应和国民平均收入持续性增长,一直是全国人民所共同关注的问题。本文对资金积累、国民收入和人口增长三者之间的关系进行讨论,通过导数结合三者之间存在的基本规律,建立相应的微分方程,利用微分方程法给出方程,由matlab解得资金积累、国民收入与人口增长的关系。通过掌握该关系,确定资金积累的增长率大于人口增长率时国民收入才会增长,从而更好地调整人口出身率、控制人口的数量和人口质量,保证我国人口增长与国民收入增长之间的适当的比例关系,使得国民平均持续性增长,促进社会经济的迅速发展,提高人民的生活质量,为整个社会的长远战略需求做贡献。 关键字:资金积累状态转移律图解法微分方程决策

一、 问题重述 讨论资金积累、国民收入与人口增长的关系 (1)若国民平均收入x 与按人口平均资金积累y 成正比,说明仅当总资金积累 的相对增长率k 大于人口的相对增长率r 时,国民平均收入才是增长的. (2)作出k(x)和r(x)的示意图,说明二曲线交点是平衡点,讨论它的稳定性。 (3)分析人口激增会引起什么后果 二、符号说明 1x : t 时刻总资金累积量,2x :t 时刻人口数量, 3x :国民平均收入量 ,k :总资金的相对增长率 r :人口的相对增长率 三 、模型的假设 在一定时期后,增长的人口数量为::22x rx '=; 总资金的增长量为:11x kx '= ; 四、问题的分析 在社会主义发展的初级阶段,国民收入是指一定时期(通常为1年)内,物质生产部门劳动者新创造的价值,它是物质资料生产进一步发展和人口再生产条件改善的物质基础。在其他条件已定的情况下,国民收入总量愈多,人均消费基金和积累基金也越多,从而有利于人们生活的改善和技术装备水平的提高,也有利于人口数量的控制和人口质量的提高。人口增长从 3个方面影响国民收入的增减: ① 人口或劳动者数量的多少; ② 每个劳动者技术装备水平的高低; ③ 劳动者节省消耗和管理才能的大小。 国民收入又分为资金的累积和消费,累积资金=国民收入错误!未找到引用源。消费资金,而消费资金=基本消费资金错误!未找到引用源。人口发展速度。因此, 为增加人均国民收入,增强一国的经济实力和提高人民生活水平,要在大力发展经济、增加生产的基础上合理地调节人口增长。

商人过河matlab程序以及解析

数学建模作业 班级:数学131 姓名:丁延辉 学号:13190122 (二)商人过河Matlab代码 三个商人三个随从 z=zeros(30,3); %z为由(a,b,c)的列向量组成的3行30列数组,初始化为0矩阵,a,b,c代表此刻此岸的商人,仆人数量以及船的运行状态,c=1表示即将向彼岸运行 m=zeros(1,20); %m为一维行向量,初始化为1矩阵,用于在后面的程序中判断第k次选择的乘船方案 d=[0,1,1;0,2,1;1,0,1;1,1,1;2,0,1]; %共有5种可以选择的乘船方案,最后面一列全为1,即用于在后面表示使得z(k,3)的取值保持随着k的奇偶性保持着0-1变换. z(1,:)=[3,3,1]; %初始状态为[3,3,1] k=1; m(k)=1; %第一次默认的乘船方案为决策1——d(1) flag=1; %用于在后面判断是否成功找到方案 answer=0; %用于在后面判断是否找到

答案 while k>0 %保持k>0 if m(k)>5 flag=0; break; end p=0; z(k+1,:)=z(k,:)+(-1)^k*d(m(k),:); %每一次的运算规则都是z(k+1)=z(k)-(-1)^k*d(m(k),:),d(m(k),:)表示决策方案 a=z(k+1,1); %将当前情况的矩阵数值复制给a商人,b仆人 b=z(k+1,2); c=z(k+1,3); if (a==3&&(b==0||b==1||b==2||b==3))||(a==1&&b==1)||(a==2&&b==2 )||(a==0&&(b==0||b==1||b==2||b==3)) %判断(a,b)是否符合限定情况 for j=1:k %判断是否此岸a,b,c与之前有重复,如果是,结束此次循环,重新选择乘船方案 if a==z(j,1)&&b==z(j,2)&&c==z(j,3) if m(k)~=5 %决策方案只有5种,所以m(k)<=5,

商人过河优化模型

2011高教社杯全国大学生数学建模竞赛 承诺书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。 我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。 我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受到严肃处理。 我们参赛选择的题号是(从A/B/C/D中选择一项填写): B 我们的参赛报名号为(如果赛区设置报名号的话): 所属学校(请填写完整的全名):西京学院 参赛队员(打印并签名) :1. 邹高永 2. 张大伟 3. 钱晓东 指导教师或指导教师组负责人(打印并签名): 日期:年月日赛区评阅编号(由赛区组委会评阅前进行编号):

2011高教社杯全国大学生数学建模竞赛 编号专用页 赛区评阅编号(由赛区组委会评阅前进行编号): 赛区评阅记录(可供赛区评阅时使用): 评 阅 人 评 分 备 注 全国统一编号(由赛区组委会送交全国前编号): 全国评阅编号(由全国组委会评阅前进行编号):

商人过河 摘要 本文针对商人安全渡河的问题,采用多步决策的过程建立数学模型,求解得到了在随从没有杀人越货的情况下的渡河方案。 对于本题而言,在3名商人、3名随从、船的最大容量为2的情况下,首先定义了渡河前此岸的状态,并设安全渡河条件下的状态集定义为允许状态集合,接着得到渡河方案的允许决策集合,然后得到状态随渡河方案变化的规律,最后利用平面坐标分析法,并利用计算机进行了仿真,得到了一种商人安全渡河的方案。 但是,本文不仅仅是为了拼凑出一个可行方案,而是希望能找到求解这类问题的规律性,并建立数学模型,用以解决更为广泛的问题。基于此目的,利用了dijkstra算法,得到最短路径的最优解。但同时由于该算法遍历计算的节点很多,所以效率低,而且当有多个最短距离时,不能够将所有符合条件的情况逐一列出。 最后,从这类问题解得趣味性、合理性进行了深入讨论,得到了“传教士与野蛮人渡河”,“印度夫妻渡河”等问题通用的模型,并将其进行了推广。这也是本文的一大特色。 关键词渡河问题状态集合决策集合平面坐标dijkstra算法

最新商人过河的数学模型及编程解决

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

摘要:M对商仆过河,一只船最多载N人,船上和岸上的仆人数都不能多于商人数,否则商人有危险。安排合理的渡河方案,保证商人能安全渡河。(可利用向量,矩阵,图解等方法) 一.问题提出: 有M对商仆乘船过河,一只船最多载N人,由商人和仆人自己划船渡河,在河的任意一岸,一旦仆人数多于商人数,仆人就可将商人杀死,谋取利益,但是乘船渡河的主动权掌握在商人们手中,商人们如何安排渡河方案,才能安全渡河? 二.假设: 商人和仆人都会划船,天气很好,无大风大浪,船的质量很好,船桨足够很多次的运载商人和仆人。 三.参数: 1.设(x,y)是状态向量,表示任一岸的商人和仆人数,并且x,y分别要大于等于0,小于等于M。 2.设(m,n)是运载向量,表示运载的商人数和仆人数,0<=m<=N,0<=n<=N,0<=m+n<=N。 3.设用s表示所有的可取状态向量的集合。 4.设用d表示所有运载向量的集合。 5.设用表示从此岸到彼岸,作减;用表示从彼岸到此岸,作加。Sk:表示第k步可取状态向量(sk

属于s);dk:表示第k步可取转移向量(dk属于 d); 四.问题分析: 商仆安全渡河问题可以视为一个多步决策过程,多步决策是指决策过程难以一次完成,而是多步优化,最后获取一个全局最优方案的决策方法。对于每一步,即船由此岸驶向彼岸,或者船由彼岸驶向此岸的决策,不仅会影响到该过程的效果,而且还会影响到下一步的初始状态,从而对整个过程都会有影响。所以,在每一次过河时,就不能只从这一次过河本身考虑,还要把它看成是整个过河过程中的一个部分。在对船上的人员做决策时,要保证两岸的商人数不能少于仆人数,用最少的步伐是人员全部过河。应用状态向量和运载向量,找出状态随运载变化的规律,此问题就转化为状态在允许范围内(即安全渡河条件),确定每一次该如何过河,从而达到渡河的目标。现在我们都把它们数量化:即用数学语言来表示。 我们以3名商人为例 设第k次渡河前此岸的商人数为x k,随从数为y k,k=1,2,…,x k,y k =0,1,2,3,将二维向量S k = (x k,y k)定义为状态。安全渡河条件下的状态集合称为允许状态集合,记为S,则允许状态集合为:

商人过河问题

商人过河问题 一、三名商人各带一名随从的情况 1.问题(略) 2.模型假设 ①当一边岸满足随从数大于商人数,但商人数为0时仍为一种安全状 态; ②小船至多可容纳2人,且渡河时由随从(或者商人)来划船。 3.分析与建模 商人过河需要一步一步实现,比如第一步:两个仆人过河,第二步:一个仆人驾船回来,第三步:又是两个仆人过河,第四步:…… 其中每一步都使当前状态发生变化,而且是从一种安全状态变为另一种安全状态。如果我们把每一种安全状态看成一个点,又如果存在某种过河方式使状态a变到状态b,则在点a和点b之间连一条边,这样我们把商人过河问题和图联系起来,有可能用图论方法来解决商人过河问题。 建模步骤:⑴首先要确定过河过程中的所有安全状态,我们用二元数组(,) x y 表示一个安全状态(不管此岸还是彼岸),其中x表示留在此岸的主人数,y表示留在此岸的随从数。两岸各有十种安全状态: (0,0),(0,1),(0,2),(0,3),(2,2),(1,1),(3,0),(3,1),(3,2),(3,3) ⑵在两岸的安全状态之间,如存在一种渡河方法能使一种状态变为另一种 安全状态,则在这两种状态之间连一条边。这样,得到如下一个二部图(图1),其中下方顶点表示此岸状态,上方顶点表示彼岸状态。我们的目的是要找出一条从此岸(3,3)到彼岸(0,0)的最短路。 ⑶观察发现此岸的状态(0,0),(3,0)和彼岸的状态(0,3),(3,3)都是孤立点,在求最短路的过程中不涉及这些点,把它们删去。两岸的点用1,2, (16) 新标号。 (3,3)(3,2)(3,1)(3,0)(1,1)(2,2)(0,3)(0,2)(0,3)(0,0) ○②④⑥⑧⑩○○12○14○16 ①③⑤○⑦⑨○11○13○15○ (3,3)(3,2)(3,1)(3,0)(1,1)(2,2)(0,3)(0,2)(0,3)(0,0)

数学建模作业(商人过河问题)

数学建模作业(四)——商人过河问题 一.问题描述 有四名商人各带一名仆人过河,但船最多能载二人,商人已获得仆人的阴谋:在河的任一岸,只要仆人数超过商人数,仆人会将商人杀死并窃取财物且安排如何乘船的权力掌握在商人手中。试为商人制定一个安全过河的方案。 二.解决方案 用递归的源程序如下: 开始时商人,强盗所在的河的这边设为0状态,另一边设为1状态(也就是船开始时的一边设为0,当船驶到对岸是设为1状态,在这两个状态时,都必须符合条件) #include struct node /*建立一个类似栈的数据结构并且可以浏览每一个数据点*/ { int x; int y; int state; struct node *next; }; typedef struct node state; typedef state *link; link PPointer1=NULL; link PPointer2=NULL; int a1,b1; int a2,b2; /*栈中每个数据都分为0,1状态*/ void Push(int a,int b,int n) { link newnode; newnode=(link)malloc(sizeof(state)); newnode-> x=a; newnode-> y=b; newnode-> state=n; newnode-> next=NULL; if(PPointer1==NULL) {

PPointer1=newnode; PPointer2=newnode; } else { PPointer2-> next=newnode; PPointer2=newnode; } } void Pop() /*弹栈*/ { link pointer; if(PPointer1==PPointer2) { free(PPointer1); PPointer1=NULL; PPointer2=NULL; } pointer=PPointer1; while(pointer-> next!=PPointer2) pointer=pointer-> next; free(PPointer2); PPointer2=pointer; PPointer2-> next=NULL; } int history(int a,int b,int n) /*比较输入的数据和栈中是否有重复的*/ { link pointer; if(PPointer1==NULL) return 1; else { pointer=PPointer1; while(pointer!=NULL) { if(pointer-> x==a&&pointer-> y==b&&pointer-> state==n) return 0;

商人过河问题的Java编程解决

商人过河问题的Java编程解决 转自:“电脑编程技巧与维护”https://www.360docs.net/doc/3b1080013.html,/摘要为商人过河问题建立数学模型,归结为路径搜索问题,并给出一个通用的Jav程序来解决此类问题。 关键词商人过河,二元组,链表,集合 一、描述 商人过河问题是一个传统的智力问题。其描述如下:三名商人各带一名随从乘船渡河,—只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船渡河的大权掌握在商人们手中,商人们怎样才能安全渡河呢? 商人过河问题可以看作一个多步决策过程,通过一系列决策步骤逼近决策目标,并最终达到决策目标。对于该问题的每一步决策,就是要对船由此岸驶向彼岸或由彼岸驶回此岸的人员(包括商人和随从)作出规划,在保证商人安全的前提下,通过有限的步骤,实现人员全部过河的目标。 二、分析 针对这一具体问题,可以经过一番精心安排,找到一个解决方案。不过,本文希望对这一问题进行发展和延伸,建立起数学模型,发现其中蕴含的规律,并借助计算机的运算能力,找到一个通用的一般解法。 在商人过河问题中,用一个二元组来表示岸上商人和随从的组成(m,s),其中m表示商人人数,s表示随从人数,每个组合可以视为一种状态。所有可能的状态可以表示为集合: S0={(m, s)|0≤m≤3; 0≤s≤3} 安全状态要求商人人数为0,或者大于等于随从人数,因此,所有的安全状态可以表示为集合: S1={(m, s)| m=0, s=0,1,2,3; m=3, s=0,1,2,3; m=s=1,2} 二元组(m,s)也可以表示一次渡河方案,其中m表示船载的商人人数,s表示船载的随从人数。则所有的渡河方案可以表示为集合: S2={(m , s)|0≤m;0≤s;0≤m+s≤2 } 一次渡河决策可以表示为: (m, s)K+1 = (m , s)K - (-1)K(u, v)K K = 0,1,2,3… (m , s)K为第K次渡河时,岸上的商人和随从的组成,(u, v)K为第K次渡河方案,K从0开始。 整个决策方案就是要找到有限步渡河决策,使商人和随从的人数组成从原始状态(3,3),经由一系列中间的安全状态,迁移到最终状态(0,0)的过程。 三、编程 建立前面的数学模型后,即找到一条从状态(3,3)到(0,0)的路径,可以编写程序,利用计算机的计算能力,通过穷举法找到一条状态迁移路径。 1.类二元组 类Dual实现问题分析中提到的二元组,其主要代码如下: class Dual { int m, s;

相关文档
最新文档