1. 对偶问题简介
1.1 一般定义
考虑一般性优化问题:minx∣c(x)≥0f(x)\min_{x|c(x)\ge 0} f(x)minx∣c(x)≥0f(x)
拉格朗日法可以将原问题变换为:minx∣c(x)≥0maxλ≥0(f(x)−λc(x))\min_{x|c(x)\ge 0}\max_{\lambda\ge 0}(f(x)-\lambda c(x))minx∣c(x)≥0maxλ≥0(f(x)−λc(x))。
将min和max做一个翻转,称做原问题的对偶问题:
maxλ≥0minx∣c(x)≥0(f(x)−λc(x))\max_{\lambda\ge 0}\min_{x|c(x)\ge 0}(f(x)-\lambda c(x))maxλ≥0minx∣c(x)≥0(f(x)−λc(x))。
其中λ\lambdaλ称作对偶变量。
1.2 线性规划的对偶问题
原问题minz=cx\min z=cxminz=cx
s.t. Ax≥bAx\ge bAx≥b
我们按照上面的步骤,原问题等价于minx∣Ax≥bmaxy≥0(cx−y(Ax−b))\min_{x|Ax\ge b}\max_{y\ge 0}(cx-y (Ax-b))minx∣Ax≥bmaxy≥0(cx−y(Ax−b)),翻转得到:maxy≥0minx∣Ax≥b(cx−y(Ax−b))\max_{y\ge 0}\min_{x|Ax\ge b}(cx-y (Ax-b))maxy≥0minx∣Ax≥b(cx−y(Ax−b))
由KKT条件,我们有c−yA=0c-yA=0c−yA=0,得到对偶问题:
maxbTy\max b^TymaxbTy
s.t. ATy=cTA^Ty= c^TATy=cT
y≥0y\ge 0y≥0
下面是一个例子:
牢记对偶问题推导过程,快速写出对偶问题:左边的问题等价于
maxxminy(4x1...)+y1(15−5x1...)+...+y6x1+...\max_x\min_y(4x_1...)+y_1(15-5x_1...)+...+y_6x_1+...maxxminy(4x1...)+y1(15−5x1...)+...+y6x1+...
等价于
miny≥0maxx(15y1+...)+x1(4−5y1...+y6)+...\min_{y\ge0}\max_x(15y_1+...)+x_1(4-5y_1...+y_6)+...miny≥0maxx(15y1+...)+x1(4−5y1...+y6)+...
等价于
miny15y1+...\min_y 15y_1+...miny15y1+...
s.t.
4−5y1...+y6=04-5y_1...+y_6=04−5y1...+y6=0,等价于4−5y1...≤04-5y_1...\le04−5y1...≤0(这里是重点,注意y6y_6y6的符号)
…
yi≥0y_i\ge0yi≥0
对偶问题的形式多样,关键几点如下:
- 目标函数->约束rhs:max和min互换,c和b互换。注意max问题以rhs为准,min问题以lhs为准。
- 变量约束->约束符号:变量和约束的乘积要求>=0,比方上面的例子中,原问题变量约束>=0,对应对偶约束符号>=0;假若原问题变量无约束,对应对偶约束符号=0;
- 约束符号->变量约束:其实还是要求变量和约束的残差的乘积要求>=0,只不过因为目标函数是max问题,因此需要从约束rhs的角度来看的,所以约束符号也需要从rhs角度来看,所以在上面的例子中,原问题约束条件虽然时<=,但是从rhs的角度来看是>=,因此对应对偶变量>=0;假若原问题约束条件为=,从rhs角度看还是=,因此对应对偶变量无约束。
总结一下:
maxA1x≤b1,A2x=b2,x≥0cx\max_{A_1x\le b_1,A_2x= b_2,x\ge 0}cxmaxA1x≤b1,A2x=b2,x≥0cx的对偶问题为
minA′y≥c,y1≥0b1y1+b2y2\min_{A'y\ge c,y_1\ge 0}b_1y_1+b_2y_2minA′y≥c,y1≥0b1y1+b2y2
2. 对偶问题的性质
- 对称性:对偶问题的对偶问题是原问题
- 弱对偶定理:原问题(primal)和对偶问题(dual)的可行域记作zpz_pzp和zdz_dzd,若x∈zp,y∈zdx\in z_p,y\in z_dx∈zp,y∈zd,则对于最小化问题,有cTx≤bTyc^Tx\le b^T ycTx≤bTy。等号当且仅当x,yx,yx,y都是各自问题的最优解时取得。
- 强对偶定理:若原问题有有限最优解,那么对偶问题也有有限最优解,且最优解相等。
- 互补松弛定理:若x∈zp,y∈zdx\in z_p,y\in z_dx∈zp,y∈zd,则下面两者等价:(a) x,yx,yx,y都是各自问题的最优解;(b) yT(Ax−b)=0y^T(Ax-b)=0yT(Ax−b)=0并且(yTA−cT)x=0(y^TA-c^T)x=0(yTA−cT)x=0
3. 对偶单纯形法
对偶单纯形法和单纯形法完全可以转置过来看待。直观来看,原问题是保持b≥0b\ge 0b≥0,pivoting使得c≥0c\ge 0c≥0;而对偶问题是保持c≥0c\ge 0c≥0,pivoting使得b≥0b\ge 0b≥0。由于原问题一般约束比变量少,所以对偶问题很容易给出初始可行解,不需要使用两阶段法。
对于MILP问题,商用求解器也默认使用对偶单纯形法求解其松弛线性规划问题。变量分支后,左右两个节点和父节点的差别在于多了一个约束条件,两个节点可以从父节点的最优解出发去求解,能很大程度提高求解速度。我们来推导一下:
假设原问题是:
mincTx\min c^TxmincTx
Ax=bAx=bAx=b
x≥0x\ge 0x≥0
xi∈Z,∀i∈Ix_i\in Z,\forall i\in Ixi∈Z,∀i∈I
假设父节点的基为BBB,进行分支的变量为xj=βjx_j=\beta_jxj=βj,先看左节点,添加的约束条件为:
xj+s=⌊βj⌋x_j+s = \lfloor \beta_j\rfloorxj+s=⌊βj⌋,(xB,s)(x_B,s)(xB,s)构成了一组基变量,并且s=⌊βj⌋−βj<0s = \lfloor \beta_j\rfloor-\beta_j<0s=⌊βj⌋−βj<0,这组基对于原问题是不可行的,但是对偶问题是可行的~因此可以用对偶单纯形法去求解分支问题。
我们来看一个例子做对比:
化为标准型:
没有直观的初始可行解,因此使用两阶段法,添加人工变量后进行求解;
对偶单纯形法则不需要使用两阶段法,由于对偶后yyy变为无约束变量,因此很容易求得初始解为y1=y2=0y_1=y_2=0y1=y2=0。两者的对比如下: