数学建模研究商人过河问题

1 / 13 数学建模实验一报告

实验题目:研究商人过河问题

一、实验目的:编写一个程序(可以是C,C++或Mathlab)实现商人安全过河问题。

二、实验环境:Turbo c 2.0、Microsoft Visual C++ 6。0、Matlab 6.0以上

三、实验要求:要求该程序不仅能找出一组安全过河的可行方案,还可以得到所有的安全过河可行方案。并且该程序具有一定的可扩展性,即不仅可以实现3个商人,3个随从的过河问题.还应能实现

n个商人,n个随从的过河问题以及n个不同对象且每个对象有m个元素问题(说明:对于3个商人,3个随从问题分别对应于n=2,m=3)的过河问题。从而给出课后习题5(n=4,m=1)的全部安全过河方案。

四、实验步骤:

第一步:问题分析。这是一个多步决策过程,涉及到每一次船上的人员以及要考虑此岸和彼岸上剩余的商人数和随从数,在安全的条件下(两岸的随从数不比商人多),经有限步使全体人员过河.

第二步:分析模型的构成.记第k次渡河前此岸的商人数为kx,随从数为ky,2,1k,nyxkk2,1,,(具有可扩展性),将)(kkyx,定义为状态,状态集合成为允许状态集合(S)。S={2,1;3,2,1,0,3;3,2,1,0,0|,yxyxyxyx)(}记第k次渡船的商人数为ku,随从数为kv,决策为),(kkvu,安全渡河条件下,决策的集合为允许决策集合。允许决策集合记作D,所以D={2,1,0,,21|,vuvuvu)(|1<u+v〈2,u,v=0,1,2},因为k为奇数时船从此岸驶向彼岸,k为偶数时船由彼岸驶向此岸,所以状态ks随决策kd变化的规律是kkkkdss)1(1,此式为状态转移律。制定安全渡河方案归结为如下的多步决策模型:求决策)2,1(nkDdk,使状态Ssk按照转移律,由初始状态)3,3(1s经有限n步到达)0,0(1ns

第三步:模型求解。 2 / 13 #include "stdio.h”

#include ”string.h"

#include 〈memory>

#include

#include 〈iostream〉

using namespace std;

#include "conio.h"

FILE *fp;/*设立文件指针,以便将它用于其他函数中*/

struct a{

long m,s;

struct a *next;

};/*数组类型a:记录各种情况下船上的商人和仆人数,m:代表商人数 s:代表仆人数*/

struct a *jj,head;/*head为头指针的链表单元(船上的人数的各种情况的链表)*/

int n,total=0,js=0;/*total表示船上各种情况总数*/

struct aim {

long m1,s1,m2,s2;

int n;

struct aim *back,*next;};/*用于建立双向的指针链表,记入符合的情况,m1,s1表示要过岸的商人数和仆人数;m2,s2表示过岸了的商人数和仆人数,n表示来回的次数*/

int k1,k2;

void freeit(struct aim *p){

struct aim *p1=p;

p1=p->back;

free(p);

if(p1!=NULL)

p1->next=NULL;

return;

}/*释放该单元格,并将其上的单元格的next指针还原*/

int determ(struct aim *p)

{ struct aim *p1=p;

if(p->s1〉k2)return —1;/*仆人数不能超过总仆人数*/

if(p—>m1>k1)return -1;/*商人数不能超过总商人数*/

if(p—>s2>k2)return -1;/*对岸,同上*/

if(p—〉m2>k1)return -1;/*对岸,同上*/

if(p->s1〈0)return —1;/*仆人数不能为负*/

if(p—〉s2<0)return -1;/*商人数不能为负*/

if(p—>m1<0)return -1;/*对岸,同上*/

if(p->m2<0)return -1;/*对岸,同上*/

if(p-〉m1!=0)

if(p->s1〉p—>m1)return -1; 3 / 13 if(p—>m2!=0)

if(p—>s2〉p->m2)return -1;/*两岸商人数均不能小于仆人数*/

while(p1!=NULL){

p1=p1-〉back;

if(p1!=NULL)

if(p1->n%2==p->n%2)

if(p1->s1==p->s1)

if(p1—〉s2==p->s2)

if(p1—>m1==p->m1)

if(p1->m2==p->m2)

return -1;}/*用于解决重复,算法思想:即将每次算出的链表单元与以前的相比较,若重复,则表示出现循环*/

if(p-〉s1==0&&p—>m1==0)

if(p—>n%2==0)return 1;

else return -1;/*显然如果达到条件就说明ok了*/

return 0;}/*判断函数*/

int sign(int n){

if(n%2==0)return -1;

return 1;}/*符号函数*/

void copyit(struct aim *p3,struct aim *p){

p3—>s1=p-〉s1;

p3->s2=p—>s2;

p3—>m1=p-〉m1;

p3—>m2=p-〉m2;

p3—〉n=p->n+1;

p3—>back=p;

p3->next=NULL;

p->next=p3;

}/*复制内容函数,将p中的内容写入p3所指向的链表单元中*/

void print(struct aim *p3){

struct aim *p=p3;

js++;

while(p->back){p=p—>back;}

printf(”\n第%d种方法:\n",js);

fprintf(fp,"\n第%d种方法:\n",js);

int count=0;

while(p){ printf("%ld,%ld::%ld,%ld\t",p->m1,p—>s1,p—〉m2,p->s2);

fprintf(fp,"%ld,%ld::%ld,%ld\t”,p—〉m1,p—>s1,p—>m2,p—>s2);

p=p-〉next;

count++;

} 4 / 13 cout〈<”一共有"<<count<<"步完成"〈〈endl;

}/*打印函数,将p3所指的内容打印出来*/

void trans(struct aim *p){

struct aim *p3;/*p3为申请的结构体指针*/

struct a *fla;

int i,j,f;

fla=&head;

p3=(struct aim *)malloc(sizeof(struct aim));

f=sign(p—〉n);

for(i=0;i〈total;i++){

fla=fla—〉next;

copyit(p3,p);

p3-〉s1-=fla—>m*f;

p3—>m1—=fla->s*f;

p3-〉s2+=fla-〉m*f;

p3->m2+=fla—>s*f;/*运算过程,即过河过程*/

j=determ(p3);/*判断,j记录判断结果*/

if(j==—1){

if(i<total—1){continue;}

else{

freeit(p3);

break;}}

int count1=0;

if(j==1){if(i<total-1){print(p3);

count1++;ﻩ

continue;}

else{print(p3);

freeit(p3);

break;}

//cout<<cout1<

printf("%d",count1);

printf(”\n”);

}

if(j==0)trans(p3);

}

return;

}/*转移函数,即将人转移过河*/

/*n=0*/

void main()

{ struct aim *p,*p1;int j,a,e,f;

struct a *flag;/*flag是用与记录头指针*/

; 5 / 13 if((fpt=fopen(”c:result。dat”,"w+"))==0){

printf("can't creat it\n");

exit(0);}

fp=fpt;

system(”cls");

printf(”问题描述:三个商人各带一个随从乘船过河,一只小船只能容纳X人,由他们自己划船.三个商人窃听到随从们密谋,在河的任意一岸上,只要随从的人数比上人多,就杀掉商人。但是如何乘船渡河的决策权在商人手里,商人们如何安排渡河计划确保自身安全?\n”);

printf("\n");

p=(struct aim *)malloc(sizeof(struct aim));

p-〉back=NULL;

p->next=NULL;

p->s2=0;

p—〉m2=0;

p—〉n=1;/*设立初始头指针*/

printf("please input the total of people on the board\n");

fprintf(fp,"\n请输入船上的人数\n");

scanf(”%d",&n);

fprintf(fp,"\n%d\n",n);

flag=&head;

for(e=0;e〈=n;e++)

for(f=0;f<=n;f++)

if(e+f>0&&e+f〈=n)

{ total++;

jj=(struct a*)malloc(sizeof(struct a));

jj->m=e;

jj-〉s=f;

flag—〉next=jj;

jj—〉next=NULL;

flag=jj;

}

/*********************************/

printf("please input the total of merchant and salvent as follow: mechant,salvent;\n");

fprintf(fp,"\nplease input the total of merchant and salvent as follow: mechant,salvent;\n”);

scanf("%ld,%ld",&p->m1,&p—〉s1);

fprintf(fp,"\n%ld,%ld\n",p->m1,p->s1);

/**********************************/

k1=p->m1;

k2=p->s1;

合集下载

数学建模:抢渡长江

数学建模:抢渡长江

抢渡长江

摘要:

渡河问题在实际生活中十分常见,怎样选择渡河方向以及怎样更多的节省时间,同时又能抵达目的地,那么渡河速度(大小方向)的选择是十分关键的,在此又由于诸多因素的影响(河流的水流速度,运动员体能,风向,水温等)致使要求我们作出合理的规划。

本文通过适当的假设,从不同层次作了多方面分析,排除了一些偶然因素的影响,把游泳者抵达目的地的最小时间作为目标,通过简化的数学模型进行求解抢渡长江这一问题。主要运用三角函数、运动的等时性、速度的合成与分解、线性关系、解三角形知识、积分知识以及借助MATHEMATICA数学软件进行求解。

最后,我们对模型的优缺点进行了分析,并给出了抢渡长江的推广和运用。

关键词:抢渡长江 运动等时性 线性关系 三角函数 MATHEMATICA

积分求解 数学模型

问题重述:

“渡江”是武汉城市的一张名片。早从1934年,武汉市就曾举行大型渡江比赛,随后好几年都一直延续这个比赛。由于水情、水性的不可预测性,这种竞赛更富有挑战性和观赏性。现就如何根据自身情况最大效率地渡过河建成一个数学模型。

假设在竞渡区域两岸为平行直线, 它们之间的垂直距离为 1160 米, 从武昌汉阳门的正对岸到汉阳南岸咀的距离为 1000 米,见示意图。

通过数学建模来分析上述情况并回答:

1. 假定在竞渡过程中游泳者的速度大 小和方向不变,且竞渡区域每 点的流速

均为 1.89米/秒。试说明2002 年第一名是沿着怎样的路线前进的,求她游泳速度的大小和方向。如何根据游泳者自己的速度选择游泳方向,试为一个速度

能保持在1.5 米/秒的人选择游泳方向,并估计他的成绩。

2、在(1)的假设下,如果游泳者始终以和岸边垂直的方向游, 他(她)们能否到达终点?根据数学模型说明为什么 1934 年 和2002 年能游到终点的人数的百分比有如此大的差别;给出能够成功到达终点的选手的条件。

3、若流速沿离岸边距离的分布为 :

最新商人过河matlab程序以及解析

最新商人过河matlab程序以及解析

精品文档

精品文档

重庆大学

(商仆过河模型)

开课课程:数学模型

指导教师:黄光辉

小组成员:庄楚斌(20134760)自动化07班

张俊铭(20133227)材料加工01班

吴慧(20131966)数学01班

时间:2015年3月8日

精品文档

精品文档 一、问题提出

3名商人带3名随从乘一条小船过河,小船每次只能承载至多两人。随从们密约, 在河的任一岸, 一旦随从的人数比商人多,

就杀人越货.乘船渡河的方案由商人决定,商人们如何才能安全渡河呢?

二、问题分析

商人与随从过河问题可以视为是一个多步决策的过程,通过多次优化,从而得到一个全局最优的决策方案。决策的每一步,即船从此岸到达彼岸,都要对船上的商人和仆人数做出决策。在保证河的任一岸均有商人数比随从人数多和小船每次最多只能承载两人的前提下,经有限步使所有人员到达彼岸。

三、模型假设

商人和随从都会划船,天气很好,无大风大浪,且船的质量很好,可以保证很多次安全的运载商人和随从。

四、模型建立

kx~第k次渡河前此岸的商人数,ky~第k次渡河前此岸的随从数

kx, ky=0,1,2,3; k=1,2,… …

kS=(kx, ky, ck )~过程的状态,其中kx, ky, ck 分别表示对应时刻此精品文档

精品文档 岸的商人,仆人数以及船的行进方向,其中c取值1表示即将向彼岸运行,为0表示即将向此岸运行

S ~ 允许状态集合,S={(x , y)| x=0, y=0,1,2,3; x=3 ,y=0,1,2,3; x=y=1,2}

ku~第k次渡船上的商人数

kv~第k次渡船上的随从数

kd=(ku, kv)~决策,D={(u , v)| 21vu,ku, kv=0,1,2} ~允许决策集合

k=1,2,… …

因为k为奇数时船从此岸驶向彼岸,k为偶数时船从彼岸驶向此岸,所以状态kS随决策kd的变化规律是

1kS=kS+k)1(kd~状态转移律

人猫鸡米渡河问题的数学模型

人猫鸡米渡河问题的数学模型

1

人猫鸡米渡河问题的数学模型

摘要:人带着猫、鸡、米过河,从左岸到右岸,船除了需要人划之外(船除了要载人外),只能载猫、鸡、米三者之一,而当人不在场时猫要吃鸡、鸡要吃米。本文将设计一个安全过河方案,使渡河次数尽量地少。模仿“商人过河”的模型设计出新的数学模型。

关键字:穷举法,Matlab运算求解。

一、问题的提出

课本P19.T5: 模仿“商人过河”模型,做下面游戏:人带着猫、鸡、米过河,船除需要人划之外,至多能载猫、鸡、米三者之一,而当人不在场时猫要吃鸡、鸡要吃米。设计一个过河方案,建立数学模型,并使渡河次数尽量地少。

二、问题的分析

因为这是个简单问题,研究对象少,所以可以用穷举法,简单运算即可解题。

此问题是从状态向量A(1,1,1,1)经过奇数次运算向量B变为状态向量A(0,0,0,0)的状态。转移过程为什么是奇数次?我们注意到过河有两种,奇数次的为从左岸到右岸,而偶数的为右岸回到左岸,因此得到下述转移过程,所以最后应该是过河完成时状态转移数为奇数次。

三、问题的假设

1.1:假设船除了载人之外,至多只能载猫、鸡、米三者之一。

1.2:当人不在场时,猫一定会吃鸡、鸡一定会吃米。

四、定义符号说明:

我们将人,猫,鸡,米依次用四维向量中的分量表示,当一物在左岸时,相应的分量2

记为1,在右岸时记为0.如向量(1,0,1,0)表示人和鸡在左岸,猫和米在右岸,并将这些向量称为状态向量。例如(1,1,1,1)表示它们都在左岸,(0,1,1,0)表示猫,鸡在左岸,人,米在右岸;由于问题中的限制条件,有些状态是允许的,有些状态是不允许的。凡问题可以允许存在的状态称为可取状态。A向量定义为状态变量。比如11,0,1,0A是一个可取状态向量,但20,0,1,1A是一个不可取状态向量。此外,B向量定义为运载变量。把每运载一次也用一个四维向量来表示。如11,1,0,0B表示人和猫在船上,而鸡和米不在船上,这自然是可取的运载,因为船可载两物,而21,0,1,1B则是不可取运载,依此规律类推。

数学建模复习题

数学建模复习题

数学建模复习题

1.把下⾯的线性规划问题化为对偶形式

32132min x x x S +-=

≥≥-=++-≤-+≥+-⽆⾮负限制

3213213

21321,0,022203282x x x x x x x x x x x x

1.把下⾯的线性规划问题化为标准形式

32132min x x x S +-=

≥≥-=++-≤-+≥+-⽆⾮负限制

3213213

21321,0,022203282x x x x x x x x x x x x

2某⼤学⽣毕业在即,有三个单位A,B,C 可选择,假设他主要考虑如下因素:(1)单位⼯资待遇,(2)单位所在城市,(3)继续深造条件(4)发展条件(5)专业爱好。试建⽴层次结构模型,并叙述层次分析的基本步骤。2.如果要对美、俄、中、英、法、⽇、德等⼤国的国家综合势⼒进⾏分析判断,请你⽤层次分析法从国民收⼊、军事⼒量、科技⽔平、社会稳定、对外贸易五⽅⾯建⽴个层次结构模型来描述此问题,并写出基本步骤。3在培养细菌的实验中,细菌的增长率与总数成正⽐。如果细菌总数在24⼩时内由100增⾄800,那么前48⼩时后总数是多少?1.在椅⼦放稳问题的数学模型中,假设四脚连线呈正⽅形,试构造模型并求解

1.在椅⼦放稳问题数学模型的假设条件中,将四脚连线呈正⽅形改为呈长⽅形,其余不变,试构造模型并求解

2⽤单纯形求解

213max x x S +=

≥≤≤+0,6822

1121x x x x x

2.家具公司⽣产桌⼦和椅⼦,⽤于⽣产的全部劳动⼒共计450个⼯时,原料是400个单位的⽊材,每张桌⼦要使⽤15个⼯时的劳⼒,20个单位的⽊材,售价80元。每把椅⼦使⽤10个⼯时,⽤材5个单位,售价45元。问为达到最⼤收益,应如何安排⽣产?2.左图是某新建公园的游览路线平⾯图,如果让你设计公园的⼊⼝和出⼝,你把它们设在什么位置,并说明理由。

下图是⼀个线路⽹,连线上的数字表⽰两点之间的距离,寻找⼀条由A 到E 的路线,使得总距离最短.

夫妻过河问题数学建模

夫妻过河问题数学建模

- 1 - 夫妻过河问题数学建模

本文将通过数学建模的方式探讨一个经典的夫妻过河问题。假设一对夫妻要过一座桥,桥只能容纳两人同时过,而且必须有灯光才能行走。由于这条桥非常危险,过桥时必须有一人持灯引路,因此夫妻需要一只手电筒。另外,两人的行走速度不同,A走过桥需要1分钟,B走过桥需要2分钟。夫妻过桥的时间就是指两人中走得比较慢的那个人的时间。

假设夫妻已经在桥的一侧,他们需要想办法尽快过桥。设计一个数学模型,求出夫妻最短需要多少时间才能过桥。

首先,我们可以列出如下的约束条件:

1. 夫妻需要一只手电筒才能过桥。

2. 桥只能容纳两人同时过,因此在一侧等待的人需要等到另一侧的人走完才能过桥。

3. 每次过桥时,需要有一人持灯引路。

基于以上条件,可以得到如下的模型:

1. 假设A和B分别为夫妻的两个人,t为他们过桥的时间。

2. 如果A先走,那么B需要等待A过完桥后再过桥。此时,总时间为2t+1。

3. 如果B先走,那么A需要等待B过完桥后再过桥。此时,总时间为3t+1。

4. 因此,夫妻最短需要时间为2t+1和3t+1中的较小值。

5. 对于这个问题,我们可以通过求解二次函数的极值来得到最 - 2 - 短时间。

通过求解,可以得到最短时间为4分钟。也就是说,夫妻需要在4分钟内过桥,否则就不能保证安全。

综上所述,通过数学建模的方式,我们可以探讨夫妻过桥问题,进而求解最短时间。这种数学建模的方法在实际生活中也有很大的应用价值,可以有效地解决一些实际问题。

《数学建模》实验指导书

《数学建模》实验指导书

数学与计算机科学学院

《数学建模》实验指导书

2011年9月1日

目录

实验一 “商人们安全过河”的MATLAB程序 ................. 1

实验二 初等模型求解 .................................... 2

实验三 数学规划模型求解 ................................ 3

实验四 微分方程模型求解 ................................ 4

实验五 离散模型求解 .................................... 5

实验六 统计回归模型的求解 .............................. 7

附件:《数学建模》实验报告 ............................... 9

实验一“商人们安全过河”的MATLAB程序

一、实验目的

复习Matlab编程;掌握编写简单的Matlab程序,掌握条件、循环和选择三种语句的用法。

二、实验类型:设计

三、实验环境

计算机、软件Matlab7.0以上的环境

四、实验内容

1. 建立M-文件:已知函数2110()10112xxfxxxx计算(1),(0.5),(1.5)fff,并作出该函数的曲线图。

2. 编写利用顺序Guass消去法求方程组解的M-函数文件,并计算方程组123111112202111xxx的解

3. 编写“商人们安全过河”的Matlab程序

五、实验总结

根据实验操作和实验报告要求,完成实验报告;

实验二初等模型求解

一、实验目的

学会使用Matlab软件进行一维插值、二维插值运算,会进行多项式拟合、一般非线性拟合。

二、实验类型:验证

三、实验环境

计算机、软件Matlab7.0以上的环境

商人过河matlab程序以及解析

商人过河matlab程序以及解析

The latest revision on November 22, 2020 数学建模作业班级:数学131

姓名:丁延辉

学号:

(二)商人过河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;%用于在后面判断是否找到答案

whilek>0%保持k>0

ifm(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)是否符合限定情况

forj=1:k%判断是否此岸a,b,c与之前有重复,如果是,结束此次循环,重新选择乘船方案

人、猫、鸡、米安全过河问题

实验一 人、猫、鸡、米安全过河问题

摘要:人带着猫、鸡、米过河,除了需要人划船外船至多能载猫、鸡、米三者之一。而当人不在场时,猫吃鸡,鸡吃米。请设计一个过河方案,使人、猫、鸡、米安全渡过河。

一、问题的重述

人带着猫、鸡、米过河,船触需要人划之外,至多能载猫、鸡、米三者之一,而当人不在场时猫要吃鸡、鸡要吃米。试设计一个安全过河方案,并使渡河次数尽量地少。

二、基本假设及符号说明

基本假设:

(1)当人不在场的时候,动物在没有可以吃的东西时是不会离开的。

符号说明:

人、猫、鸡、米分别记为4,3,2,1i,

当i在此岸时记1ix,否则记0ix,则此岸的状态可用4321,,,xxxxs表示。记s的反状态为4321'1,1,1,1xxxxs,

决策为乘船方案,记作4321,,,uuuud,当i在船上时记1iu,否则记0iu,

记第k次渡河前此岸的状态为ks,第k次渡河的决策为kd,

三、 问题分析

安全过河问题可以看着是一个多部决策的过程。每作出一步决策,都必须保证船、人、猫、鸡、米能满足题设条件。否则,不仅难以实现过河的最优化,而且还容易出现事物的不安全性。因此,在保证安全的前提下,即猫、鸡在一起时,人要在场,鸡、米在一起时,人也要在场,用状态变量s表示某一岸的状况,决策变量d表示是乘船方案,我们容易得到s和d的关系,其中问题的转化要在允许变化范围内,确定每一步的决策关系,从而达到渡河的最优目标。

四、模型的建立

建立模型:

人、猫、鸡、米分别记为4,3,2,1i,当i在此岸时记1ix,否则记0ix,则此岸的状态可用4321,,,xxxxs表示。记s的反状态为4321'1,1,1,1xxxxs,允许状态集合为

0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1S (1)

商人过河问题数学建模

做业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)

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

1 / 4

基于商人过河游戏的数学建模

1提出问题

文献[1]给出一个智力游戏:“三名商人各带一个随从渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船的大权掌握在商人们手中。商人怎样才能安全渡河呢?”此类智力问题当然可以通过一番思考,拼凑出一个可行的方案来。文献[1]中通过图解法给出了解答,但是当商人数与随从数发生变化,船能容纳的人数不是二人时,图解法就会变得繁复而难以解决问题。

因此,将上述游戏改为n名商人各带一个随从过河,船每次至多运p个人,至少要有一个人划船,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。

但是如何乘船的大权掌握在商人们手中。商人怎样才能安全渡河的问题。

除此之外,考虑了随着船载人数的增多,以及商人与仆人的对数增多到多少时,会影响商人的安全渡河的问题。

2问题分析

由于这个虚拟的游戏已经理想化了,所以不必再作假设。我们希望能找出这类问题的规律性,建立数学模型,并通过计算机编程进行求解。安全渡河游戏可以看做是一个多步决策过程,分步优化,船由此岸驶向彼岸或由彼岸驶回此岸的每一步,都要对船上的商人和随从做出决策,在保证商人安全的前提下,在无限步内使全部人员过河。用状态表示某一岸的人员状况,决策表示船上的人员情况,可以找出状态随决策变化的规律。问题转化为在状态的允许范围内,确定每一步的决策,最后获取一个全局最优方案的决策方案,达到渡河的目标。

除此以外,我们还要找出,随着船载人数的增加,商人与仆人对数达到多少时,会影响到商人不能安全过河。这里要对船载人数进行限制,因为船载人数过多时,此智力游戏会变得相当繁复,就会失去作为游戏的本来意义。

3模型构成

2 / 4

记第k次渡河前此岸的商人数为,随从数为,,,。

将二维向量定义为过程的状态。

安全渡河条件下的状态集合称为允许状态集合,记作S。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档