数学建模小实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、司乘人员配备问题
某昼夜服务的公交路线每天各时间区段内需司机与乘务人员如下:
设司机与乘务人员分别在各时间区段一开始上班,并连续工作八小时,问该公交线路至少配备多少名司机与乘务人员? 解: 设i x 为第i 班应报到的人员
)6,,2,1( i ,建立线性模型如下:
6
1min i i
x Z
,...,,3020
506070
60..62
1655
4433221
61x x x x x x x x x x x x x x x t s LINGO 程序如下:
MODEL:
min=x1+x2+x3+x4+x5+x6; x1+x6>=60; x1+x2>=70; x2+x3>=60; x3+x4>=50; x4+x5>=20; x5+x6>=30; END 得到的解为:
x1=60,x2=10,x3=50,x4=0,x5=30,x6=0;
配备的司机与乘务人员最少为150人。
2、铺瓷砖问题
要用40块方形瓷砖铺下图所示形状的地面,但当时市场上只有长方形瓷砖,每块大小等于方形的两块。
一人买了20块长方形瓷砖,试着铺地面,结果无法铺好。
试问就是这人的功夫不到家还就是这个问题根本无解呢?
3、棋子颜色问题
在任意拿出黑白两种颜色的棋子共n个,随机排成一个圆圈。
然
后在两颗颜色相同的棋子中间放一颗黑色棋子,在两颗颜色不同的棋子中间放一颗白色棋子,放完后撤掉原来所放的棋子,再重复以上的过程,这样放下一圈后就拿走前次的一圈棋子,问这样重复进行下去各棋子的颜色会怎样变化呢?
分析与求解:
由于在两颗同色棋子中放一颗黑色棋子,两颗不同色的棋子中间放一颗白色棋子,故可将黑色棋子用1表示,白色棋子用-1表示。
这就是因为-1×(-1)=1,1×1=1,这代表两颗同色棋子中放一颗黑色棋子;1×(-1)= -1,这代表两颗不同色的棋子中间放一颗白色棋子。
设棋子数为n ,12,,,n a a a L 为初始状态。
当n=3时
步数 状态(舍掉偶次项)
0 1a 2a 3a 1 21a a 32a a 13a a 2 31a a 21a a 32a a 3 32a a
31a a 21a a
4 12a a 23a a 31a a 说明当n=3时,经过3步进入初始状态。
当n=4时
步数 状态(舍掉偶次项)
0 1a 2a 3a 4a 1 21a a 32a a 43a a 14a a 2 31a a 42a a 31a a 42a a 3 4321a a a a 4321a a a a 4321a a a a 4321a a a a
4 24232221a a a a 24232221a a a a 24232221a a a a 2
4232221a a a a
说明当n=4时,经过4步全变为黑色棋子。
既不循环也不全为黑子
结论:当棋子数为n2时,至多经过n2次操作,就可以全部变为黑子,当棋子数不为n2时则一般不能全变为黑子。
Matlab程序:进行实验
%棋子颜色问题演示
% 1---黑子,-1 -----白子
n=4; %定义棋子数
times=6;%定义迭代次数
x0=zeros(1,n);
x1=zeros(1,n); %定义数组
for i=1:n
k=rand(1,1);
if(k>0、5) x0(i)=1;
else x0(i)=-1;
end
end; % 赋初值
x0
for i=1:times
i
for k=1:n-1
x1(k)=x0(k)*x0(k+1);
end
x1(n)=x0(n)*x0(1);
x1 %显示各次结果
x0=x1;
end
程序语句解释:
1、zeros(m,n),产生一个m×n的0矩阵,通常用于定义一个指定大小的矩阵、zeros(1,n)则产生一个全部为0的行向量。
2、rand(m,n),产生一个m×n的随机矩阵,每个元素都服从[0,1]上的均匀分布、rand(1,1)则产生一个服从[0,1]上的均匀分布的数字。
4、选修课策略问题
某学校规定,运筹学专业的学生毕业时必须至少学习过两门数学课、三门运筹学课与两门计算机课。
这些课程的编号、名称、学分、所属类别与先修课要求如表1所示。
那么,毕业时学生最少可以学习这些课程中哪些课程。
如果某个学生既希望选修课程的数量少,又希望所获得的学分多,她可以选修哪些课程?
模型的建立
1不考虑学分情形:
记i=1,2,…,9表示9门课程的编号。
设1 i x 表示第i 门课程选修,0 i x 表示第i 门课程不选。
问题的目标为选修的课程总数最少,即
9
1
min i
i Z x
约束条件包括两个方面:
第一方面就是课程数量的约束: 每个人最少要学习2门数学课,则
123452x x x x x 每个人最少要学习3门运筹学课 ,则
356893x x x x x
每个人最少要学习2门计算机课,则有:
46792x x x x
第二方面就是先修课程的关系约束:
如“数据结构”的先修课程就是“计算机编程”,这意味着如果14 x ,必须17 x ,这个条件可以表示为74x x (注意当04 x 时对7x 没有限制)。
这样,所有课程的先修课要求可表为如下的约束
“最优化方法”的先修课就是“微积分”与“线性代数”,有:
2313,x x x x
“数据结构”的先修课程就是“计算机编程”,有: 47x x
“应用统计”的先修课就是“微积分”与“线性代数”,有:
5152,x x x x
“计算机模拟”的先修课程就是“计算机编程”,有:
67x x “预测理论”的先修课程就是“应用统计”,有:
85x x
“数学实验”就是“微积分”与“线性代数”,有:
9192,x x x x
这样一来,总的0-1规划模型为:
9
1
min i i Z x
12345356894679313247
51526785
9192
129232,..,,,,,01
x x x x x x x x x x x x x x x x x x x x s t x x x x x x x x x x x x
x x x
L 或 解得:
1236791,1,1,1,1,1x x x x x x 。
即选修课程为:微积分,线性代数、最优化方法,计算机模拟,计算机编程,数学实验。
LINGO 程序为: model: sets:
item/1、、9/:c,x; endsets data:
c=5,4,4,3,4,3,2,2,3; enddata
min=@sum(item(i):x(i));!课程最少; x(1)+x(2)+x(3)+x(4)+x(5)>=2; x(3)+x(5)+x(6)+x(8)+x(9)>=3; x(4)+x(6)+x(7)+x(9)>=2; x(3)<=x(1); x(3)<=x(2); x(4)<=x(7); x(5)<=x(1); x(5)<=x(2); x(6)<=x(7); x(8)<=x(5);
x(9)<=x(1); x(9)<=x(2);
@for(item(i):@bin(x(i))); end
2 考虑学分情形:
当要求学分最多时,设各门课程学分为i c ,则增加学分最大的目标函数为:
9
1
max i i i Z c x
这样总的双目标0-1规划模型为:
9
11
min i i Z x
9
21
max i i i Z c x
12345356894679313247
51526785
9192
129232,..,,,,,01
x x x x x x x x x x x x x x x x x x x x s t x x x x x x x x x x x x
x x x
L 或 当把选修课程指定为6门时,对学分最大求最优,解得:
1235791,1,1,1,1,1x x x x x x 。
最大学分为z=22。
即选修课程为:微积分,线性代数、最优化方法, 应用统计,计算机编程,数学实验。
学分达到22分。
LINGO 程序为: model: sets:
item/1、、9/:c,x; endsets data:
c=5,4,4,3,4,3,2,2,3; enddata
max=@sum(item(i):c(i)*x(i)); @sum(item(i):x(i))=6; !课程为6门;
x(1)+x(2)+x(3)+x(4)+x(5)>=2; x(3)+x(5)+x(6)+x(8)+x(9)>=3; x(4)+x(6)+x(7)+x(9)>=2;
x(3)<=x(1);
x(3)<=x(2);
x(4)<=x(7);
x(5)<=x(1);
x(5)<=x(2);
x(6)<=x(7);
x(8)<=x(5);
x(9)<=x(1);
x(9)<=x(2);
@for(item(i):@bin(x(i))); end。