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