整数规划-割平面法

博客介绍了割平面法求解整数规划问题。割平面法思想是不断添加约束逼近整数凸包使解为整数解。以Gomory’s分数割平面算法介绍添加约束原理,还通过实例展示求解过程,将原问题不断变换并添加割平面不等式,最终得到整数解。


谨以此博客作为学习期间的记录。

割平面法思想

在之前,梳理了分支定界法的流程:分支定界法
除了分支定界法,割平面法也是求解整数规划的另一个利器。
我们已经知道,线性规划的可行域是一个凸集,而最优点将会在凸集的某个顶点处取到。而如果凸集的顶点都是整数点,那这样的话只要使用单纯形法即可求得整数最优解。

就像下图的凸包所示,在实际情况中,线性规划的可行域往往交点都不在整数点处,如果能找到整数点的一个凸包,那整数规划问题即可转化为普通的线性规划问题。但是想找到这样的一个凸包是非常困难的,只能使用某种方法去不断的逼近这个凸包。

这就是割平面法的思想:不断地向原问题中添加约束去逼近这个整数凸包,从而使得解出来的解为整数解。
在这里插入图片描述

Gomory’s割平面法原理

在上面提到了,通过不断添加约束去逼近一个整数凸包,那么该如何去添加约束呢?也就是如何确定割平面这是本部分的重点。
确定割平面的算法有很多,暂时先以较为基础的Gomory’s 分数割平面算法介绍,后续如果用到更多其他割平面再进行补充。
先看一个标准整数规划问题
m i n c T x s . t . { A x = b x ≥ 0 x ∈ Z n \begin{align*} min \quad & \mathbf{c}^T \mathbf{x} \\ s.t. \quad & \begin{cases} \mathbf{Ax} =\mathbf{b} \\ \mathbf{x} \geq \mathbf{0}\\ \mathbf{x} \in \mathbb{Z}^n \end{cases} \\ \end{align*} mins.t.cTx Ax=bx0xZn

当使用单纯形法求解整数规划问题时,可以将问题划分为基变量(Basic Variables)和非基变量(Non-Basic Variables)。在标准形式的整数规划问题中,可以进行如下的续写:
令基变量为 x B \mathbf{x}_B xB,非基变量为 x N \mathbf{x}_N xN。整数规划问题可以表示为:
min ⁡ c T x = c B T x B + c N T x N \min \mathbf{c}^T \mathbf{x} = \mathbf{c}_B^T \mathbf{x}_B + \mathbf{c}_N^T \mathbf{x}_N mincTx=cBTxB+cNTxN
约束条件:
B x B + N x N = b x B , x N ≥ 0 x ∈ Z n \begin{align*} \mathbf{B} \mathbf{x}_B + \mathbf{N} \mathbf{x}_N &= \mathbf{b} \\ \mathbf{x}_B, \mathbf{x}_N &\geq \mathbf{0} \\ \mathbf{x} &\in \mathbb{Z}^n \end{align*} BxB+NxNxB,xNx=b0Zn
其中:

  • c T = [ c B T , c N T ] \mathbf{c}^T = [\mathbf{c}_B^T, \mathbf{c}_N^T] cT=[cBT,cNT] 是目标函数的系数向量, c B \mathbf{c}_B cB 对应基变量的系数, c N \mathbf{c}_N cN 对应非基变量的系数。
  • B \mathbf{B} B N \mathbf{N} N 分别是基变量和非基变量对应的约束矩阵的子矩阵。
  • x B \mathbf{x}_B xB x N \mathbf{x}_N xN 分别是基变量和非基变量向量。

现在将整数约束松弛掉,使用单纯形法进行求解,多次迭代后模型收敛。收敛后的问题可以表述如下:

min ⁡ f 0 + c N T x N \min \quad f_0 + \mathbf{c}_N^T \mathbf{x}_N minf0+cNTxN
约束条件:
x B + B − 1 N x N = B − 1 b x B , x N ≥ 0 \begin{align*} \mathbf{x}_B + \mathbf{B}^{-1}\mathbf{N} \mathbf{x}_N &= \mathbf{B}^{-1}\mathbf{b} \\ \mathbf{x}_B, \mathbf{x}_N &\geq \mathbf{0} \\ \end{align*} xB+B1NxNxB,xN=B1b0
其中 f 0 = c B T x B f_0 = \mathbf{c}_B^T \mathbf{x}_B f0=cBTxB在求解之后为一个常数。
那么将上述约束变形即可得到 x B + ⌊ B − 1 N ⌋ x N ≤ ⌊ B − 1 b ⌋ \mathbf{x}_B + \lfloor\mathbf{B}^{-1}\mathbf{N} \rfloor \mathbf{x}_N \leq \lfloor \mathbf{B}^{-1}\mathbf{b} \rfloor xB+B1NxNB1b将其与原约束相减可以得到
( B − 1 N − ⌊ B − 1 N ⌋ ) x N ≥ B − 1 b − ⌊ B − 1 b ⌋ (\mathbf{B}^{-1}\mathbf{N} - \lfloor\mathbf{B}^{-1}\mathbf{N} \rfloor )\mathbf{x}_N \geq \mathbf{B}^{-1}\mathbf{b} - \lfloor \mathbf{B}^{-1}\mathbf{b} \rfloor (B1NB1N⌋)xNB1bB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Kilig*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值