对偶理论
对偶问题的提出
对偶问题的用途
- 原问题约束多、变量少时,求解对偶问题能够降低计算时间
使用单纯形法时,如果原问题约束多变量少,转换成对偶问题,就是约束少变量多。约束的减少能够有效降低单纯形法的计算时间
- 帮助证明原问题无解
类似”证明无罪比证明有罪更难“,要证明原问题有解,只需要找出一个满足约束的点,但是想证明原问题无解,总不能遍历所有的点来证明。对偶问题的出现为证明原问题无解提供了新思路。
- 便于进行敏感度分析
除了得到最优解,我们可能还会关注”如果某些一直条件发生变化,对最优解的影响程度如何“,这就是敏感度分析
- 增加敏感度分析的直观程度(对偶问题的最优解就是原问题约束的影子价格)
- 在改变某些条件导致原问题无可行解时,可以借助仍然有可行解的对偶问题来分析。
对偶问题的一般形式
若原问题为LP1
max z = CXs.t.{AX ≤ bX ≥ b
则其对偶问题定义为 LP2
min w = YTbs.t.{ATY ≥ CTY ≥ 0
若原问题并非LP1形式,则我们可以首先将其转化为LP1形式,然后按照前面定义即可计算出其对偶问题。
i=1∑naijxj = bi⟹ ⎩⎨⎧i=1∑naijxj ≤ bii=1∑n−aijxj ≤ −bii=1∑naijxj ≥ bi ⟹ i=1∑n−aijxj ≤ −bi
可以采用如下方法进行转换:

对照可以看出:
- 原问题中求解目标函数极大化,对偶问题求解目标函数极小化
- 原问题中约束条件个数等于对偶问题中变量的个数,原问题中变量个数等于对偶问题中约束条件个数
- 原问题中约束条件符号为 ≤,对偶问题中约束条件符号为 ≥
- 原问题目标函数的系数是其对偶问题约束条件的右端项,而原问题约束条件的右端项是其对偶问题目标函数的系数
举个例子:
原问题:
min z = 7x1 + 4x2 − 3x3s.t.⎩⎨⎧−4x1+2x2−6x3 ≤ 24−3x1−6x2−4x3 ≥ 15 5x2+x3 = 30x1≤0,x2无约束,x3≥0
首先把C和b互换,A转置
max w = 241530s.t.⎩⎨⎧−4−30 72−65 4−6−41 −3
最小化转最大化,所以约束条件和原问题变量的符号相反(也就是表格中从右往左),变量和原问题约束条件符号相同:
max w = 24y1 + 15y2 + 30y3s.t.⎩⎨⎧−4y1−3y2 ≥72y1−6y2+5y3 =4−6y1−4y2+1y3≤−3
对偶问题的基本性质
- 弱对偶性:如果X是原问题的可行解,Y是对偶问题的可行解,则CX ≤ YTb
证明:YT≥YTAX = (YTAX)T = XTATY≥XTCT = CX
推论:
- 最优性:如果X是原问题的可行解,Y是对偶问题的可行解, 且CX = YTb,则X和Y分别为原问题和对偶问题的最优解
- 无界性:如果原问题(对偶问题)具有无界解,则其对偶问题(原问题)无可行解
- 强对偶性:如果原问题有最优解,则其对偶问题也一定具有最优解,
且max z = min w
证明:设B为原问题标准形式的可行解基,且其基解为最优解,则由最优性条件应有检验数全部小于等于零:
−CBB−1≤0,θ=C−CBB−1A≤0
从而可得:
ATB−TCBT≥CT,B−TCBT≥0
所以B−TCBT是对偶问题的一个可行解,且
(B−TCBT)Tb=CBB−1b=max z
由最优性可知,B−TCBT为对偶问题的最优解,且max z = min w
- 互补松弛性:在线性规划问题的最优解中,如果某一约束条件的对偶变量值非零,则该约束条件严格取等,反之,如果约束条件取不等式,则对应的对偶变量一定为0,可以表示为YT(b−AX) = 0
证明:由强弱偶性可知CX = YTb,
又∵ CX=XTCT≤XTATY=YTAX≤YTb
∴YTAX=YTb⟹YT(b−AX) = 0
- 基解互补性:原问题及其对偶问题之间存在一对互补的基解,其中原问题的松弛变量对应对偶问题的变量对偶问题的剩余变量对应原问题的变量.这些互相对应的变量如果在一个问题的解中是基变量则在另一个问题的解中是非基变量;将这对互补的集解分别带入原问题和对偶问题的目标函数中有z = w
影子价格
考察如下对偶问题
max z = CXmin w = YTbs.t.{AX ≤ bX ≥ bs.t.{ATY ≥ CTY ≥ 0
定义:若P的某个约束条件的右端项常数 bi (第i种资源的拥有量)增加一个单位时,所引起目标函数最优值 z∗ 的改变量称为第i种资源的影子价格,其值等于对偶问题中对偶变量yi.
假设 X∗和Y∗ 分别为原问题和对偶问题的最优解,由对偶问题的基本性质有
z∗=∑cjxj∗=∑bjyj∗
∵ 某个 Δbi=1,所以最优解的变化 Δz∗=yi∗
也就是对偶变量 yi 就是第i个产品的影子价格 ∂bi∂z∗=yi∗
影子价格是在资源最优利用条件下对单位资源的估价,这种估价不是资源实际的市场价格。影子价格是一种机会成本。
根据影子价格得出的结论
假设某种资源的单位市场价是mi,则
- 当ji∗>mi时,企业购进这种资源后增加的利润多于资源收购价,单位纯利为ji∗−mi,企业有利可图
- 相反,当ji∗<mi时,则企业会选择有偿转让这种资源,可获单位纯利ji∗−mi,否则企业无利可图,甚至亏损
根据互补松弛性:YT(b−AX) = 0,可以进一步得出结论:
- 生产过程中如果某种资源未得到充分利用时(资源约束不严格取等),该种资源的影子价格为0(对偶问题的最优解对应变量为0)
- 若当资源的影子价格不为0时,表明该种资源在生产中已耗费完(资源约束严格取等)
影子价格对单纯形表计算的解释
在单纯形表中的检验数为σj=cj−CBB−1Pj=cj−i=1∑maijyi,其中cj代表第j种产品的产值,i=1∑maijyi代表生产一个单位该种产品所消耗的各项资源的影子价格的总和,即产品的机会成本
则检验数σj的经济意义如下
- 当σj>0时,即产值大于记会成本时,表明生产该项产品更有利,可在计划中安排
- 反之,当σj<0时,表明用这些资源生产别的产品更有利,不应用于生产该产品
对偶单纯形法
对偶单纯形法是求解线性规划的另一个基本方法。它是根据对偶原理和单纯形法原理而设计出来的,因此称为对偶单纯形法。对偶单纯性法提高了对求解线性规划问题的效率,它通常具有以下优点:
- 初始基解可以是非可行解, 当检验数都为负值时, 就可以进行基的变换, 不需加入人工变量, 从而简化计算;
- 对于变量多于约束条件的线性规划问题,用对偶单纯形法可以减少计算量,在灵敏度分析及求解整数规划的割平面法中,有时适宜用对偶规划单纯形法。
而在对偶单纯形方法中,我们要求:所有检验数σ<0,但是b无要求。这时我们希望通过转化可行解使得b=(b1,b2,⋯,bm)T更接近≥0,同时保持σ≤0,直到b≥0,找到最优解。
对偶单纯形法计算步骤:
- 确定换出基变量
对于小于零的bi,令br=min(bi),所对应的变量xr为换出基变量。
- 确定换入基变量
- 为使迭代后的表中第r行基变量为正值,
因而只有对应arj<0(j=m+1,⋯,n)(系数均为负数)的非基变量才可以考虑
- 为使迭代后表中对偶问题的解仍为可行解,令
θ=jmin{arjσj∣arj<0}=arsσs
称ars为主元素,xs为换入基变量
- 用换入基变量替换换出基变量,得到一个新的基
进行初等行变换后,检查所有bi是否≥0
- 重复上述三个步骤,直至b≥0
单纯行表如下:

单纯形法与对偶单纯形法的比较
|
单纯形法 |
对偶单纯形法 |
原理 |
保证原问题是可行解的情况下
向对偶问题可行的方向迭代
|
保证对偶问题是可行解的情况下
向原问题可行的方向迭代 |
限制条件 |
单纯形表的 b ≥ 0(找到基可行解) |
检验数字 σ ≤ 0 |
最优解判断 |
看非基变量的检验数是否都 ≤ 0 |
看对偶单纯形表的 b 是否都 ≥ 0 |
变量替换 |
先确定入基变量,最小换最大 |
先确定换出变量,最小换最大 |
灵敏度分析
在前面的线性规划问题中,我们都是假定问题中的A,b,C是已知的。但是实际上这些参数往往是一些估计和预测的数字,如市场条件发生变化,C的值就会变化,A会随着工艺技术条件的改变而改变,而b则是根据资源投入后能产生多大经济效果来决定的一种决策选择。
因而一个自然的问题就是当这些参数中的一个或者几个发生变化时,问题的最优解会有什么变化,或者这些参数在一个多大的范围内变化时,问题的最优解或者最优基不变,这就是灵敏度分析所要解决的问题。
在使用单纯形法解决线性规划问题时,我们需要先通过初等行变换基变量对应的子矩阵化为单位矩阵,因此存在一个方阵D使得D(A b)=(A′ b′),易得D = B−1,一般来讲,我们考虑如下几种问题的变化:
- 当某个cj变化时,A′ b′无变化,非基变量的检验数Δσj=−aijΔcj,要让最优解不发生变化,我们要求所有σj∗=σj+Δσj≤0
- 当某个bj变化时,Δb′=B−1Δb,要让最优解不发生变化,我们要求
b∗=b+B−1Δb≥0
- 增加某个变量xj,对应的系数列向量为Pj,则单纯形表中需要新添加一列
Pj′=B−1Pj,然后计算相应的检验数,继续用单纯形法计算最优解
- 增加一个约束条件,新产生一个剩余变量或者松弛变量,或者用前面学过的方法添加人工变量,将新变量加入基变量,重整单纯性表,根据 b 和 σ 的情况选择方法求出最优解。