Skip to content

18.1.4 特殊线性规划问题 ​

18.1.4.1 运输问题 ​

1. 建模 ​

m 个生产者 E1,⋯,Em 生产一种产品,各家生产的数量是 a1,⋯,am ,产品需要运输到 n 个消费者 V1,⋯,Vn ,其需求分别是 b1,⋯,bn . 从生产者 Ei 到消费者 Vj 的单位运输成本是 cij . 从 Ei 到 Vj 运输的产品数量是 xij 件. 最优运输方案是使运输成本最小. 假定这个系统是平衡的, 即供给等于需求:

(18.24)∑i=1n⁡ai=∑j=1n⁡bj

首先构建成本矩阵 C 和分布矩阵 X 如下:

(18.25a)C=(c1,1⋯c1,n⋮⋮cm,1⋯cm,n)E:E1⋮EmV:V1⋯Vn∑:(18.25b)X=(x1,1⋯x1,n⋮⋮xm,1⋯xm,n)a1⋮am∑:b1⋯bn

如果条件 (18.24) 不满足, 则需区分两种情形:

a) 如果 ∑ai>∑bj ,则引入虚构消费者 Vn+1 ,其需求为 bn+1=∑ai−∑bj , 运输成本为 ci,n+1=0 .

b) 如果 ∑ai<∑bj ,则引入虚构生产者 Em+1 ,其产能为 an+1=∑bj−∑ai , 运输成本为 cm+1,j=0 .

为了确定最优方案, 应该求解如下规划问题:

(18.26a)OF:f(X)=∑i=1m⁡∑j=1n⁡cijxij=min!CT:∑j=1n⁡xij=ai(i=1,⋯,m),(18.26b)∑i=1m⁡xij=bj(j=1,⋯,n),xij≥0.

该问题的极小出现在可行集的某个顶点. 在 m+n 个原始约束中有 m+n−1 个线性无关的约束,从而在非退化情形下,解含有 m+n−1 个正分量 xij . 为了确定最优解, 使用下列所谓的运输算法.

2. 基本可行解的确定 ​

使用西北角规则可以确定初始基本可行解:

a) 选择 x11=min{a1,b1} .(18.27a)

b) 如果 a1>b1 ,则删去 X 的第 1 列.(18.27b)

如果 a1<b1 ,则删去 X 的第 1 行.(18.27c)

如果 a1=b1 ,则或者删去 X 的第 1 行,或者删去 X 剩余的第 1 列.(18.27d)

如果只有一行而有几列, 则删去一列. 同样的的操作也适用于行.

c) a1 用 a1−x11 替代, b1 用 b1−x11 替代,并且对缩减了的分布矩阵 X 的左上角顶重复此操作.

在 a) 中得到的变量是基变量, 所有其余变量都是取零值的非基变量.

X=(x1,1x1,2x1,3x1,4x2,1x2,2x2,3x2,4x3,1x3,2x3,3x3,4)∑:a1=9a2=10a3=3∑:b1=4b2=6b3=5b4=7

01936af3-1230-7a0e-9a4a-8542777881ce_17_616_638_407_195_0.jpg

使用西北角规则确定初始极端点:

第 1 步 第 2 步

还有别的考虑运输成本方法也可以找出初始基本解 (例如见 [18.15] 中的沃格尔 (Vogel) 近似法), 并且通常会得到更好的初始解.

3. 采用单纯形法求解运输问题的解 ​

如果采用通常的单纯形法求解运输问题, 则会产生含有大量零元的十分庞大的表 ((m+n)×(m⋅n)) : 在每一列中仅有两个元等于 1. 于是就需要构造简化表,下面的步骤对应于单纯形步骤中仅涉及理论单纯形表的非零元. 成本数据矩阵包含目标函数的系数. 基变量在迭代过程中变换为非基变量, 而成本矩阵相应的元在每一步中都需要修改. 下面通过一个例子说明此方法.

a) 从成本矩阵 C 确定修改的成本矩阵 C~ :

(18.28a)c~ij=cijpi+qj(i=1,⋯,m;j=1,⋯,n),

这里要求

c~ij=0 ,如果(i, j)对应的 xij 是现时基变量.(18.28b)

C 中对应于基变量的元打上标记,并以 p1=0 代入. 其余量 pi 和 qj 也称作潜在乘子或单纯形乘子,这些量的确定应该使得 pi,qj 和带标记的成本 cij 之和为零:

C=((5)(3)278(2)(1)(1)026(3))p1=0p2=1p3=−1q1=−5q2=−3q3=−2q4=−2(18.28c)⇒C~=(000540003−230).

b) 数值

(18.28d)c~pq=mini,j⁡{c~ij}

必须确定. 如果 c~pq>0 ,则分布 X 是最优的; 否则,就选 xpq 作为一新的基变量. 在我们的例子中, c~pq=c~32=−2 .

c) 在 C~ 中,给 c~pq 以及与基变量相关的成本项打上标记,如果 C~ 包含至多有一个标记元的行或列, 则删去这些行或列. 对剩余矩阵重复这一操作, 直到不再需要进一步的删除操作.

(18.28e)C~=((0)(0)054(0)(0)(0)3(−2)3(0)).

d) 与剩下的带标记的元 c~ij 相关的元 xij 形成一个回路. 新的基变量 x~pq 被调整到正值 δ . 与带标记元相关的其余变量 c~ij 由约束确定. 在实践中,从回路第二元减去 δ ,或将 δ 加到回路第二元. 为了保持这些变量非负,量值 δ 必须选为

(18.28f)δ=xrs=min{xij:x~ij=xij−δ},

其中 xrs 将是非基变量. 在这个例子中, δ=min{1,3}=1 .

(18.28g)⇒X~=(455512),f(x―)=53.

01936af3-1230-7a0e-9a4a-8542777881ce_18_593_1657_445_250_0.jpg

然后,取 X=X~ ,重复上述程序.

C=((5)(3)2782(1)(1)9(2)6(3))p1=0p2=3p3=1q1=−5q2=−3q3=−4q4=−4(18.28h)⇒C~=((0)(0)(−2)362(0)(0)5(0)3(0))X~=(45−δ←δ↑↓5−δ←5+δ↑1+δ→2−δ)(18.28i)⇒δ=2X~=(432373),f(X)=49.

下一个矩阵 C~ 不包含任何负元,故 X~ 是最优解.

18.1.4.2 配置问题 ​

通过一个例子说明问题.

现有 n 份销售合同要分给 n 个公司,使得每家公司恰好收到一份合同. 为此必须作出分配安排使得总成本最低,这里第 i 个公司负担第 j 个合同的费用是 cij . 配置问题是一种特殊的运输问题,这里 m=n,ai=bj=1,∀i,j :

(18.29a)OF:f(x―)=∑i=1n⁡∑j=1n⁡cijxij=min!CT:∑j=1n⁡xij=1(i=1,⋯,n),(18.29b)∑i=1n⁡xij=1(j=1,⋯,n),xij∈{0,1}.

每个可行分布矩阵在其每一行和每一列恰有一个 1 , 所有其余元均为零. 然而在这样维度的一般运输问题中,一个非退化基本解会有 2n−1 个正变量. 因此,该分配问题的基本可行解是高度退化的,具有 n−1 个等于零的基变量. 从可行分布矩阵 X 出发,分配问题可以借助一般的运输算法求解. 这样做是非常耗时的. 但是,由于基本可行解的高度退化特征, 配置问题可以通过非常有效的匈牙利(Hungarian) 方法求解 (见 [18.11]).

18.1.4.3 分配问题 ​

同样通过一个例子来说明问题.

m 个产品 E1,⋯,Em 需要生产数量分别为 a1,⋯,am . 每一种产品可以在 n 台机器 M1,⋯,Mn 的任一台上生产. 在机器 Mj 上生产一件产品 Ei 需要耗时 bij 和成本 cij . 机器 j 的时间容量是 bj . 用 xij 表示机器 Mj 生产产品 Ei 的数量. 总的生产成本应该达到最小. 这个分配问题的一般模型如下:

(18.30a)OF:f(x―)=∑i=1m⁡∑j=1n⁡cijxij=min!CT:∑j=1m⁡xij=ai(i=1,⋯,m),(18.30b)∑i=1n⁡bijxij≤bj(j=1,⋯,n),xij≥0,∀i,j.

分配问题是运输问题的推广,它可以用单纯形法求解. 如果所有 bij=1 ,则可以在引入虚构产品 Em+1 (参见第 1194 页 18.1.4.1) 后使用更有效的运输算法 (参见第 1195 页 18.1.4.1).

18.1.4.4 游路问题 ​

假定有 n 个地方 O1,⋯,On . 从 Oi 到 Oj 的旅行时间是 cij . 这里 cij≠cji 是可能的. 现在要确定游客恰好一次通过每个地方并最终返回出发点所需要的最短旅程.

与配置问题相类似,在时间矩阵 C 的每行每列中恰好选择一个元,使得所选元之和最小. 数值求解这个问题的难点在于带标记元需要按照如下方式排序:

(18.31)ci1,i2,ci2,i3,⋯,cin,in+1,这里i≠j时ik≠ij,并且in+1=i1.

游路问题可以用分枝法和限界法求解.

18.1.4.5 调度问题 ​

n 种不同产品在 m 台不同的机器上按照相关产品订单进行加工. 在任何时间只能有一种产品在一台机器上加工. 每种产品在每台机器上的加工时间假定是已知的. 一种给定产品不在加工过程而处于等待加工, 以及机器出现空闲都有可能.

要求确定加工作业的最优调度, 这里目标函数选择为全部加工完成的时间, 或者加工作业中总的等待时间, 或者总的机器闲置时间. 在无等待时间或闲置时间的情形下, 往往选择完成全部加工时间之和作为目标函数.

version 1.24.0