1 4.2 自来水输送与货机装运 钢铁、煤炭、水电等生产、生活物资 从若干供应点运送到一些需求点,怎样安 排输送方案使运费最小,或者利润最大 ? 各种类型的货物装箱,由于受体积、重量 等的限制,如何相互搭配装载,使获利最 高,或者装箱数量最少 ? 本节将通过两个 例子讨论用数学规划模型解决这类问题的 方法.
2 例 1 自来水输送问题 问题 某市有甲、乙、丙、丁四个居民区, 自来水由 A , B , C 三个水库供应. 四个区每天必 须得到保证的基本生活用水量分别为 30 , 70 , 10 , 10 千吨,但由于水源紧张,三个水库每天 最多只能分别供应 50 , 60 , 50 千吨自来水. 由于 地理位置的差别,自来水公司从各水库向各区 送水所需付出的引水管理费不同 ( 见表 1 ,其中 C 水库与丁区之间没有输水管道 ) ,其他管理费用 都是 450 元/千吨. 根据公司规定,各区用户按 照统一标准 900 元/千吨收费.此外,四个区都 向公司申请了额外用水量,分别为每天 50 , 70 , 20 , 40 千吨.该公司应如何分配供水量,才能 获利最多 ?
3 为了增加供水量,自来水公司正在考虑进 行水库改造,使三个水库每天的最大供水量都 提高一倍,问那时供水方案应如何改变 ? 公司 利润可增加到多少 ? 引水管理费 ( 元 / 千吨 ) 甲 乙 丙丁 A B C / 表 1 从水库向各区送水的引水管理费
4 问题分析 分配供水量就是安排从三个水库 向四个区送水的方案,目标是获利最多.而从 题目给出的数据看, A, B, C 三个水库的供水量 160 千吨,不超过四个区的基本生活用水量与 额外用水量之和 300 千吨,因而总能全部卖出 并获利,于是自来水公司每天的总收入是 900 ( ) = 元,与送水方案无关. 同样,公司每天的其它管理费用 450 ( ) = 元也与送水方案无关. 所以,要 使利润最大,只需使引水管理费最小即可. 另 外,送水方案自然要受三个水库的供应量和四 个区的需求量的限制.
5 模型建立 很明显,决策变量为 A, B, C 三个水库 (i = 1, 2, 3) 分别向甲、乙、丙、丁四个区 (j = 1, 2, 3, 4) 的供水量. 设水库 i 向 j 区的日供水量为 x ij ,由于 C 水库与丁区之间没有输水管道,即 x 34 = 0 ,因 此只有 11 个决策变量. 由上分析,问题的目标可以从获利最多转 化为引水管理费最少,于是有 Min Z = 160x x x x x x x x x x x 33 (1)
6 约束条件有两类 : 一类是水库的供应量 限制,另一类是各区的需求量限制. 由于供水量总能卖出并获利,水库的 供应量限制可以表示为 x 11 + x 12 + x 13 + x 14 = 50 (2) x 21 + x 22 + x 23 + x 24 = 60 (3) x 31 + x 32 + x 33 = 50 (4)
7 考虑到各区的基本生活用水量与额外 用水量,需求量限制可以表示为 30 x 11 + x 21 + x 31 80 (5) 70 x 12 + x 22 + x 32 140 (6) 10 x 13 + x 23 + x 33 30 (7) 10 x 14 + x 24 50 (8)
8 模型求解 (1) ~ (8) 构成一个线性规划模型 ( 当然要 加上 x ij 的非负约束 ). 输入 LINDO 求解,得 到如下输出 :
9 OBJECTIVE FUNCTION VALUE 1) . 00 VARIABLE VALUE REDUCED COST X X X X X X X X X X X
10 ( 注: REDUCED COST 为各变量下界 约束的影子价格. 例如对 X11 ,若其下界从 0 提高到 ,则目标 Z 的最优值会提高 30 , 其 “ 价格 ” 为 30 / = 30.) 送水方案为 : A 水库向乙区供水 50 千吨, B 水库向乙、丁区分别供水 50, 10 千吨, C 水库向甲、丙分别供水 40, 10 千吨. 引水管 理费为 元. 利润为 = 元.
11 讨论 如果 A, B, C 三个水库每天的最大供水量都提 高一倍,则公司总供 水能力为 320 千吨,大于总需求 量 300 千吨,水库供水量不能全部卖出,因而不能像 前面那样,将获利最多转化为引水管理费最少. 此时 我们首先需要计算 A, B, C 三个水库分别向甲、乙、丙、 丁四个区供应每千吨水的净利润,即从收入 900 元中 减去其它管理费 450 元,再减去表 1 中的引水管理费, 得表 2 . 净利润 ( 元 / 千吨 ) 甲乙丙丁 A B C / 表 2 从水库向各区送水的净利润
12 于是决策目标为 Max Z = 290x x x x l x x x x x x x 33 (9) 由于水库供水量不能全部卖出,所以上面约束 (2) ~ (4) 的右端增加一倍的同时,应将等号改成小于、 等于号,即 x 11 + x 12 + x 13 + x 14 100 (10) x 21 + x 22 + x 23 + x 24 120 (11) x 31 + x 32 + x 33 100 (12) 约束 (5) ~ (8) 不变.将 (5) ~ (12) 构成的线性规划 模型输入 LINDO 求解得到 :
13 OBJECTIVE FUNCTION VALUE 1) VARIABLE VALUE REDUCED COST X X X X X X X X X X X
14 送水方案为: A 水库向乙区供水 100 千 吨, B 水库向甲、乙、丁区分别供水 30, 40, 50 千吨, C 水库向甲、丙区分别供水 50 , 30 千吨.总利润为 元. 其实,由于每个区的供水量都能完全 满足,所以上面 (5) ~ (8) 每个式子左边的约 束可以去掉,右边的小于、等于号可以改 写成等号. 作这样的简化后得到的解没有 任何变化.
15 评注 本题考虑的是将某种物质从若干供 应点运往一些需求点,在供需量约束条件 下使总费用最小,或总利润最大. 这类问 题一般称为运输问题,是线性规划应用最 广泛的领域之一. 在标准的运输问题中, 供需量通常是平衡的,即供应点的总供应 量等于需求点的总需求量. 本题中供需量 不平衡,但这并不会引起本质的区别,一 样可以方便地建立线性规划模型求解.
16 例 2 货机装运 问题 某架货机有三个货舱:前仓、中仓、 后仓. 三个货舱所能装载的货物的最大重量和 体积都有限制,如表 3 所示. 并且,为了保持 飞机的平衡,三个货舱中实际装载货物的重 量必须与其最大容许重量成比例. 前仓中仓后仓 重量限制 ( 吨 ) 体积限制 ( 米 3 ) 表 3 三个货仓装载货物的最大允许重量和体积
17 现有四类货物供该货机本次飞行装运, 其有关信息如表 4 ,最后一列指装运后所获 得的利润. 重量 ( 吨 ) 空间 ( 米 3 / 吨 ) 利润 ( 元 / 吨 ) 货物 货物 货物 货物 表 4 四类装运货物的信息 应如何安排装运,使该货机本次飞行获 利最大 ?
18 模型假设 问题中没有对货物装运提出其它要求, 我们可作如下假设: 1) 每种货物可以分割到任意小; 2) 每种货物可以在一个或多个货舱中任意分布; 3) 多种货物可以混装,并保证不留空隙。 模型建立 决策变量:用 x ij 表示第 i 种货物装入第 j 个货舱的重 量 ( 吨 ) ,货舱 j = l, 2, 3 分别表示前仓、中仓、后仓. 决策目标是最大化总利润,即 Max Z = 3100(x 11 + x 12 + x 13 ) (x 21 + x 22 + x 23 ) (x 3l + x 32 + x 33 ) (x 41 + x 42 + x 43 ) (13)
19 约束条件包括以下 4 个方面: 1) 供装载的四种货物的总重量约束,即 x 11 + x 12 + x 13 18 (14) x 21 + x 22 + x 23 15 (15) x 31 + x 32 + x 33 23 (16) x 41 + x 42 + x 43 12 (17) 2) 三个货舱的重量限制,即 x 11 + x 21 + x 31 + x 41 10 (18) x 12 + x 22 + x 32 + x 42 16 (19) x 13 + x 23 + x 33 + x 43 8 (20)
20 3) 三个货舱的空间限制,即 480x x 2l + 580x x 41 6800 (21) 480x x x x 42 8700 (22) 480x x x x 43 5300 (23) 4) 三个货舱装入重量的平衡约束,即
21 模型求解 将以上模型输入 LINDO 求解,可以得 到: OBJECTIVE FUNCTION VALUE 1)
22 VARIABLE VALUE REDUCED COST X X X X X X X X X X X X
23 实际上,不妨将所得最优解作四舍五入, 结果为货物 2 装入前仓 10 吨、装入后仓 5 吨;货 物 3 装人中仓 13 吨、装入后仓 3 吨;货物 4 装人 中仓 3 吨.最大利润约 元. 评注 初步看来,本例与运输问题类似, 似乎可以把 4 种货物看成 4 个供应点, 3 个货舱 看成 3 个需求点 ( 或者反过来,把货舱看成供应 点,货物看成需求点 ). 但是,这里对供需量的 限制包括两个方面:重量限制和空间限制,且 有装载均匀要求. 因此它只能看成是运输问题 的一种变形和扩展.
24 附例 1 的 matlab 程序: (n4_2ex01.m in Matlab/work) %4.2,p93,example 1, 2004/7/18 f=[ ]; % Both f=[…] or f=[…]' are OK! Aeq=[ ; ; ]; beq=[ ]';
25 A=[ ; ; ; ]; A=[A;-A]; b=[ ]; lb=zeros(11,1); [x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb)
26 说明: 线性规划为 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) 等. 运行后,要知道结果,则
27 x = lambda.lower = ans = fval = e+004
28 lambda.ineqlin = ans = lambda.eqlin = ans = (lambda 中为各约束的 影子价格 ) 作业:对本节的其它数值例, 用 Matlab 编程计算.