商人过河问题

合集下载

商人过河问题数学建模

商人过河问题数学建模

作业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)可得44kk x y -≥- 化简得k k x y ≤综合(4)可得k k x y = 和 {}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)还要考虑 {}'(',')|'0,'0,1,2,3,4kk k k k S x y x y === (7) 把(2)(3)带入(7)可得{}(4,4)|40,40,1,2,3,4k k k k k S x y x y =---=-=化简得{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 综合(6)(7)(8)式可得满足条件的情况满足下式{}(,)|0,4,0,1,2,3,4;k k k k k k k S x y x y x y ==== (9)所以我们知道满足条件的点如上图所示:点移动由{}(,)|4,0,1,2,3,4k k k k k S x y x y === (8) 到达{}(,)|0,0,1,2,3,4k k k k k S x y x y === (6)时,可以认为完成渡河。

动态规划第7讲 - 商人过河问题

动态规划第7讲 - 商人过河问题

8.7 动态规划:商人过河问题问题提出三名商人各带一个随从乘船渡河(A岸到B岸)。

现此岸有一小船只能容纳两人,由他们自己划行。

若在河的任一岸随从人数比商人多,他们就可能杀人越货。

不过如何乘船渡河的大权由商人们掌握。

商人们怎样才能安全过河呢?模型建立此问题可视为一个多步决策模型建立决策变量:(a,b)a------船上的商人数b ------船上的随从数a,b的取值范围:{0,1,2}且满足a+b<=2,且均为整数。

允许决策集合:D={(a,b)|a+b=1,2}={(0,1), (0,2), (1,1), (1,0), (2,0)}模型求解这样问题要求由(3,3,1)变到(0,0,0)的一条道路。

根据题意,状态转移时要满足一定的规则:1. Z从1变为0与从0变为1交替进行(船在哪个岸);2. 当Z从1变为0时,即船从A岸到B岸,A岸人数减少1或2个;即(x,y,1)→(u,v,0)时, u≤x, v≤y, u+v=x+y-1 oru+v=x+y-23. 当Z从0变为1时,即船从B岸到A岸,A岸人数增加1或2个;即(x,y,0)→(u,v,1)时, u≥x, v≥y,u+v=x+y+1 oru+v=x+y+24. 不重复已出现过的状态,如(3,3,1)→(3,1,0)→(3,3,1);按照以上规则,求解过程如下从(3,2,0)只能到达(3,3,1)/*不必考虑*/从(3,3,1)出发(3,2,0)(3,1,0)如右图(2,2,0)(3,3,1)(3,2,0)(3,1,0)(2,2,0)从(3,1,0)出发(3,3,1) /*不必考虑*/(3,2,1)/*可取*/从(2,2,0)出发(3,3,1) /*不必考虑*/(3,2,1)/*可取*/模型求解如下图所示:逐步求解,可得:模型求解由此可得到渡河策略:(3,3,1) (3,2,1)→(3,0,0)→(3,1,1)→(1,1,0)→(2,2,1)→(0,2,0)→(0,3,1)→(0,1,0) (0,0,0)(2,2,0)(3,1,0)(1,1,1)(0,2,1)模型求解思考(1) 夫妻过河问题有三对夫妻要过河,船最多可载两人。

4名商人带4名随从安全过河

4名商人带4名随从安全过河

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次渡船上的随从数dk=(uk, vk)~决策,D={(u , v)| 1=<u+v=<2,uk, vk=0,1,2} ~允许决策集合 k=1,2,……因为k为奇数时船从此岸驶向彼岸,k为偶数时船从彼岸驶向此岸,所以状态Sk随决策dk的变化规律是Sk1=Sk+(-1)k dk~状态转移律求dk∈D(k=1,2, …n), 使Sk∈S, 并按转移律由S1=(4,4)到达状态Sn1=(0,0)。

五.模型求解:1.图解法:对于人数不多的情况,可以利用图解法来求解。

在xoy平面坐标系上画出如图所示的方格,方格点表示状态s=(x,y),允许状态集合S是圆点标出的13个格子点,允许决策dk是沿方格线移动1格或2格,k为奇数时向左、下方移动,k为偶数时向右、上方移动。

怎样安全渡河问题

怎样安全渡河问题

实验1 怎样安全过河问题一、问题3名商人各带1名随从乘船渡河,一只小船只能容纳2人,由他们自己划行。

随从们密约,在河的任一岸,一旦随从人数比商人多,就杀商人。

此密约被商人知道,如何乘船渡河的大权掌握在商人们手中,商人们怎样安排每次乘船方案,才能安全渡河呢?二、实验目的使学生进一步巩固和理解向量的定义、运算规则及多步决策理论及其应用。

三、预备知识向量定义及运算,多步决策理论。

四、实验内容与要求建立起商人安全渡河的数学模型,并给出商人们如何安全渡河的一个方案,使得渡河的次数尽量少。

五、思考问题在上述的约束条件下,若商人有4名时,问商人们是否能实现安全渡河?更一般地,若商人数是m,小船最多只能坐n(1〈n〈m〉人,m和n有何关系时,商人们才能实现安全渡河?问题解答一、问题分析与建立模型由于这个问题已经理想化了,所以不必再作假设。

这个问题可以看作一个多步决策的过程。

设第k次渡河前此岸的商人数为X K,随从数为Y K,k=1,2,…。

X K,Y K=0,1,2,3。

将二维向量S K=( X K,Y K)定义为状态。

安全渡河条件下的状态集合称为允许状态集合,记为S,则S={(x,y)|x=0或3,y=0,1,2,3;x=y=1,2} (1) 又设第k次渡船上的商人数为U K,随从数为V K,将二维向量D K=(U K,V K)定义为决策,则允许决策集合为:D={(u,v)|u+v=1,2} (2)因为k为奇数时船从此岸驶向彼岸,k为偶数时船由彼岸驶回此岸,所以状态S K随着决策D K变化的规律即状态转移规律是:S K+1=S K+(—1)K D K (3)这样,制定安全渡河方案归结为如下的多步决策问题:求决策D K∈D(k=1,2,…,n),使S K∈S按照转移律(3),由初始状态S1=(3,3)经有限步(设为n)到达状态S n+1=(0,0)。

二、计算过程下面通过Mathematica的程序给出这个多步决策问题的一个解,同时满足了渡河次数尽量少的条件。

商人过河问题

商人过河问题

商人安全过河摘要商人安全过河问题通过逻辑思索求解起来比较繁琐,而用建立数学模型并采用计算机编制算法进行求解就比较方便了,并且还容易推广。

本题为多步决策模型,每一次过河都是状态量的转移过程,转移即为决策,通过一步步决策使所有人员安全到达彼岸。

关键字:多步决策模型状态量的转移栈递归一、问题重述随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。

现有3名商人各带一个随从一起渡河一只船只能容纳两个人,但如何乘船渡河的大权掌握在商人的手里,商人怎样安排才能在有限步内安全渡河?数据及其关系?如何存储?过程中数据上的操作?操作过程中需借助什么结构实现?二、问题分析把商人过河问题视为一个多步决策的过程。

每一步即船由此岸驶向彼岸,都是对船上的人员(商人、随从)做出决策,在保证安全的前提下即两岸的商人数都不比随从少,用有限步使人员全部过河。

用状态变量表示某一岸的人员状况,决策变量表示船上的人员状况,可以找出状态随决策变化的规律。

这样商人过河问题就转化为在状态的允许变化范围内即满足安全渡河的条件下,确定每一步的决策,达到安全过河的目标。

三、模型假设1、在商人人数多于随从时乘船渡河的大权掌握在商人的手里;2、商人和随从都会划船。

四.符号说明记第k次过河前此岸的商人数为x k,随从数为y k,其中k=1,2,…,x k,y k=0,1,2,3,。

将二维向量S k=(x k,y k)定义为状态,满足安全条件下的状态集合称为允许状态集合S,则S={(x,y)}。

记第k次过河船上的商人数为u k,随从数为v k,将向量d k=(u k,v k)定义为决策,因为小船最多只能容两个人,即u+v=1,2,故允许决策的集合D为:D{(u,v)}。

因为k为奇数时,船是从此岸到彼岸,k为偶数时,船从彼岸驶回此岸。

解决商人过河问题就是求决策D,使得S按照状态转移率由初始状态(3,3)经过有限步到达状态(0,0)。

五、模型的建立与求解本题为多步决策模型,每一次过河都是状态量的转移过程。

【数学模型】商人们怎样过河?

【数学模型】商人们怎样过河?

问题引出问题:三名商人各带一个随从过河,一只小船只能容纳两个人,随从们约定,只要在河的任何一岸,一旦随从人数多于商人人数就杀人越货,但是商人们知道了他们的约定,并且如何过河的大权掌握在商人们手中,商人们该采取怎样的策略才能安全过河呢?这次的问题是一个很经常遇到的过河问题,其实对于该类问题,我们经过逻辑思考就可以得到答案。

但是通过数学模型的建立,我们可以得到一个通用的解答,并且通过计算机的计算我们可以大大扩大问题的规模。

问题分析因为这个问题已经理想化了,所以我们无需对模型进行假设,该问题可以看作一个多步决策问题。

每一步,船由此岸划到彼岸或者由彼岸划回此岸,都要对船上的人员进行决策(此次渡河船上可以有几名商人和几名随从),在保证安全(两岸的随从都不比商人多)的前提下,在有限次的决策中使得所有人都到对岸去。

因此,我们要做的就是要确定每一步的决策,达到渡河的目标。

建立模型记第k 次过河前此岸的商人数为x k , 随从数为y k, k = 1, 2, 3…, x k ,yk = 0, 1, 2, 3定义状态:将二维向量s k = ( x k , y k ) 定义为状态将安全渡河状态下的状态集合定义为允许状态集合,记为S = {(x,y) | x=0,y=0,1,2,3; x=y=1; x=y=2; x=3,y=0,1,2,3}记第k 次渡河船上的商人数为u k,随从数为v k定义决策:将二维向量d k = (u k , v k) 定义为决策允许决策集合记作D = {(u,v) | 1 ≤ u+v ≤ 2, u,v = 0,1,2}因为小船容量为2,所以船上人员不能超过2,而且至少要有一个人划船,由此得到上式。

由我们定义的状态s k和决策d k,我们可以发现它们之间是存在联系的:•k 为奇数是表示船由此岸划向彼岸,k 为偶数时表示船由彼岸划回此岸••状态s k是随着决策d k变化的,规律为:•s k+1 = s k + (-1)k d k我们把上式称为状态转移律,因此渡河方案可以抽象为如下的多步决策模型:求决策d k∈D(k = 1,2,…,n) , 使状态s k∈S 按照转移率,初始状态s1 = (3,3) 经有限步n 到达状态s n+1= (0,0)到这里,整个数学模型就已经非常清晰了,接下来要做的就是求解模型得出结果。

商人渡河问题实验心得

商人渡河问题实验心得
1、商人过河不用船,你说他傻吗?其实他是非常聪明的。

你想啊,这么多小木头要花几天才能做成一艘小木船,但假如把它们捆起来,就只需要半天时间,那样可以省下很大力气呀!
2、老板回来后问:“船哪儿去了?”大家抢着回答说被风吹走了……大家想:“既然没有船怎么渡河呢?于是大家合作开始造船,最终大功告成,但每个人都感觉好像少点什么似的,到底是什么呢?仔细观察,我发现所缺少的正是船上必备的——帆,有了帆,老板和工人们乘船出海也就变得方便了许多,再也不怕会遇见海啸啦!通过今天学习使我认识到:世界上无论干什么事情都要善于动脑筋,思考,才能取得进步;当遇到困难时,首先应该动脑筋想办法解决困难,千万不要鲁莽行事,否则将给自己带来危险。

3、在商店买东西,拿出100元钱交给售货员。

售货员拿过100元后,又将手伸向100元并放入盒子里,嘴巴还嘟囔着什么(此时同学看着她)。

接着售货员又从口袋中掏出另外两张百元钞票(她刚要把钱放回盒子内,同学注意了,由于速度太快,就在此刻同学迅速拿出胶带,粘住了她拿着的两张钞票。

而售货员因为站在凳子上,所以不幸摔倒,坐在地上)。

- 1 -。

商人渡河问题的有解性分析

商人渡河问题的有解性分析
商人渡河问题是一个传统的组合优化问题,它的出现非常有趣,令人瞩目。

商人渡河问题介绍了一个商人需要运输他的货物从一个地方到另一个地方,在这条旅途中他需要渡河。

商人拥有一艘小船,由于它的容量有限,只能分开运送,但它无法运送所有的货物,这个原因,他只好选择一些货物来渡河,而剩下的部分会有一端被留下。

商人渡河问题必须解决的是,商人怎样有效地把所有的货物运送到目的地。

商人渡河问题有解性取决于具体的商人设置的情况。

理论上,对于任何一个给定的商人设置条件,都应该有一个可行的解决方案使得商人能够成功地把货物运送到目的地。

一般来说,为了确保存在一组可行解,商人渡河问题有解性条件就是“不能够有三位商人或以上一起乘船”,“狼不能够单独船乘陆”,“羊不能够单独船乘陆”,“家长不能够离开他们的孩子”和“船不能够空投着划”,只有满足这些条件才能保证可行解的存在。

除此之外,基本的图算法也可以用来解商人渡河问题,如果问题复杂度较小,它是一种很好的算法。

此外,还有其他一些更加复杂的算法,如模型驱动的算法,如遗传算法,这些算法被用来对比测试复杂问题,查看它是否具有可行解决方案。

总的来说,商人渡河问题的可解性取决于具体的商人设置,一般来说,为了确保可行解的存在,商人渡河问题被限制在一定的条件之下,如果条件被满足,商人渡河问题有解性,如果复杂度较小,基本的图算法可以用来解决这个问题,如果复杂度较高,可以使用更加复杂的算法来寻找可行的解决方案。

商人过河问题数学建模c语言

商人过河问题数学建模c语言商人过河问题是一个经典的数学建模问题,通过建立数学模型,我们可以更深入地理解问题的本质,并找到最优的解决方案。

本文将通过C语言来实现这个问题的数学建模。

一、问题描述假设有n个商人要过河,每艘船只能承载一定数量的货物,而过河需要消耗一定的时间。

为了在最短的时间内完成过河任务,我们需要考虑商人的数量、船只的承载量以及过河的时间等因素,建立相应的数学模型。

二、数学建模1. 变量定义我们需要定义一些变量来描述过河过程中的各种因素,如商人的数量、船只的数量、船只的承载量、过河的时间等。

2. 算法设计算法的核心思想是利用贪心策略,尽可能多地利用船只,以减少过河的时间。

具体步骤如下:(1) 分配船只:根据船只的承载量,将商人分配到不同的船只上;(2) 计算过河时间:根据当前船只的位置和目标河岸的位置,计算每艘船只的过河时间;(3) 更新船只位置:根据过河时间,更新每艘船只的位置;(4) 重复以上步骤,直到所有商人过河。

3. C语言实现以下是一个简单的C语言程序,实现了上述算法:```c#include <stdio.h>#include <stdlib.h>int main() {int n, m, t, i, j, k;scanf("%d%d", &n, &m); // 输入商人数量和船只数量int cargo[n], time[n]; // 定义变量数组,用于存储商人和船只的信息scanf("%d%d", &cargo[0], &time[0]); // 输入第一个商人和他的过河时间for (i = 1; i < n; i++) { // 输入剩余商人和他们的过河时间scanf("%d%d", &cargo[i], &time[i]);}int boat[m]; // 定义船只数组,用于存储船只的承载量和位置信息for (j = 0; j < m; j++) { // 输入船只的承载量和位置信息scanf("%d", &boat[j]);}for (k = 0; k < n; k++) { // 模拟过河过程for (j = 0; j < m; j++) { // 遍历所有船只if (boat[j] >= cargo[k]) { // 如果船只承载量足够承载当前商人time[k] += time[k] / boat[j]; // 根据过河时间和船只速度计算剩余时间boat[j] += cargo[k]; // 将商人转移到指定位置的船只上break; // 如果找到了足够承载商人的船只,跳出当前循环继续下一轮操作}}}printf("%d\n", time[n - 1]); // 输出最后一个商人的过河时间return 0;}```三、总结通过上述C语言程序,我们可以实现商人过河问题的数学建模。

商人过河问题.


A (aij )nn 为 G 的邻接距阵,其中
1 aij 0
viv j E(G) viv j E(G)
i, j 1, 2, , n
定理 1:设 A(G) 为图 G 的邻接距阵,则 G 中从顶点 vi 到顶点 v j ,长度为 k 的道路的条
数为 Ak 中的 i 行 j 列元素.
证: 对 k 用数学归纳法 k 1 时,显然结论成立; 假设 k 时,定理成立, 考虑 k 1的情形.
其中 A 表示从南岸到北岸渡河的图的邻接距阵, B AT 表示从北岸到南岸渡河的图的
邻接距阵。
由定理 1、我们应考虑最小的 k ,s t ( AB)k A 中 1 行 10 列的元素不为 0,此时 2k 1
即为最少的渡河次数,而矩阵 ( AB)k A 中 1 行 10 列的元素为最佳的路径数目。
商人过河问题
三名商人各带一个随从乘船渡河,现有一只小船只能容纳两个人,由他们自己划行,若 在河的任一岸的随从人数多于商人,他们就可能抢劫财物。但如何乘船渡河由商人决定,试 给出一个商人安全渡河的方案。
首先介绍图论中的一个定理
G 是一个图,V(G)为 G 的顶点集,E(G)为 G 的边集。 设 G 中有 n 个顶点 v1, v2 , , vn ;
条,所以长为 k 1的从 vi 经 k 步到 vl 再一步到 v j 的道路共有 ai(lk) alj 条,故从 vi 经 k 1
n
步到 v j 的路径共有 ai(jk1)
a(k) il
alj
条.
l 1
下面分析及求解 假设渡河是从南岸到北岸,(m,n)表示南岸有 m 个商人,n 个随从,全部的允许状 态共有 10 个
v1 (3,3) v2 (3,2) v3 (3,1) v4 (3,(0,3) v8 (0,2) v9 (0,1) v10 (0,0)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

商人过河问题
摘要:
为了求解3个商人和3个随从的过河问题,用数学分析方法,建立
数学模型,并且加以求解,展示动态规划思想的应用步骤。

最后利用计算机编程进行求解,获得过河问题的完整求解过程;有效地求解类似多步决策问题的作用。

关键词:
多步决策计算机求解状态转移律图解法 MATLAB程序
一.问题提出
S个商人各带一个随从乘船过河,一只小船只能容纳K人,由他们自己划船。

商人们窃听到随从们密谋,在河的任意一岸上,只要随从的人数比商人多,就杀掉商人。

但是如何乘船渡河的决策权在商人手中,商人们如何安排渡河计划确保自身安全?
二.问题的关键
解决的关键集中在商人和随从的数量上,以及小船的容量上,该问题就是考虑过河步骤的安排和数量上。

各个步骤对应的状态及决策的表示法也是关键。

三.问题的分析
在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。

由于船上人数限制,这需要多步决策过程,必须考虑每一步船上的人员。

动态规划法正是求解多步决策的有效方法。

它要求把解的问题一层一层地分解成一级一级、规模逐步缩小的子问题。

直到可以直接求出其解的子问题为止。

分解成所有子问题按层次关系构成一棵子问题树.树根是原问题。

原问题的解依赖于子问题树中所有子问题的解。

四.模型假设
记第k次过河前A岸的商人数为XK,随从数为YK k=1,2,⋯ XK ,YK=0,1,2,3,将二维向量SK=(XK,YK)定义为状态.把满足安全渡河条件下的状态集合称作为允许状态集合。

记作S。

则 S={(XK ,YK)|(XK =0,YK =0,1,2,3),(XK =3,YK =0,1,2,3),(XK =YK =1)(XK =YK =2)}
记第k次过河船上的商人数为UK,随从数为VK将二维向量DK=(UK ,VK)定义为决策。

由小船的容量可知允许决策集合(记作D)为
D={(UK ,VK)|UK +VK=l,2}={(O,1);(O,2);(1,O);(1,1);(2,O)}
五.模型建立:
动态规划法正是求解多步决策的有效方法。

它要求把解的问题一层一层地分解成
一级一级、规模逐步缩小的子问题。

直到可以直接求出其解的子问题为止。

分解成所有子问题按层次关系构成一棵子问题树.树根是原问题。

原问题的解依赖于子问题树中所有子问题的解。

用动态规划法分析三名商人的过河问题。

可得如下的递归树
(注解:当K为奇数时,船在B岸;当K为偶数时,船在A岸。


通过分析该递归树,知道求解关键在于正确地写出基本的状态转移关系式和恰当的边界条件。

因为k为奇数时,船是从A岸驶向B岸,k为偶数时。

船是由B 岸驶回A岸。

所以状态SK随决策DK变化的规律是
SK+1=SK+(-1)K DK,k=l,2,⋯,
称之为状态转移律,这样,制定过河方案就归结为如下的多步决策问题:每一步,船由A岸驶向B岸或B岸驶回A岸,都要对船上的人员(商人UK,随从VK 各几人)作出决策,在保证安全的前提下即两岸的商人数XK都不比随从数YK少,用有限步使人员全部过河.用状态(变量)SK表示某一岸的人员状况,决策(变量)DK 表示船上的人员状况,可以找出状态SK随决策DK变化的规律.这样安全过河问题就转化为:
求决策DK∈D(k=1,2,……,n),使得状态SK∈S,按照状态转移律,由初始状态S1=(3,3),经有限步n到达状态SK+1=(O,O)。

模型建立:
SK+1=SK+(-1)KDK,k=l,2,3,其中DK ∈D={(UK ,VK)|UK +VK=l,2},{其中SK ∈(XK ,YK)|(XK=0,YK =1,2,3);(XK =3,YK=0,1,2,3);(XK =YK =1,2)},Sn+1 =(0,0)
这就是三个商人的过河问题模型。

六.模型求解:
穷举法:计算机编程(见附)
先建立编程的基本过程,然后考虑模型,再编写程序。

然后就可以得出结果了。

主程序流程图
图解法:状态s=(x,y) 16个格点
允许状态 10个●点
允许决策移动1或2格; k奇,左下移;
k偶,右上移.
总共需要11步
可以得出经过11步的渡河就能达到安全渡河的目标及满足渡河的次数尽量少的条件。

这11步的渡河方案就是上面程序运行结果中船上下面的一列。

七.模型的检验
用2名商人和2名随从的过河问题的解决思路,检验3名商人和3名随从的过河问题。

八.模型的拓展和延伸
通过三名商人和三名随从的过河问题的解决方案,可以进一步计算四名商人和四名随从的过河问题,通过计算机编程可以设计m名商人和n名随从的过河问题。

九.总结
这是通过数学分析的方法解决实用问题,经过问题提出、问题假设、问题分析、模型建立、模型求解、模型检验的过程,解决商人过河问题。

然后扩展延伸到n 个商人的问题。

学习数学建模以来,重新认识了学习数学的乐趣,也重新认识了数学,本以为数学是单调的,枯燥的,学习了之后,发现数学是普遍存在我们生活之中的。

解决现实中的问题,很多都需要数学。

沉浸在数学的世界里,发现学习是有趣的;相比于机械的认识各个组织器官,建立一个数学模型解决问题是十分有趣的。

参考文献:
(1)傅清祥.《数据结构与算法》.王晓东.北京:电子工业出版社 1998.(2)姜启瑟.《数学建模》(第二版).北京:高等教育出版社,2000.
(3)运筹学教材编写组.《运筹学》(修订版).北京:清华大学出版社。

2001。

相关文档
最新文档