数学建模第10次课实践报告
大家可以作为学习线性规划的练习题使用。适用Lingo软件。
目录
课堂练习1
题目给出
分配甲、乙、丙、丁四人去完成五项任务,每人完成各项任务的时间如下表所示。由于任务数多于人数,故规定其中有一个人可完成两项任务,其余三人每人只完成一项任务。试确定总花费时间最少的分配任务方案。
A | B | C | D | E | |
甲 | 9 | 2 | 4 | 15 | 9 |
乙 | 6 | 5 | 12 | 4 | 2 |
丙 | 11 | 7 | 13 | 4 | 17 |
丁 | 19 | 11 | 15 | 8 | 9 |
模型建立
0-1规划模型
决策变量:设xij=1表示第i个人去完成第j个任务(i=1,2,3,4,j=1,2,3,4,5)。aij是第i个人完成第j个任务所需要的时间。
目标函数:求最小值
约束条件:每个人只能做1或2个任务,每个任务必须有人做。
模型解决
Lingo代码
model:
sets:
person/1..4/;
mission/1..5/;
assignment(person,mission):time,x;
endsets
data:
time=9 2 4 15 9 6 5 12 4 2 11 7 13 4 17 19 11 15 8 9;
enddata
min=@sum(assignment(i,j):time*x);
@for(mission(j):@sum(person(i):x(i,j))=1);
@for(person(i):@sum(mission(j):x(i,j))>1);
@for(person(i):@sum(mission(j):x(i,j))<2);
@for(assignment:@bin(x));
End
运行结果
课堂练习2
问题给出
有两辆长10.2m,载重40t的铁路平板车,要装载7种不同规格的货物箱。这7种箱子的厚度、重量、库存量如下表所示。
货箱类型 | C1 | C2 | C3 | C4 | C5 | C6 | C7 |
厚度(cm) | 48.7 | 52 | 61.3 | 72 | 48.7 | 52 | 64 |
重量(t) | 2 | 3 | 1 | 0.5 | 4 | 2 | 1 |
库存量(个) | 8 | 7 | 9 | 6 | 6 | 4 | 8 |
假设各种箱子的高度和宽度均符合铁路运输的标准(不妨设它们的宽度和高度均为相同),试问在两辆车上应如何装载,使平板车浪费的空间最小?当地铁路部门还有一个附加的规定:第5、6、7这3种箱子装车厚度和不得超过302.7cm。
模型建立
设Ci类货箱的厚度为ti,重量为wi,库存量为ni;第一辆平板车装载Ci类货箱xi件,第二辆平板车装载Ci类货箱yi件,其中i=1,2,…,7.
模型解决
Lingo代码
model:
sets:
container/1..7/:t,w,n,x,y;
endsets
data:
t=48.7,52,61.3,72,48.7,52,64;
w=2,3,1,0.5,4,2,1;
n=8,7,9,6,6,4,8;
enddata
min=2040-@sum(container(i):t(i)*(x(i)+y(i)));
@sum(container(i):w(i)*x(i))<40;
@sum(container(i):w(i)*y(i))<40;
@sum(container(i):t(i)*x(i))<1020;
@sum(container(i):t(i)*y(i))<1020;
@sum(container(i)|i#ge#5:t(i)*(x(i)+y(i)))<302.7;
@for(container:@gin(x));
@for(container:@gin(y));
end
运行结果
作业10
用LINGO求解下列规划问题
1)
model:
min=3*x1+x2+x3;
x1-2*x2+x3<0;
-4*x1+x2+2*x3>3;
-2*x1+x3<1;
x1>0;
x2>0;
x3>0;
end
2)
model:
min=7*x1+9*x2;
-x1+3*x2>6;
7*x1+x2>35;
x1>0;
x2>0;
@gin(x1);
@gin(x2);
end
2.
某化工厂要用三种原材料C、P、H混合配出三种不同规格的产品A、B、D.已知产品的规格要求,产品单价,每天能供应的原材料数量及原材料单价如表1所示,求利润最高的
采购计划.
原料 产品 | A | B | D | 供应量(kg/天) | 单价(元/kg) |
C | ≥50% | ≥25% | 100 | 65 | |
P | ≤25% | ≤50% | 100 | 25 | |
H | 60 | 35 | |||
单价 | 50 | 35 | 25 |
设A产品使用原料C为:x11。以此类推,自变量设为:
A产品:x11,x12,x13。
B产品:x21,x22,x23。
D产品:x31,x32,x33。
同样,对于原料,原来C用于A产品的量设为x11。以此类推,自变量设为:
原料C:x11,x21,x31。
原料P:x12,x22,x32。
原料H:x13,x23,x33。
所以,目标函数为:
max z = 50(x11+x12+x13)+35(x21+x22+x23)+25(x31+x32+x33)-65(x11+x21+x31)
-25(x12+x22+x32)-35(x13+x23+x33)
约束条件为:
x11≥0.5(x11+x12+x13)
x12≤0.25(x11+x12+x13)
x21≥0.25(x21+x22+x23)
x22≤0.5(x21+x22+x23)
x11+x21+x31≤100
x12+x22+x32≤120
x13+x23+x33≤60
xij≥0,i,j=1,2,3
整理之后,得到如下约束条件:
x12+x13-x11≤0
3x12-x11-x13≤0
x22+x23-3x21≤0
x22-x21-x23≤0
x11+x21+x31≤100
x12+x22+x32≤100
x13+x23+x33≤60
xij≥0,i,j=1,2,3
lingo代码
model:
sets:
product/1..3/:w;
material/1..3/:p;
use(product,material):x;
endsets
data:
p=50 35 25;
w=65 25 35;
enddata
max=@sum(use(i,j):w(i)*x(i,j))-@sum(use(i,j):p(j)*x(i,j));
x(1,2)+x(1,3)-x(1,1)<0;
3*x(1,2)-x(1,1)-x(1,3)<0;
x(2,2)+x(2,3)-3*x(2,1)<0;
x(2,2)-x(2,1)-x(2,3)<0;
@sum(use(i,j)|j#eq#1:x(i,j))<100;
@sum(use(i,j)|j#eq#2:x(i,j))<100;
@sum(use(i,j)|j#eq#3:x(i,j))<60;
end
3.(指派问题)
考虑指派n个人完成n项任务(每人单独承担一项任务),使所需的总完成时间(成本)尽可能短.已知某指派问题的有关数据(每人完成各任务所需的时间)如下表
所示,试求解该指派问题.
工人 任务 | 1 | 2 | 3 | 4 |
1 | 15 | 18 | 21 | 24 |
2 | 19 | 23 | 22 | 18 |
3 | 26 | 18 | 16 | 19 |
4 | 19 | 21 | 23 | 17 |
0-1规划问题
决策变量:xij表示第i个人完成第j个任务,i=1..4,j=1..4.
目标函数:min z=∑t*x
约束条件:每个人必须完成一项任务,每项任务必须有人完成,x只能取0或1。
Lingo代码:
model:
sets:
person/1..4/;
mission/1..4/;
assignment(person,mission):time,x;
endsets
data:
time=15 18 21 24 19 23 22 18 26 18 16 19 119 21 23 27;
enddata
min=@sum(assignment(i,j):time*x);
@for(mission(j):@sum(person(i):x(i,j))=1);
@for(person(i):@sum(mission(j):x(i,j))=1);
@for(assignment:@bin(x));
end
附加题(选做)
物流配送中心选址问题,是在给定某一地区所有备选点的地址集合中选出一定数目的地址建成配送中心,建立一系列的配送区域,以实现选出点建立的配送中心与各需求点和工厂形成的配送系统总物流费最小。
总费用=运输费用+配送费用+仓储费用+固定成本
表 2 工厂到配送中心的运输价格
W1 | W2 | W3 | W4 | |
P1 | 6 | 5 | 4 | 2 |
P2 | 2 | 3 | 4 | 9 |
P3 | 6 | 8 | 7 | 5 |
P4 | 7 | 4 | 2 | 3 |
P5 | 4 | 2 | 5 | 1 |
P6 | 3 | 4 | 1 | 7 |
表 2 配送中心到客户的运输价格
C1 | C2 | C3 | C4 | C5 | C6 | |
W1 | 3 | 2 | 7 | 4 | 7 | 5 |
W2 | 6 | 1 | 4 | 2 | 5 | 3 |
W3 | 2 | 4 | 5 | 3 | 6 | 8 |
W4 | 5 | 6 | 3 | 7 | 4 | 6 |
表 4 工厂的总生产能力
工厂 | P1 | P2 | P3 | P4 | P5 | P6 |
总生产能力(p) | 40000 | 50000 | 60000 | 70000 | 60000 | 40000 |
表 5 备选物流配送中心的固定成本,单位管理成本,容量
物流配送中心 | W1 | W2 | W3 | W4 |
固定成本(f) | 500000 | 300000 | 400000 | 400000 |
单位管理成本(g) | 3 | 2 | 5 | 4 |
仓库容量(a) | 10000 | 60000 | 70000 | 50000 |
表 6 客户的需求量
顾客 | C1 | C2 | C3 | C4 | C5 | C6 |
需求(d) | 10000 | 20000 | 10000 | 20000 | 30000 | 10000 |
任务:请建立相应的规划模型,并利用LINGO求解。
模型建立
xij表示i工厂到j物流仓库运货量,aij为对应运输价格,yjk表示j物流仓库到k客户运货量,bjk为对应运输价格,i=1,...,6,j=1,...,4,k=1,...,6.pj为工厂生产能力,fj为存储固定成本,gj为存储单位管理成本,rj为物流仓库容量,dk为客户需求量。
lingo代码
model:
sets:
fac/1..6/:p;
log/1..4/:f,g,r;
cli/1..6/:d;
fir(fac,log):x,a;
sec(log,cli):y,b;
endsets
data:
a=6 5 4 2 2 3 4 9 6 8 7 5 7 4 2 3 4 2 5 1 3 4 1 7 ;
b=3 2 7 4 7 5 6 1 4 2 5 3 2 4 5 3 6 8 5 6 3 7 4 6 ;
p=40000 50000 60000 70000 60000 40000;
f=500000 300000 400000 400000;
g=3 2 5 4;
r=10000 60000 70000 50000;
d=10000 20000 10000 20000 30000 10000;
enddata
min=@sum(fir:a*x)+@sum(sec:b*y)+@sum(log:f)+@sum(fir(i,j):g(j)*x(i,j));
@for(cli(k):@sum(log(j):y(j,k))-d(k)=0);
@for(log(j):@sum(fac(i):x(i,j))-r(j)<0);
@for(log(j):@sum(fac(i):x(i,j))-@sum(cli(k):y(j,k))=0);
end