线性规划研究时间较早,在实际应用中也比较成熟,它是一种辅助人们进行科学管理的数学方法,为合理地利用有限的人力、物力、财力等资源作出的最优决策,提供科学的依据。
课题名称:配货问题,使运费收入最大
现有一艘轮船,分前中后三个舱位,相应的容积与最大允许载重量如表1所示。现有一批A,B,C三种货物待运,已知相关数据如表2所示。表1 各船舱的容积和最大载重量
前舱 |
中舱 |
后舱 |
|
容积/m |
4000 |
5400
扫描二维码关注公众号,回复:
2342766 查看本文章
|
1500 |
最大载重量/t |
2000 |
3000 |
1500 |
表2 三种货物的相关数据
货物 |
数量/件 |
体积/(m/件) |
重量/(t/件) |
运价/(元/件) |
A |
600 |
10 |
8 |
1000 |
B |
1000 |
5 |
6 |
700 |
C |
800 |
7 |
5 |
600 |
解法一:matlab解法
解:设轮船前舱应装载A,B,C三种货物各x11,x21,x31件;轮船中舱应装载A,B,C三种货物各x12,x22,x32件;轮船后舱应装载A,B,C三种货物各x13,x23,x33件;则有:
max z=1000*(x(11)+x(12)+x(13))+700*(x(21)+x(22)+x(23))+600*(x(31) +x(32)+x(33))
st.
转化为求最小问题:
min w= - 1000*(x(11)+x(12)+x(13))-700*(x(21)+x(22)+x(23))-600*(x(31)+x(32)+x(33))
st.
Matlab程序:
c=[-1000,-1000,-1000,-700,-700,-700,-600,-600,-600];
A=[10,0,0,5,0,0,7,0,0;
0,10,0,0,5,0,0,7,0;
0,0,10,0,0,5,0,0,7;
8,0,0,6,0,0,5,0,0;
0,8,0,0,6,0,0,5,0;
0,0,8,0,0,6,0,0,5;
9.2,-8,0,6.9,-6,0,5.75,-5,0;
-8, 9.2,0, -6, 6.9,0, -5, 5.75,0;
0,-8, 9.2,0, -6, 6.9,0, -5, 5.75;
0,9.2,-8,0,6.9,-6,0,5.75,-5;
-8,0,8.8,-6,0,6.6,-5,0,5.5;
8.8,0,-8,6,0,-6.6,5.5,0,-5;
1,1,1,0,0,0,0,0,0;
0,0,0,1,1,1,0,0,0;
0,0,0,0,0,0,1,1,1;];
b=[4000,5400,1500,2000,3000,1500,0,0,0,0,0,0,600,1000,800];
Aeq=[];
beq=[];
lb=[0,0,0,0,0,0,0,0,0];
ub=[];
[x,w]=linprog(c,A,b,Aeq,beq,lb,ub)
Optimization terminated.
Matlab运行结果:
x =
206.7722
318.2278
75.00000
0.000000
0.000000
150.0000
69.16460
90.83540
0.000000
w =-801000
方案:
因为:z=-w,所以z=801000,即轮船前舱应装载A,B,C三种货物各207,0,69件;轮船中舱应装载A,B,C三种货物各318,0,91件;轮船后舱应装载A,B,C三种货物各75,150,0件,才能使运费收入最大且满足其他条件。
解法二:用lingo求解:
lingo程序:
model:
sets:
row/1..3/;
arrange/1..3/;
link(row,arrange):x;
endsets
max=1000*(x(1,1)+x(1,2)+x(1,3))+700*(x(2,1)+x(2,2)+x(2,3))+600*(x(3,1)+x(3,2)+x(3,3));
10*x(1,1)+5*x(2,1)+7*x(3,1)<=4000;
10*x(1,2)+5*x(2,2)+7*x(3,2)<=5400;
10*x(1,3)+5*x(2,3)+7*x(3,3)<=1500;
8*x(1,1)+6*x(2,1)+5*x(3,1)<=2000;
8*x(1,2)+6*x(2,2)+5*x(3,2)<=3000;
8*x(1,3)+6*x(2,3)+5*x(3,3)<=1500;
(8*x(1,1)+6*x(2,1)+5*x(3,1))*1.15-(8*x(1,2)+6*x(2,2)+5*x(3,2))<=0;
(8*x(1,2)+6*x(2,2)+5*x(3,2))*1.15-(8*x(1,1)+6*x(2,1)+5*x(3,1))<=0;
(8*x(1,3)+6*x(2,3)+5*x(3,3))*1.15-(8*x(1,2)+6*x(2,2)+5*x(3,2))<=0;
(8*x(1,2)+6*x(2,2)+5*x(3,2))*1.15-(8*x(1,3)+6*x(2,3)+5*x(3,3))<=0;
(8*x(1,3)+6*x(2,3)+5*x(3,3))*1.10-(8*x(1,1)+6*x(2,1)+5*x(3,1))<=0;
(8*x(1,1)+6*x(2,1)+5*x(3,1))*1.10-(8*x(1,3)+6*x(2,3)+5*x(3,3))<=0;
x(1,1)+x(1,2)+x(1,3)<=600;
x(2,1)+x(2,2)+x(2,3)<=1000;
x(3,1)+x(3,2)+x(3,3)<=800;
end
lingo
运行结果:
Global optimal solution found.
Objective value: 801000.0
Infeasibilities: 0.000000
Total solver iterations: 9
Variable Value Reduced Cost
X( 1, 1) 206.7722 0.000000
X( 1, 2) 318.2278 0.000000
X( 1, 3) 75.00000 0.000000
X( 2, 1) 0.000000 0.000000
X( 2, 2) 0.000000 0.000000
X( 2, 3) 150.0000 0.000000
X( 3, 1) 69.16460 0.000000
X( 3, 2) 90.83540 0.000000
X( 3, 3) 0.000000 0.000000
Row Slack or Surplus Dual Price
1 801000.0 1.000000
2 4000.000 0.000000
3 5400.000 0.000000
4 1500.000 0.000000
5 2000.000 0.000000
6 3000.000 0.000000
7 1500.000 0.000000
8 0.000000 938.7026
9 0.000000 924.9588
10 0.000000 954.5080
11 600.0000 0.000000
12 1000.000 0.000000
13 800.0000 0.000000
所得方案与matlab一致,即轮船前舱应装载A,B,C三种货物各207,0,69件;轮船中舱应装载A,B,C三种货物各318,0,91件;轮船后舱应装载A,B,C三种货物各75,150,0件,才能使运费收入最大且满足其他条件。
相对于matlab,Lingo在LP问题上有着极其突出的优势,操作简单,不易出错!