数学建模实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学建模实验报告
班级:信息81
学号:07052023
姓名:杨帆
实验一:
实验题目:
有3名商人各带一个仆人乘船渡河,小船只能容纳两个人,由他们自己划船。仆人们约定,在河的一岸,一旦仆人的人数比商人多,就杀人越货。但是如何乘船的大权掌握在商人们手里。问商人们怎样才能安全渡河?
实验过程:
问题分析:
这是是一个多步决策问题。每一步,即船由此岸驶向彼岸或从彼岸回到此岸,都要对船上的商人和仆人的个数作出决策。在保证安全的前提下,在有限步内使全部人员过河。采用状态变量表示某一岸的人员状况,决策变量表示船上人员状况。可以找出状态随决策变化的规律,问题转化为在状态允许范围内(安全渡河的条件),确定每一步的决策,达到安全渡河的条件
1.建立数学模型:
1)允许状态集合S:安全渡河条件下的状态集合为允许的状态集合,记作S,依次用二维向量表示商人仆人的状态,设第k次渡河前左岸的商人数为x k,仆人数为y k,k=1,2,…,则状态变量为(x k,y k),其中x k,y k取值为0,1,2,3。容易知道该集合为
S={(0,0),(0,1),(0,2),(0,3),(3,0),(3,1),(3,2),(1,1),(2,2),(3,3)} ——(1.1) S共10种状态。每种安全状态既要满足左岸安全,同时右岸也要安全。
2)允许决策集(划船方式)D
记第k次渡河船上的商人数为u k,仆人数为v k,则决策变量为d k=(u k,v k)。允许的决策集合记为D,由船的容量可知D的集合为D={(2,0),(0,2),(1,1),(1,0),(0,1)} ——(1.2)
每次有5种决策可供选择。由于k为奇数时船从左岸到右岸,k为偶数时船从右岸到左岸,因此状态s k随决策d k而变化的规律为
S0=(3,3)
S k=s k-1+(-1)k d k,k=1,2,3…——(1.3)
式(1.3)称为状态转移规律。则制定安全的渡河方案问题转化为:由初始状态(3,3)出发,经奇数次上述运算转化为状态(0,0)的过程。并且步数n要求尽量小。
2.具体实验过程:
模型求解:采用三维向量(x,y,z)来表示状态量。X表示左岸商人数(x=0,1,2,3),y表示左岸仆人数(y=0,1,2,3),z表示船在左岸还是右岸(z=1表示船在左岸,z=0表示船在右岸)。则总共有20个状态,可以建立20个顶点的图。利用穷举法意欲在计算机上求解,如果计算过程中出现循环,则说明无解。
用状态向量表示(只表示左岸状态)如下:
(3,3) (3,1) (3,2) (3,0) (3,1) (1,1) (2,2) (0,2) (0,3) (0,1) (0,2) (0,0)
或者为
(3,3) (2,2) (3,2) (3,0) (3,1) (1,1) (2,2) (0,2) (0,3) (0,1) (0,2) (0,0)
共有两种步数最少的渡河方法。
标号船在左岸船在右岸标号
1 (3,3,1) (3,3,0) 11
2 (3,2,1) (3,2,0) 12
3 (3,1,1) 13
4 (3,0,1) (3,0,0) 14
5 (2,2,1) 15
6 (1,1,1) (1,1,0) 16
7 (0,3,1) (0,3,0) 17
8 (0,2,1) 18
9 (0,1,1) (0,1,0) 19
10 (0,0,1) (0,0,0) 20
图2状态转移图
图3
编写matlab程序如下:
a=[0,0;0,1;0,2;0,3;3,0;3,1;3,2;3,3;1,1;2,2];
d=[0,2;2,0;1,1;0,1;1,0];
s1=[3,3];
s2=[3,3];
ld=0;%上次决策
posable=1;
k=1;
clc;
while sum(s2)~=0
if posable==1
disp(s2);
end
s1=s2;
posable=0;
ind=0;
for m=1:5
if ind==1
break;
else
%p=(-1)^k;
%k为偶数时候的决策不应该和上次的一样,否则会形成死循环 if mod(k,2)==0
if ld==m
dd=mod(ld,5)+1;
s2=s1+d(dd,:);
dm=dd;%本次采用第dm个决策
else
s2=s1+d(m,:);
dm=m;%本次采用第dm个决策
end
else
s2=s1-d(m,:);
dm=m;%本次采用第dm个决策
end % end if mod(k,2)==0
end %end if ind==1
for n=1:10
if (s2(1,1)==a(n,1)) & (s2(1,2)==a(n,2))
ld=dm;%本次采用的第dm个决策是个可行决策
s=strcat('第',num2str(k));
s=strcat(s,'次采用的可行决策:');
s=strcat(s,num2str(d(ld,:)));
disp(s);
k=k+1;%决策次数
ind=1;%指示跳出for m=1:5循环
posable=1;%s2 属于a
break;
end %end if s(k+1,1)==a(n,1) & s(k+1,2)==a(n,2)
end %end for n=1:10
end %end for m=1:5
end %end while sum(s(k,:))~=0
disp(s2);
实验二:
实验题目:草原鼠患问题
在我国的内蒙古大草原,由于各种人为因素对自然生态系统的破坏(如过度放牧、大量消灭草原上的狼群等),造成草原鼠患问题严重,并由此引发了严重的生态问题。
老鼠在草原上是家族式掘洞群居。它们食量巨大,每年都得在洞内外囤积大量牧草。以一个大沙鼠的洞为例,里面经常囤草25—40公斤之多。而且,老鼠的繁殖力强,在自然界堪称独一无二。老鼠对草原危害最大的莫过于它们挖掘洞穴的习性。由于挖掘造成的环境损失远远大于单纯的食草所造成的危害。所有鼠害发生的地方,洞道纵横,水土流失严重。有的甚至形成了大面积寸草不生的“鼠荒地”。
更糟糕的是至今我们尚未找到能有效控制进而消灭草原老鼠的