精品文档
数学建模实验一报告
实验题目?/p>
研究商人过河问题
一、实验目的:
编写一个程序(可以?/p>
C,C++
?/p>
Mathlab
)实现商人安全过?
问题?/p>
二、实验环境:
Turbo c 2.0
?/p>
Microsoft Visual C++ 6.0
?/p>
Matlab 6.0
以上
三、实验要求:
要求该程序不仅能找出一组安全过河的可行方案,还可以?
到所有的安全过河可行方案?/p>
并且该程序具有一定的可扩展性,
即不仅可以实?/p>
3
个商人,
3
个随从的过河问题。还应能实现
n
个商人,
n
个随从的过河问题以及
n
个不同对象且每个对象?/p>
m
个元素问?/p>
(
?/p>
明:
对于
3
个商人,
3
个随从问题分别对应于
n=2,m=3)
的过河问题?/p>
从而给出课
后习?/p>
5
?/p>
n=4,m=1
)的全部安全过河方案?/p>
四、实验步骤:
第一步:问题分析。这是一个多步决策过程,涉及到每一次船上的人员以及
要考虑此岸和彼岸上剩余的商人数和随从数?/p>
在安全的条件?/p>
(两岸的随从数不
比商人多?/p>
,经有限步使全体人员过河?/p>
yx
?/p>
?/p>
记第
k
次渡河前此岸的商人数为随从数?/p>
第二步:
分析模型的构成?/p>
kk
x,y
定义为状态,状态集?/p>
x,y
?/p>
1,
?/p>
2
?
n
?/p>
?/p>
?/p>
(具有可扩展性)
,将
?
2k
?/p>
1,
kkkk
}
成为允许?/p>
态集?/p>
?/p>
S
?/p>
?/p>
S={
2
?/p>
1,10,,2,3;x
?/p>
yx0
?/p>
?/p>
x,y|x
?/p>
0,y
?/p>
,1,2,3;
?/p>
3,y
?/p>
v(u,v)u
?/p>
安全渡河条件下,
?/p>
随从数为记第
k
次渡船的商人数为,决策为
kkkk
决策的集合为允许决策集合。允
许决策集合记?/p>
D
?/p>
所?/p>
|1<u+v<2,u,v=0,1,2},
因为
k
为奇数时船从此岸
D={
2
?/p>
0,,1
?/p>
?/p>
|1
?/p>
u
?/p>
v2,u,vv
?/p>
u,ds
变化的规律是为偶数时船由彼岸驶向此岸,所以状态随决策?/p>
向彼岸,
k
kkk
d1)s
?/p>
(
?/p>
s
?/p>
,此式为状态转移律。制定安全渡河方案归结为如下的多?/p>
?/p>
k
?/p>
k1k
dD(k1,2n)
?/p>
按照转移律,由初始状态策模型:求决策
S
?/p>
?
s
?/p>
,使状?/p>
kk
s
?/p>
(0,0))3(,3
?/p>
s
步到达经有限
n
1n
?/p>
1
第三步:模型求解?/p>
#include stdio.h
精品文档?/p>
精品文档
#include string.h
#include <memory>
#include <stdlib.h>
#include <iostream>
using namespace std;
#include conio.h
FILE *fp;/*
设立文件指针,以便将它用于其他函数中
*/