资源描述
4.2 自来水输送与货机装运
钢铁、煤炭、水电等生产、生活物资从若干供应点运送到一些需求点,怎样安排输送方案使运费最小,或者利润最大? 各种类型的货物装箱,由于受体积、重量等的限制,如何相互搭配装载,使获利最高,或者装箱数量最少? 本节将通过两个例子讨论用数学规划模型解决这类问题的方法.
例1 自来水输送问题
问题 某市有甲、乙、丙、丁四个居民区,自来水由A,B,C三个水库供应. 四个区每天必须得到保证的基本生活用水量分别为30,70,10,10千吨,但由于水源紧张,三个水库每天最多只能分别供应50,60,50千吨自来水. 由于地理位置的差别,自来水公司从各水库向各区送水所需付出的引水管理费不同(见表1,其中C水库与丁区之间没有输水管道),其他管理费用都是450元/千吨. 根据公司规定,各区用户按照统一标准900元/千吨收费.此外,四个区都向公司申请了额外用水量,分别为每天50,70,20,40千吨.该公司应如何分配供水量,才能获利最多?
为了增加供水量,自来水公司正在考虑进行水库改造,使三个水库每天的最
大供水量都提高一倍,问那时供水方案应如何改变? 公司利润可增加到多少?
引水管理费(元/千吨)
甲
乙
丙
丁
A
160
130
220
170
B
140
130
190
150
C
190
200
230
/
表1 从水库向各区送水的引水管理费
问题分析 分配供水量就是安排从三个水库向四个区送水的方案,目标是获利最多.而从题目给出的数据看,A, B, C三个水库的供水量160千吨,不超过四个区的基本生活用水量与额外用水量之和300千吨,因而总能全部卖出并获利,于是自来水公司每天的总收入是900 ´ (50 + 60 + 50) = 144000元,与送水方案无关. 同样,公司每天的其它管理费用450 ´ (50 + 60 + 50) = 72000元也与送水方案无关. 所以,要使利润最大,只需使引水管理费最小即可. 另外,送水方案自然要受三个水库的供应量和四个区的需求量的限制.
模型建立
很明显,决策变量为A, B, C三个水库(i = 1, 2, 3)分别向甲、乙、丙、丁四个区(j = 1, 2, 3, 4)的供水量. 设水库i向j区的日供水量为xij,由于C水库与丁区之间没有输水管道,即x34 = 0,因此只有11个决策变量.
由上分析,问题的目标可以从获利最多转化为引水管理费最少,于是有
Min Z = 160x11 + 130x12 + 220x13 + 170x14 + 140x21 + 130x22
+ 190X23 + 150x24 + 190x31 + 200x32 + 230x33 (1)
约束条件有两类: 一类是水库的供应量限制,另一类是各区的需求量限制.
由于供水量总能卖出并获利,水库的供应量限制可以表示为
x11 + x12 + x13 + x14 = 50 (2)
x21 + x22 + x23 + x24 = 60 (3)
x31 + x32 + x33 = 50 (4)
考虑到各区的基本生活用水量与额外用水量,需求量限制可以表示为
30 £ x11 + x21 + x31 £ 80 (5)
70 £ x12 + x22 + x32 £ 140 (6)
10 £ x13 + x23 + x33 £ 30 (7)
10 £ x14 + x24 £ 50 (8)
模型求解
(1) ~ (8)构成一个线性规划模型(当然要加上xij的非负约束). 输入LINDO求解,得到如下输出:
OBJECTIVE FUNCTION VALUE
1) 24400.00
VARIABLE VALUE REDUCED COST
X11 0.000000 30.000000
X12 50.000000 0.000000
X13 0.000000 50.000000
X14 0.000000 20.000000
X21 0.000000 10.000000
X22 50.000000 0.000000
X23 0.000000 20.000000
X24 10.000000 0.000000
X31 40.000000 0.000000
X32 0.000000 10.000000
X33 10.000000 0.000000
(hyd注:REDUCED COST为各变量下界约束的影子价格. 例如对X11,若其下界从0提高到e,则目标Z的最优值会提高30e,其“价格”为30e/e = 30.)
送水方案为: A水库向乙区供水50千吨,B水库向乙、丁区分别供水50, 10 千吨,C水库向甲、丙分别供水40, 10千吨. 引水管理费为24400元. 利润为 144000 - 72000 - 24400 = 47600元.
讨论 如果A, B, C三个水库每天的最大供水量都提高一倍,则公司总供 水能力为320千吨,大于总需求量300千吨,水库供水量不能全部卖出,因而不能像前面那样,将获利最多转化为引水管理费最少. 此时我们首先需要计算A, B, C三个水库分别向甲、乙、丙、丁四个区供应每千吨水的净利润,即从收入900元中减去其它管理费450元,再减去表1中的引水管理费,得表2.
净利润(元/千吨)
甲
乙
丙
丁
A
290
320
230
280
B
310
320
260
300
C
260
250
220
/
表2 从水库向各区送水的净利润
于是决策目标为
Max Z = 290x11 + 320x12 + 230x13 + 280xl4 + 310x21 + 320x22
+ 260x23 + 300x24 + 260x31 + 250x32 + 220x33 (9)
由于水库供水量不能全部卖出,所以上面约束(2)~(4)的右端增加一倍的同时,应将等号改成小于、等于号,即
x11 + x12 + x13 + x14 £ 100 (10)
x21 + x22 + x23 + x24 £ 120 (11)
x31 + x32 + x33 £ 100 (12)
约束(5)~(8)不变.将(5)~(12)构成的线性规划模型输入LINDO求解得到:
OBJECTIVE FUNCTION VALUE
1) 88700.00
VARIABLE VALUE REDUCED COST
X11 0.000000 20.000000
X12 100.000000 0.000000
X13 0.000000 40.000000
X14 0.000000 20.000000
X21 30.000000 0.000000
X22 40.000000 0.000000
X23 0.000000 10.000000
X24 50.000000 0.000000
X31 50.000000 0.000000
X32 0.000000 20.000000
X33 30.000000 0.000000
送水方案为:A水库向乙区供水100千吨,B水库向甲、乙、丁区分别供水30, 40, 50千吨,C水库向甲、丙区分别供水50,30千吨.总利润为88700元.
其实,由于每个区的供水量都能完全满足,所以上面(5)~(8)每个式子左边的约束可以去掉,右边的小于、等于号可以改写成等号. 作这样的简化后得到的解没有任何变化.
评注 本题考虑的是将某种物质从若干供应点运往一些需求点,在供需量约束条件下使总费用最小,或总利润最大. 这类问题一般称为运输问题,是线性规划应用最广泛的领域之一. 在标准的运输问题中,供需量通常是平衡的,即供应点的总供应量等于需求点的总需求量. 本题中供需量不平衡,但这并不会引起本质的区别,一样可以方便地建立线性规划模型求解.
例2 货机装运
问题 某架货机有三个货舱:前仓、中仓、后仓. 三个货舱所能装载的货物的最大重量和体积都有限制,如表3所示. 并且,为了保持飞机的平衡,三个货舱中实际装载货物的重量必须与其最大容许重量成比例.
前仓
中仓
后仓
重量限制(吨)
10
16
8
体积限制(米3)
6800
8700
5300
表3 三个货仓装载货物的最大允许重量和体积
现有四类货物供该货机本次飞行装运,其有关信息如表4,最后一列指装运后所获得的利润.
重量(吨)
空间(米3/吨)
利润(元/吨)
货物1
18
480
3100
货物2
15
650
3800
货物3
23
580
3500
货物4
12
390
2850
表4 四类装运货物的信息
应如何安排装运,使该货机本次飞行获利最大?
模型假设 问题中没有对货物装运提出其它要求,我们可作如下假设:
1) 每种货物可以分割到任意小;
2) 每种货物可以在一个或多个货舱中任意分布;
3) 多种货物可以混装,并保证不留空隙。
模型建立
决策变量:用xij表示第i种货物装入第j个货舱的重量(吨),货舱j = l, 2, 3分别表示前仓、中仓、后仓.
决策目标是最大化总利润,即
Max Z = 3100(x11 + x12 + x13) + 3800(x21 + x22 + x23)
+ 3500(x3l + x32 + x33) + 2850(x41 + x42 + x43) (13)
约束条件包括以下4个方面:
1) 供装载的四种货物的总重量约束,即
x11 + x12 + x13 £ 18 (14)
x21 + x22 + x23 £ 15 (15)
x31 + x32 + x33 £ 23 (16)
x41 + x42 + x43 £ 12 (17)
2) 三个货舱的重量限制,即
x11 + x21 + x31 + x41 £ 10 (18)
x12 + x22 + x32 + x42 £ 16 (19)
x13 + x23 + x33 + x43 £ 8 (20)
3) 三个货舱的空间限制,即
480x11 + 650x2l + 580x31 + 390x41 £ 6800 (21)
480x12 + 650x22 + 580x32 + 390x42 £ 8700 (22)
480x13 + 650x23 + 580x33 + 390x43 £ 5300 (23)
4) 三个货舱装入重量的平衡约束,即
(24)
模型求解
将以上模型输入LINDO求解,可以得到:
OBJECTIVE FUNCTION VALUE
1) 121515.8
VARIABLE VALUE REDUCED COST
X11 0.000000 400.000000
X12 0.000000 57.894737
X13 0.000000 400.000000
X21 10.000000 0.000000
X22 0.000000 239.473679
X23 5.000000 0.000000
X31 0.000000 0.000000
X32 12.947369 0.000000
X33 3.000000 0.000000
X41 0.000000 650.000000
X42 3.052632 0.000000
X43 0.000000 650.000000
实际上,不妨将所得最优解作四舍五入,结果为货物2装入前仓10吨、装入后仓5吨;货物3装人中仓13吨、装入后仓3吨;货物4装人中仓3吨.最大利润约121516元.
评注 初步看来,本例与运输问题类似,似乎可以把4种货物看成4个供应点,3个货舱看成3个需求点(或者反过来,把货舱看成供应点,货物看成需求点). 但是,这里对供需量的限制包括两个方面:重量限制和空间限制,且有装载均匀要求. 因此它只能看成是运输问题的一种变形和扩展.
附例1的matlab程序:(n4_2ex01.m in Matlab/work)
%4.2,p93,example 1, 2004/7/18
f=[160 130 220 170 140 130 190 150 190 200 230]; % Both f=[…] or f=[…]' are OK!
Aeq=[1 1 1 1 0 0 0 0 0 0 0;
0 0 0 0 1 1 1 1 0 0 0;
0 0 0 0 0 0 0 0 1 1 1];
beq=[50 60 50]';
A=[1 0 0 0 1 0 0 0 1 0 0;
0 1 0 0 0 1 0 0 0 1 0;
0 0 1 0 0 0 1 0 0 0 1;
0 0 0 1 0 0 0 1 0 0 0];
A=[A;-A];
b=[80 140 30 50 -30 -70 -10 -10];
lb=zeros(11,1);
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb)
说明:
线性规划为
min fval = f *x (输入时f为行向量或列向量都行)
s.t A*x £ b, Aeq*x = beq, lb £ x £ ub
设置linprog(f, A, b, Aeq, beq, lb, ub) 中参数时,若后面全空缺可不写,中间有空缺时用[]代替,如linprog(f, A, b, [], [],lb), linprog(f, A, b)等.
运行后,要知道结果,则
x =
0.0000
50.0000
0.0000
0.0000
0.0000
50.0000
0.0000
10.0000
40.0000
0.0000
10.0000
fval =
2.4400e+004
lambda.lower =
ans =
30.0000
0.0000
50.0000
20.0000
10.0000
0.0000
20.0000
0.0000
0.0000
10.0000
0.0000
lambda.ineqlin =
ans =
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
40.0000
20.0000
lambda.eqlin =
ans =
-130.0000
-130.0000
-190.0000
(lambda中为各约束的影子价格)
作业:对本节的其它数值例,用Matlab编程计算.
展开阅读全文