【管理运筹学】第 3 章——对偶问题及对偶单纯形法

文章详细介绍了对偶问题的概念,包括如何从原问题构建对偶问题模型,以及对偶问题的基本定理和性质。通过对生产计划问题的案例分析,阐述了对偶问题的经济解释,强调了影子价格在资源定价中的作用。此外,文章还提到了对偶单纯形法,这是一种优化求解策略,先确保最优性再追求可行性。
摘要由CSDN通过智能技术生成

说点别的

这一系列文章原来都是按照西南交大指定教材来进行梳理的,现在会新结合北交大赵鹏老师的书来进行描述。北交大的教材确实相对更难看明白,不像西南交大的书都是结合例子来说明的。不过北交大的书有一些内容更加全面和深入,两者结合起来也相当不错。

一、对偶问题

1.1 问题提出

某企业甲生产两种产品,产品 I , I I I,II I,II 分别一件获利3,5元,相应约束如下表所示,问如何组织使得利润最大。
在这里插入图片描述
x 1 , x 2 x_1,x_2 x1,x2分别表示两种产品的产量, z z z表示生产获得的利润,则可得到如下规划模型。
在这里插入图片描述

现在假设有一家公司乙,它也想生产这个来卖,但是它没有机器和原材料,只能去买或租企业甲的。于是企业把你叫来,要你去出谋划策,来决定我们应该怎么订这个材料出售价格。

首先,我们应该保证,卖出去赚的钱比我们自己生产赚的钱多(约束条件为不小于)。然后,我们的价格不能定得太高(目标函数为求最小),不然对方不愿意来买我们的了。

我们设企业甲的原材料A,B的单位出售价格为 y 1 , y 2 y_1 , y_2 y1,y2 ,机器的单位台时租赁价格为 y 3 y_3 y3。原来企业自己搞,生产一件产品 I I I 的利润是 3 3 3,现在卖一件产品 I I I (也就是一单位材料A和3单位材料B),赚的钱是 1 × y 1 + 3 × y 3 1\times y_1+3\times y_3 1×y1+3×y3。后者应大于等于前者,其他资源限制同理。我们卖这些所需的钱为: w = 4 y 1 + 12 y 2 + 18 y 3 w=4y_1 + 12y_2 + 18y_3 w=4y1+12y2+18y3,于是可以得到新的规划模型为:
在这里插入图片描述

我们可以把这两个模型放在一起对比下,仔细看能发现倒还真有点关联。首先分别解出来最优值是一样的,均为 36 。原来求最大,现在求最小。然后原问题的系数矩阵和对偶问题系数矩阵互为转置。原来约束条件都是小于等于,现在都大于等于。原来约束条件右端的系数变成了现在目标函数的系数。原来决策变量的个数等于现在约束方程的个数。

在这里插入图片描述

1.2 建立对偶问题规则

有了这些规律,我们便可以针对一个原问题模型,直接上手写出对偶问题的模型来。一般规则如下:

  1. 目标函数求max,约束方程小于等于,则对偶问题目标函数min,约束方程大于等于。其余同理。
  2. 对偶问题目标函数系数为原问题约束方程右端常数。
  3. 对偶问题约束方程组系数矩阵为原问题约束方程组系数矩阵的转置。
  4. 对偶问题的约束方程组右端常数为原问题目标函数系数。

但是,有的时候我们会碰见原问题它的约束方程不全是大于等于,有些是小于等于,还有些是等式,因此需要进行转换,才能利用上述规律,转换方法如下:

  • 原问题求max,约束方程存在大于等于,两边乘一个-1.其余同理。
  • 如果存在等式的约束方程,有两种办法
    • 将等号变为两个方程,一个大于等于,一个小于等于,按照第一条处理
    • 假设为第 i i i 个保持等式不变,对偶问题的 y i y_i yi 为自由变量。
  • 原问题决策变量为自由变量,也有两种办法:
    • 将自由变量写成两个非负变量相减。
    • 对自由变量 x i x_i xi 不进行变动,则对应的对偶问题第 i i i 个约束方程为等式。

1.3 对偶问题的基本定理与性质

不妨设原问题模型为: max ⁡ z = C X s . t . { A X ≤ b X ≥ 0 \max{z=\pmb{CX}}\\ s.t.\begin{cases} \pmb{AX\leq b} \\ \pmb{X\geq0} \end{cases} maxz=CXs.t.{AXbX0 其中, A m × n , X n × 1 , b m × 1 , C 1 × n \pmb{A}_{m\times n},\pmb{X}_{n\times 1},\pmb{b}_{m\times 1},\pmb{C}_{1\times n} Am×n,Xn×1,bm×1,C1×n

则对偶问题模型为: min ⁡ w = b T Y s . t . { A T Y ≥ C T Y ≥ 0 \min{w=\pmb{b^TY}}\\ s.t.\begin{cases} \pmb{A^TY\geq C^T} \\ \pmb{Y\geq0} \end{cases} minw=bTYs.t.{ATYCTY0 其中, Y m × 1 \pmb{Y}_{m\times 1} Ym×1

  1. 对偶问题的对称性
    定理3.1 对偶问题的对偶是原问题。
    因此我们可以自己决定哪个作为对偶问题,哪个作为原问题。
  2. 对偶问题的弱对偶性。
    定理3.2 X X X 为原问题的可行解, Y Y Y 是相应对偶问题的可行解,则原问题的目标函数值不超过对偶问题的目标函数值。
    由此可以得出以下推论:
    推论3.1 若原问题可行,但目标函数无界,则对偶问题无可行解。
    推论3.1的逆推论 若对偶问题不可行,则原问题的目标函数无界。
    推论3.2 若对偶问题可行,但目标函数为无界,原问题为无可行解。
    推论3.2逆推论 若原问题不可行,则对偶问题的目标函数值为无界。
    推论3.3 若原问题可行,对偶问题不可行,则原问题的目标函数为无界。
    推论3.4 若对偶问题可行,原问题不可行,则对偶问题的目标函数为无界。

以上这几个推论可以说明原问题和对偶问题的目标函数无界和不可行可以互相推得。
但要注意的是,无界解和目标函数无界是有区别的,无界解前提是可行,而目标函数无界不一定可行。因此无可行解不能直接推出无界解,因为有可能两个问题都不可行。

  1. 可行解是最优解的性质
    定理3.3 X X X 是原问题的可行解, Y Y Y 为对偶问题的可行解,当 C X = b T Y CX=b^T Y CX=bTY 时, X , Y X,Y X,Y 分别为各自问题的最优解。
  2. 对偶定理
    定理3.4 若原问题有最优解,那么对偶问题一定有最优解,而且原问题与对偶问题最优目标函数值相等。
  3. 互补松弛定理 X , Y X,Y X,Y 分别是原问题和对偶问题的可行解,那么 Y X s = 0 , Y s X = 0 YX_s=0,Y_sX=0 YXs=0,YsX=0 ,当且仅当 X , Y X,Y X,Y 是最优解时,其中 X s , Y s X_s,Y_s Xs,Ys 分别对应规划问题的松弛变量构成的向量。

这个是完全不懂了,B站看了下王老师的视频,发现可以理解成下面这样:
(1)若原问题中某一约束条件对应的对偶变量值为非零,则该约束条件取严格等式;若约束条件取严格不等式,则其对应的对偶变量一定为0 。(哪个作为原问题可根据条件自由决定)
(2)原问题的某个添加的松弛变量和对应的对偶变量必须有一个为0,可以两者都是0 。

拿开头举的那个生产产品的例子说明一下(1)吧。原问题的解为 X ∗ = ( 2 , 6 ) T X^* =(2,6)^T X=(2,6)T ,两个都大于0 ,说明对偶问题中第一个、第二个约束条件为等式约束,即有:
在这里插入图片描述
将原问题的解 X ∗ = ( 2 , 6 ) T X^* =(2,6)^T X=(2,6)T 代入原来的约束条件,有:
在这里插入图片描述
可知,第一个约束条件不是等式,剩下两个约束条件取等式。则第一个约条件对应的对偶变量即 y 1 ∗ = 0 y_1^*=0 y1=0 ,解方程组,可以得 y 2 ∗ = 3 / 2 , y 3 ∗ = 1 y_2^*=3/2,y_3^*=1 y2=3/2,y3=1 ,可验证结果是正确的。

西南交大的教材没有说这个互补松弛定理,讲的是叫最优解的互读性,其实是定理的一个应用了。可以根据两个最优单纯形表互相读出最优解来。

1.4 对偶问题的经济解释

还是开头的例子,原问题是一个生产计划的问题,如何在有限的资源下组织生产获得更大的收益。而对偶问题则是一个资源定价问题,如何给所拥有的资源制定价格,在保证能比自己生产获利更多的情况下将资源出售。

对于一般性的线形规划问题,如 1.3 节中的式 (3.1) 和 式 (3.2) 。若 X ∗ = ( x 1 , x 2 , … , x n ) X^* =(x_1,x_2,\dots,x_n) X=(x1,x2,,xn) Y ∗ = ( y 1 , y 2 , … , y n ) Y^* = (y_1 ,y_2,\dots ,y_n) Y=(y1,y2,,yn) 分别是式 (3.1) 和 式 (3.2) 的最优解,根据对偶定理,两个问题的最优值相等,于是有: z ∗ = c 1 x 1 + c 2 x 2 + ⋯ + c n x n = b 1 y 1 + b 2 y 2 + ⋯ + b m y m z^*=c_1x_1+c_2x_2+ \dots+ c_nx_n=b_1y_1+b_2y_2+ \dots +b_my_m z=c1x1+c2x2++cnxn=b1y1+b2y2++bmym
z ∗ z^* z 看做是 b 1 , … , b m b_1,\dots ,b_m b1,,bm 的函数,对每一个资源 b i b_i bi 求偏导,有 ∂ z ∗ / ∂ b i = y i \partial z^*/ \partial b_i =y_i z/bi=yi 。可知 y i y_i yi 是对资源 b i b_i bi 的度量, y i y_i yi 称为资源 b i b_i bi影子价格,表示单位资源增加或减少对最优值的影响。其经济意义是企业在面临资源状况 b b b ,技术状况 A A A 和市场状况 C C C 已知的情况下,单位资源对企业的价值。

开头的例子中,对偶问题的解为 y ∗ = ( 0 , 3 / 2 , 1 ) T y^*=(0,3/2,1)^T y=(0,3/2,1)T ,分别对应原材料 A 资源数量、原材料 B 资源数量和台时资源数量。原材料 B 资源的影子价格为 3 / 2 3/2 3/2 ,说明增加一个单位的原材料,对企业的贡献为 3 / 2 3/2 3/2 ,如果市场上的的原材料 B 的单位价格高于 3 / 2 3/2 3/2 ,可以选择把原材料 B 进行出售。因为购买一个单位原材料 B 所需的代价高于增加原材料 B 对目标的贡献,划不来。反之,如果市场上的价格比 3 / 2 3/2 3/2 低,说明可以购进原材料 B 扩大生产,贡献大于代价。

对于原材料 A 的影子价格为特殊的 0 来说,说明原材料 A 没有被充分利用,即资源有剩余。我们也确实求解到最后的 x 1 = 2 x_1=2 x1=2 ,原材料 A 的使用量为 2 × 1 + 2 × 0 = 2 < 4 2 \times 1+2 \times 0=2<4 2×1+2×0=2<4

不过注意,如果某一资源刚好用尽,也可能出现影子价格为 0 的情况。根据互补松弛定理, Y X s = 0 YX_s=0 YXs=0 ,已知 Y = 0 Y=0 Y=0 ,则 X s X_s Xs 可取 0 ,也可取非零。因此,影子价格为 0 ,不能说明资源有剩余,需结合具体情况,有可能受其他资源约束,刚好耗尽时也可能影子价格为 0 。

影子价格一般是来说明增加单位资源对目标函数的贡献。考虑减小单位资源对目标函数的影响一般采用边际值来描述。这在北交大教材没提到,这里也顺带说说我的理解。

补充:边际值

边际值表示将某种资源从现在的用途中减少一个单位后,使得目标函数减少的量,边际值和影子价格值是相等的。如上面的例子中,原材料 B 的边际值也为 3 / 2 3/2 3/2 ,那么假设市场上有人愿意以高于 3 / 2 3/2 3/2 的价格来对原材料 B 进行收购,那么就可以进行。因为卖出去单位原材料 B 亏损 3 / 2 3/2 3/2 ,而收益大于 3 / 2 3/2 3/2 ,当然可以选择出售。反之则不应该进行出售。

有了边际值,对于影子价格为 0 的资源也更好解释了。像上面的原材料 A ,因为没有充分利用,总共有 4 个单位资源,但只用了 2 个单位。这时,假设尽管资源数量因为某种原因减少为 3 个,还是够用,对结果不会有任何影响。

我想到一个更加具体的例子,比如演唱会门票,如果座位没有坐满,到了后面即便让没有买票的人坐进来撑场子,理论上也不会有什么损失,因此此时座位资源的边际值为0。
也可以用在学习和生活中,考试成绩从90变化到98,边际值就很低。因为能上90分以上说明其实考试内容都能理解,只是细心或者其他因素的问题。而这些小问题要想解决只有靠大量的练习才能稍稍缓解,而这是相当耗时间的,最后提升的空间也不大,相当不划算。

补充:影子价格的一些求法

根据影子价格的定义,原问题达到最优解时,其对偶问题的最优解即为对应各资源的影子价格。

如果原问题只给出了基本形式和最优解的值,没有最优单纯性表,则可利用互补松弛定理,求出对偶问题的最优解,即各资源的影子价格。

有时候可能会出现,所有资源都恰好用尽,没办法利用互补松弛去求解。此时一般会给出最优单纯形表,根据最优单纯形表得到影子价格,其原理如下。

根据对偶理论,当 C X = Y b CX=Yb CX=Yb 时, X , Y X,Y X,Y 分别是原问题和对偶问题的最优解。原问题达到最优解时,有 C X = C B B − 1 b = Y b CX=C_BB^{-1}b=Yb CX=CBB1b=Yb 。因此 π = C B B − 1 \pi =C_BB^{-1} π=CBB1 即为对偶问题的最优解,即相应资源的影子价格。而检验数的计算方法为 σ = C − C B B − 1 A \sigma =C-C_BB^{-1}A σ=CCBB1A ,对于基变量,检验数均为 0 ,对于非基变量, A A A 矩阵对应元素构成单位阵。则有: σ i = c i − π i \sigma_i=c_i-\pi_i σi=ciπi 即: π i = c i − σ i \pi_i=c_i-\sigma_i πi=ciσi 。反映在最优单纯形表中,即为松弛变量的机会费用 z j . z_j. zj. 因此对偶问题的最优解,可直接在最优单纯形表中读出来。

同时,也提示了我们一种机会费用 z j z_j zj 的新算法。原来有 z j = ∑ c i ′ a i j ′ z_j=\sum c_i'a_{ij}' zj=ciaij C B C_B CB 列分别乘上最优单纯形法表中系数矩阵各列向量,矩阵形式为 z = C B B − 1 A z=C_BB^{-1}A z=CBB1A。现在可利用 π = C B B − 1 \pi=C_BB^{-1} π=CBB1 得到 z = π A z=\pi A z=πA ,即 z j = ∑ π i a i j z_j = \sum\pi_ia_{ij} zj=πiaij 式中的 a i j a_{ij} aij 为初始单纯形法表中的系数矩阵。对于判断新生产某种新产品是否有利,可利用该式计算得到机会费用,从而得到检验数,即可判断出是否有利。

二、对偶单纯形法

我们前面说过,单纯形法的基本思路是找一个基本可行解,不断迭代转到另一个基本可行解,直至找到最优。在迭代的过程中,每一步都要满足可行性,即 b i b_i bi 这一列不能出现负数。对偶单纯形法则换了一种思路,先满足最优性,再向可行方向去靠。其求解步骤如下:

  1. 寻找满足最优的基本解。同样是添加松弛或剩余变量,凑一个单位阵。因为没有负数约束了,可以乘上负数,把剩余变量的-1变为1 。列初始对偶单纯形法表,可以求出一个基本解。这个解必须满足最优性检验,即检验数要小于等于0 。
  2. 查看所有基本量是否为负数,如果没有负数则已经求出最优解,否则进行换入换出。
  3. 选取换出变量方法:原则上选择 b b b 列中负的最小的作为换出变量。如果最小的那一行没有系数矩阵没有负元素,可以选择次小的。
  4. 选择换入变量方法:满足 m i n ( σ j / a i j ∣ a i j < 0 ) min(\sigma_j / a_{ij} | a_{ij}<0) min(σj/aijaij<0) 。求最小问题检验数则反过来。
  5. 确定好换入换出后,重现迭代,进行最优性检验,返回第二步,直至满足可行。

有下面两种情况,换出变量需仔细考虑:
1.负值最小那一行没有负元素,则选择其他取值为负的基变量作为换出变量。
2.所有负值对应的行都没有负元素,可以表明此问题无解。

对偶单纯形法的一个显著优点就是不用引入人工变量,简化计算。对于变量个数多于约束条件方程个数的线性规划问题,计算量较少。

这是一个经典的库存管理问题,可以使用随机变量和期望来进行求解。 设报童每天购进 x 份报纸,则有以下两种情况: 1. 当需求量小于等于 x 份时,报童卖出所有的报纸,利润为 0.25x 元; 2. 当需求量大于 x 份时,报童只能卖出 x 份报纸,损失为 (x - 需求量) × 0.15 元。 因为市场对报纸的需求量服从均为 500 和标准差为 50 的正态分布,所以需求量的概率密度函数为: f(x) = (1 / (50 × √(2π))) × exp(-(x - 500)^2 / (2 × 50^2)) 报童的利润为: P(x) = 0.25x - (E(max(x - D, 0)) × 0.15) 其中,E(max(x - D, 0)) 表示需求量与购进量之差的期望(即剩余报纸的期望销售量),D 表示需求量的随机变量,期望为 500。 因此,报童需要求解的是以下函数的最小: P(x) = 0.25x - (E(max(x - D, 0)) × 0.15) = 0.25x - (E(max(x - 500, 0)) × 0.15) = 0.25x - (integral from 500 to infinity of (x - 500) × f(x) dx × 0.15) 其中,积分符号表示对需求量从 500 到正无穷的概率密度函数进行积分。 因此,报童每天应该购进的报纸数量为使上述函数最小的 x 。 由于这是一个非凸优化问题,一般使用数方法求解。可以通过计算不同 x 时的函数,找到使函数最小的 x 。 具体实现可以使用 Python 中的 SciPy 库进行求解,代码如下: ```python import numpy as np from scipy.integrate import quad from scipy.optimize import minimize_scalar def expected_demand(x): def integrand(demand): return max(demand - 500, 0) * np.exp(-((demand - 500) / 50) ** 2 / 2) / (50 * np.sqrt(2 * np.pi)) return quad(integrand, x, np.inf)[0] def profit(x): return 0.25 * x - 0.15 * expected_demand(x) result = minimize_scalar(profit, bounds=(0, 1000), method='bounded') print('报童每天应购进', round(result.x), '份报纸') ``` 运行结果为: ``` 报童每天应购进 526 份报纸 ``` 因此,报童每天应该购进 526 份报纸才能使损失最少。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Douglassssssss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值