【数学】整数线性规划问题与对偶单纯形法

我们此前探讨过了一般的单纯形法(传送门),这次则来研究所谓“对偶单纯形法”。

线性规划的对偶问题

原始的线性规划问题:
max ⁡ c T x \max c^T x maxcTx
A x ≤ b Ax \leq b Axb
x ≥ 0 x \geq 0 x0

它的对偶问题:
min ⁡ b T y \min b^Ty minbTy
A T y ≥ c A^Ty \geq c ATyc
y ≥ 0 y \geq 0 y0

容易看出,对偶的对偶就是它自身。

定理1 c T x ≤ ( A T y ) T x = y T ( A x ) ≤ y T c = c T y c^T x \leq (A^Ty)^T x=y^T(Ax)\leq y^Tc=c^Ty cTx(ATy)Tx=yT(Ax)yTc=cTy

定理2:若原始问题有一组可行解 x x x,对偶问题有一组可行解 y y y,且 c T x = b T y c^Tx=b^Ty cTx=bTy,则两个解分别是它们的最优解。(由定理1确定的上下界知,显然)

定理3:若原问题有最优解,则对偶问题有最优解。
证明:
先按照单纯形的流程做一下,在原问题引入松弛变量 u u u后转化为 A x + E u = b Ax+Eu=b Ax+Eu=b。我们找到了一组基本最优解,基向量为 x B = B − 1 b x_B=B^{-1}b xB=B1b
还记得最优解的条件码?对,检验数。由于这个原问题是最大化问题,所以检验数此时应该全部小于等于0。
还记得检验数的公式吗? λ T = c T − c B T B − 1 A \lambda^T=c^T-c_B^TB^{-1}A λT=cTcBTB1A,不过由于我们加了变量没有扩展 A A A,所以松弛变量 u u u这一块要额外考虑考虑。考虑的结果就是:
λ T = ( c T − c B T B − 1 A , − c B T B − 1 E ) \lambda^T = (c^T-c_B^TB^{-1}A, -c_B^TB^{-1}E) λT=(cTcBTB1A,cBTB1E)
因此 c T − c B T B − 1 A ≤ 0 c^T-c_B^TB^{-1}A \leq 0 cTcBTB1A0 c T ≤ c B T B − 1 A c^T \leq c_B^TB^{-1}A cTcBTB1A。两边同时取反一下得: c ≤ A T ( ( B − 1 ) T c B ) c \leq A^T((B^{-1})^Tc_B) cAT((B1)TcB)
对比一下对偶问题的条件 A T y ≥ c A^Ty \geq c ATyc,发现 y = ( B − 1 ) T c B y=(B^{-1})^Tc_B y=(B1)TcB是一组可行解。
y T b = c B T B − 1 b = c B T x B y^Tb=c_B^TB^{-1}b=c_B^Tx_B yTb=cBTB1b=cBTxB,即 b T y = c T x b^Ty=c^Tx bTy=cTx,根据定理2, y y y是最优解。

对偶单纯形法

由以上证明过程可以看出,如果认为 y T = c B B − 1 y^T=c_BB^{-1} yT=cBB1,对偶问题的一组可行解,能够保证原问题 λ ≥ 0 \lambda \geq 0 λ0,虽然此时它不一定是原问题的可行解。我们定义这样的解叫做正则解

普通的单纯形法,是可行解保证了可行性后,我们再将其逐步变为正则解保证最优性。

交换后,要让 λ j ′ = λ j − λ k α l j / α l k ≥ 0 \lambda_j' = \lambda_j-\lambda_k \alpha_{lj}/\alpha_{lk} \geq 0 λj=λjλkαlj/αlk0,即正则性依然成立。

α l j ≥ 0 \alpha_{lj} \geq 0 αlj0等式自然成立,则只需要对于 α l j < 0 \alpha_{lj} < 0 αlj<0的,有 λ j α l j ≤ λ k α l k \frac{\lambda_j}{\alpha_{lj}} \leq \frac{\lambda_k}{\alpha_{lk}} αljλjαlkλk即可。

故对偶单纯形法的流程如下:

  1. 先找到正则解和正则基
  2. 判断 β = B − 1 b ≥ 0 \beta=B^{-1}b \geq 0 β=B1b0是否成立,也就是是否可行。若可行则结束。
  3. 否则取 β l < 0 \beta_l < 0 βl<0,若 α i j ≥ 0 \alpha_{ij} \geq 0 αij0则无可行解。
  4. 否则找 λ k α l k = max ⁡ { λ j α l j ∣ α l j < 0 } \frac{\lambda_k}{\alpha_{lk}}=\max\{\frac{\lambda_j}{\alpha_{lj}} |\alpha_{lj} < 0\} αlkλk=max{αljλjαlj<0} x k x_k xk x π ( l ) x_{\pi(l)} xπ(l)交换做基变换。
  5. 重复2

整数线性规划问题

你可能要问,既然我们已经有了普通的单纯形算法,为什么需要对偶单纯形算法?这就要提整数线性规划问题了。

整数线性规划问题,指的是添加了条件“变量必须是整数”的线性规划问题,视具体的约束条件不同,又分了很多种,就不细说了。

算分书中的例题:

min ⁡ z = − 3 x − 5 y \min z = -3x-5y minz=3x5y
− x + y ≤ 1.5 -x+y \leq 1.5 x+y1.5
2 x + 3 y ≤ 11 2x+3y \leq 11 2x+3y11
x , y ≥ 0 x,y \geq 0 x,y0且它们都是整数。

同样,本文不作数学证明,只说解法:

先去掉整数条件,做线性规划求最优解。比方说例题,两个条件添加松弛变量 u 1 u_1 u1 u 2 u_2 u2,去掉整数条件做完单纯形算法,最终单纯形表如下:

− 3 − 5 0 0 \begin{matrix}-3 & -5 & 0& 0 \end{matrix} 3500
c B c_B cB x B x_B xB b b b x y u 1 u 2 \begin{matrix}x & y & u_1& u_2 \end{matrix} xyu1u2
− 5 − 3 \begin{matrix}-5 \\ -3 \end{matrix} 53 y x \begin{matrix}y \\ x \end{matrix} yx 2.8 1.3 \begin{matrix}2.8 \\ 1.3 \end{matrix} 2.81.3 0 1 0.4 0.2 1 0 − 0.6 0.2 \begin{matrix}0 & 1 & 0.4 & 0.2\\ 1& 0 & -0.6& 0.2\end{matrix} 01100.40.60.20.2
− z -z z 17.9 17.9 17.9 0 0 0.2 1.6 \begin{matrix}0 & 0& 0.2 & 1.6 \end{matrix} 000.21.6

如果解都是整数,很好。但是我们得到的 x = 1.3 , y = 2.8 x=1.3, y=2.8 x=1.3,y=2.8,解都不是整数!所以我们得继续。

有若干变量不是整数,任选一个,比如 x i = s x_i=s xi=s,将这个问题分裂成两个子问题,分别添加条件 x i ≤ ⌊ s ⌋ x_i \leq \lfloor s \rfloor xis x i ≥ ⌈ s ⌉ x_i \geq \lceil s \rceil xis两个条件,分别求解。然后选择得到的最优解值更优的,再继续重复分裂,直到所有解都变成整数为止。

一个 x i ≤ a x_i \leq a xia的条件相当于 x i + u = a x_i + u =a xi+u=a
一个 x i ≥ a x_i \geq a xia的条件相当于 − x i + u = a -x_i +u=a xi+u=a

比方说例题,我们先来解决添加了 x ≤ 1 x \leq 1 x1条件的子问题吧。

我们需要给 A A A添加一行(一个新条件)和一列(一个新变量u),并且基变量也要增加一个 u u u

− 3 − 5 0 0 0 \begin{matrix}-3 & -5 & 0& 0 & 0 \end{matrix} 35000
c B c_B cB x B x_B xB b b b x y u 1 u 2 u \begin{matrix}x & y & u_1& u_2 & u \end{matrix} xyu1u2u
− 5 − 3 0 \begin{matrix}-5 \\ -3 \\ 0 \end{matrix} 530 y x u \begin{matrix}y \\ x \\ u \end{matrix} yxu 2.8 1.3 1 \begin{matrix}2.8 \\ 1.3 \\ 1 \end{matrix} 2.81.31 0 1 0.4 0.2 0 1 0 − 0.6 0.2 0 1 0 0 0 1 \begin{matrix}0 & 1 & 0.4 & 0.2 & 0\\ 1& 0 & -0.6& 0.2 & 0 \\ 1 & 0 & 0 & 0 & 1\end{matrix} 0111000.40.600.20.20001
− z -z z 17.9 17.9 17.9 0 0 0.2 1.6 0 \begin{matrix}0 & 0& 0.2 & 1.6 & 0 \end{matrix} 000.21.60

而由于 x x x已经是一个基变量的,所以应该把 u u u这一行的那个1给消掉(严格证明略,即我不会),也就是说要这样:

− 3 − 5 0 0 0 \begin{matrix}-3 & -5 & 0& 0 & 0 \end{matrix} 35000
c B c_B cB x B x_B xB b b b x y u 1 u 2 u \begin{matrix}x & y & u_1& u_2 & u \end{matrix} xyu1u2u
− 5 − 3 0 \begin{matrix}-5 \\ -3 \\ 0 \end{matrix} 530 y x u \begin{matrix}y \\ x \\ u \end{matrix} yxu 2.8 1.3 − 0.3 \begin{matrix}2.8 \\ 1.3 \\ -0.3 \end{matrix} 2.81.30.3 0 1 0.4 0.2 0 1 0 − 0.6 0.2 0 0 0 0.6 − 0.2 1 \begin{matrix}0 & 1 & 0.4 & 0.2 & 0\\ 1& 0 & -0.6& 0.2 & 0 \\ 0 & 0 & 0.6 & -0.2 & 1\end{matrix} 0101000.40.60.60.20.20.2001
− z -z z 17.9 17.9 17.9 0 0 0.2 1.6 0 \begin{matrix}0 & 0& 0.2 & 1.6 & 0 \end{matrix} 000.21.60

可以看到,现在 b ≥ 0 b \geq 0 b0的条件并没有满足,但 λ ≥ 0 \lambda \geq 0 λ0的条件还是满足的,也就是说这是一组基本正则解。

所以此时应用对偶单纯形算法,就可以继续求解了。

此时我们把 θ \theta θ写最上面,值为 λ j α l j \frac{\lambda_j}{\alpha_{lj}} αljλj,其中这个 l = 3 l=3 l=3

θ \theta θ − − − − 8 − \begin{matrix}- & - & -& -8 & -\end{matrix} 8
c B c_B cB x B x_B xB b b b x y u 1 u 2 u \begin{matrix}x & y & u_1& u_2 & u\end{matrix} xyu1u2u
− 5 − 3 0 \begin{matrix}-5 \\ -3 \\ 0 \end{matrix} 530 y x u \begin{matrix}y \\ x \\ u \end{matrix} yxu 2.8 1.3 − 0.3 \begin{matrix}2.8 \\ 1.3 \\ -0.3 \end{matrix} 2.81.30.3 0 1 0.4 0.2 0 1 0 − 0.6 0.2 0 0 0 0.6 − 0.2 1 \begin{matrix}0 & 1 & 0.4 & 0.2 & 0\\ 1& 0 & -0.6& 0.2 & 0 \\ 0 & 0 & 0.6 & -0.2 & 1\end{matrix} 0101000.40.60.60.20.20.2001
− z -z z 17.9 17.9 17.9 0 0 0.2 1.6 0 \begin{matrix}0 & 0& 0.2 & 1.6 & 0 \end{matrix} 000.21.60

α l j ≥ 0 \alpha_{lj}\geq0 αlj0,那这一列就直接忽略,所以只有 u 2 u_2 u2是我们心仪的换入变量。将其换入,消元如出一辙,将第3行第4列消成1,其他行第4列都消成0:

c B c_B cB x B x_B xB b b b x y u 1 u 2 u \begin{matrix}x & y & u_1& u_2 & u\end{matrix} xyu1u2u
− 5 − 3 0 \begin{matrix}-5 \\ -3 \\ 0 \end{matrix} 530 y x u 2 \begin{matrix}y \\ x \\ u_2 \end{matrix} yxu2 2.5 1 1.5 \begin{matrix}2.5 \\ 1 \\ 1.5 \end{matrix} 2.511.5 0 1 1 0 1 1 0 0 0 1 0 0 − 3 1 − 5 \begin{matrix}0 & 1 & 1 & 0 & 1\\ 1& 0 & 0& 0 & 1 \\ 0 & 0 & -3 & 1 & -5\end{matrix} 010100103001115
− z -z z 15.5 15.5 15.5 0 0 5 0 0 \begin{matrix}0 & 0& 5& 0& 0 \end{matrix} 00500

可喜可贺可喜可贺。加 x ≥ 1 x \geq 1 x1的子问题也类似,我也没有算,按算分书的说法,那个子问题的解更优,应该从它开始继续分裂。要分好几次才能找到最优解 x = 4 , y = 1 , z = − 17 x=4,y=1,z=-17 x=4,y=1,z=17

这个算法被称为分支限界算法

总结

讨论了线性规划的对偶单纯形法,以及它在整数线性规划问题中的应用。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值