整数规划学习笔记(二)

线性规划(LP)

凸分析基础概念

极点(extreme point)

S ⊆ R n S \sube \R^n SRn是非空凸集, x ∈ S x \in S xS。若 ∀ λ ∈ ( 0 , 1 ) , ∀ x 1 , x 2 ∈ S , x 1 ≠ x 2 \forall \lambda \in (0,1),\forall x1,x2\in S,x_1 \ne x_2 λ(0,1),x1,x2S,x1=x2均不能推出 x = λ x 1 + ( 1 − λ ) x 2 x=\lambda x_1 +(1- \lambda)x_2 x=λx1+(1λ)x2,则 x x x称为 S S S的顶点或极点。即当x不能表示为两个 S S S点的严格凸组合时,x为顶点。用图示法不难理解,当 x x x不在凸集 S S S中任意两点的连线上(不包括端点)时, x x x S S S的极点。如下图:

在这里插入图片描述

显然对于 x 3 x_3 x3,可以找到无数这样的的 x 1 , x 2 ∈ S x_1,x_2\in S x1,x2S使 x 3 x_3 x3在这两点连线上,所以 x 3 x_3 x3不是极点, x 4 x_4 x4是极点。

方向和极方向

S ⊆ R n S \sube \R^n SRn是非空凸集, d ∈ R n d \in \R^n dRn。若 ∀ x ∈ S , λ ≥ 0 \forall x \in S,\lambda \ge 0 xS,λ0都有 x + λ d ∈ S x+\lambda d \in S x+λdS,则称 d d d S S S的一个方向。如果 ∀ λ 1 , λ 2 \forall \lambda_1,\lambda_2 λ1,λ2 S S S的方向 d 1 , d 2 d_1,d_2 d1,d2,若当 d = λ 1 d 1 + λ 2 d 2 d=\lambda_1d_1+\lambda_2d_2 d=λ1d1+λ2d2,可以推出 d 1 = α d 2 , α > 0 d_1 = \alpha d_2,\alpha \gt 0 d1=αd2,α>0,则称 d d d S S S的极方向。同样通过画图不难理解,只有当凸集无界时才有方向,极方向就是无界凸集边界上的方向。如下图:

在这里插入图片描述

在有界凸集中如果存在一个方向 d d d,任选一点 x x x x + λ d x+\lambda d x+λd即为图示射线,显然这条射线只有一部分点在 S S S中,不满足方向的定义。在无界凸集中,可能存在无数个方向,但不难看出,当 d d d与边界平行时,当且仅当 d = α d 1 = β d 2 , α , β > 0 d=\alpha d_1= \beta d_2,\alpha,\beta \gt 0 d=αd1=βd2,α,β>0时, d d d可以满足 d = λ 1 d 1 + λ 2 d 2 d=\lambda_1d_1+\lambda_2d_2 d=λ1d1+λ2d2的形式。因此极方向就是无界凸集边界上的方向。

标准型(Standard Form)

m i n   c T x min \ c^Tx min cTx

s . t . s.t. s.t.
A x = b x ≥ 0 Ax=b \\ x \ge 0 Ax=bx0
其中 A ∈ R m × n , m < n A\in R^{m \times n},m \lt n ARm×n,m<n,且 A A A行满秩。

线性规划基本定理

设线性规划可行域 S S S非空, S S S的顶点为 x 1 , … , x k x_1,…,x_k x1,,xk,极方向为 d i , … , d l d_i,…,d_l di,,dl,则(LP)有有限最优解的充要条件为 c T d i ≥ 0 , i = 1 , … , l c^Td_i \ge 0,i=1,…,l cTdi0,i=1,,l。若(LP)有有限最优解,则(LP)必在其中一个顶点上达到最优。

这是因为,对 ∀ x ∈ S , x = ∑ i = 1 N λ i x i , ∑ i = 1 N λ i = 1 , x i \forall x\in S,x=\sum_{i=1}^N\lambda_ix^i,\sum_{i=1}^N\lambda_i=1,x^i xS,x=i=1Nλixi,i=1Nλi=1,xi S S S的顶点,也就是说,多面体内任意一点均可以被多面体顶点的凸组合表示,即多面体的顶点就是多面体的全部。因此, c T x = c T ( ∑ i = 1 N λ i x i ) ≥ c T ( ∑ i = 1 N λ i x ∗ ) = c T x ∗ ∑ i = 1 N λ i = c T x ∗ c^Tx=c^T(\sum_{i=1}^N\lambda_ix^i)\ge c^T(\sum_{i=1}^N\lambda_ix^*)=c^Tx^*\sum_{i=1}^N\lambda_i=c^Tx^* cTx=cT(i=1Nλixi)cT(i=1Nλix)=cTxi=1Nλi=cTx,其中 x ∗ x^* x表示所有顶点中对应解最小的顶点。这就说明任意一点对应的解都大于等于顶点中对应解最小的顶点对应的解,所以最优值一定在顶点取得。

下面通过画图进行理解:

在这里插入图片描述

显然当超平面不与边界平行时,最优解有限,且在顶点处取得。

因此,在解决线性规划问题时,一个最朴素的思路是遍历所有的顶点。当然,这样的效率是很低的,所以,可以先选取一个顶点,然后找到一个相邻的更好的顶点,重复这一步直到找到最优解,这就是单纯形法的思想。

基本可行解

A = ( B , N ) A=(B,N) A=(B,N),其中 B B B可逆(非奇异矩阵),则称 B B B A A A的一个基,可以解得 x B = B − 1 ( b − N x N ) x_B=B^{-1}(b-Nx_N) xB=B1(bNxN),取 x N = 0 x_N=0 xN=0,有 x = ( x B x N ) = ( B − 1 b 0 ) x= \bigl( \begin{matrix} x_B\\ x_N \end{matrix} \bigr)=\bigl( \begin{matrix} B^{-1}b\\ 0\end{matrix} \bigr) x=(xBxN)=(B1b0) A x = b Ax=b Ax=b的基本解, x B x_B xB称为基变量。若 B − 1 b ≥ 0 B^{-1}b \ge 0 B1b0,则 B B B称为原始可行基, x = ( B − 1 b 0 ) x=\bigl( \begin{matrix} B^{-1}b\\ 0\end{matrix} \bigr) x=(B1b0)称为基本可行解。实际上,基本可行解就是顶点,基本可行解和顶点是一一对应的。

推导和证明可见:https://mp.weixin.qq.com/s/N1jCOtfvLtYinrm0YtWi6Q

单纯形法

单纯形法的思想

单纯形法主要包含以下两个步骤:
1.找出一个鉴别给定基本可行解是否为最优解的规则;
2.给定一个非最优的基本可行解,找到一种规则,使由该基本可行解转移到一个相邻的基本可行解,并降低目标函数值(对于最小化问题)。

单纯形法的具体步骤

x ∈ S x \in S xS是(LP)的一个可行解, x = ( x B x N ) , c = ( c B c N ) x=\bigl(\begin{matrix} x_B \\ x_N \end{matrix}\bigr),c=\bigl (\begin{matrix}c_B \\ c_N \end{matrix} \bigr) x=(xBxN),c=(cBcN),有 B x B + N x N = b Bx_B+Nx_N=b BxB+NxN=b,所以 x B = B − 1 b − B − 1 N x N x_B=B^{-1}b-B^{-1}Nx_N xB=B1bB1NxN
c T x = c B T x B + c N T x N = c B T B − 1 b − c B T B − 1 N x N + c N T x N = c T x ^ T + ( c N T − C B T B − 1 ) x N \begin{aligned} c^Tx&=c_B^Tx_B+c_N^Tx_N\\ &=c_B^TB^{-1}b-c_B^TB^{-1}Nx_N+c_N^Tx_N\\ &=c^T\hat{x}^T+(c_N^T-C_B^TB^{-1})x_N \end{aligned} cTx=cBTxB+cNTxN=cBTB1bcBTB1NxN+cNTxN=cTx^T+(cNTCBTB1)xN
r N = c N T − c B T B − 1 N r_N=c_N^T-c_B^TB^{-1}N rN=cNTcBTB1N,即检验数(reduced cost)。如果 r N ≥ 0 r_N \ge 0 rN0,则有 c T x ≥ c T x ^ T c^Tx \ge c^T\hat{x}^T cTxcTx^T,这时极点 x ^ \hat{x} x^为最优解。
一般用单纯形表求解,下面给出一个示例:
m a x   z = 3 x 1 + 6 x 2 + 2 x 3 max\ z =3x_1+6x_2+2x_3 max z=3x1+6x2+2x3
s . t . s.t. s.t.
3 x 1 + 4 x 2 + x 3 + x 4 = 2 , x 1 + 3 x 2 + + 2 x 3 + x 5 = 1 , x ≥ 0. 3x_1+4x_2+x_3+x_4=2, \\ x_1+3x_2++2x_3+x_5=1, \\ x \ge 0. 3x1+4x2+x3+x4=2,x1+3x2++2x3+x5=1,x0.

B B B C B C_B CB C C C36200 β \beta β
X 4 X_4 X40234110 2 4 = 1 2 {2\over4}={1\over2} 42=21
X 5 X_5 X50113201 1 3 1\over3 31
z=0 σ \sigma σ36200
B B B C B C_B CB C C C36200 β \beta β
X 4 X_4 X40 2 3 2\over3 32 5 3 5\over3 350 − 5 3 -{5\over3} 351 − 4 3 -{4\over3} 34 2 5 2\over5 52
X 2 X_2 X26 1 3 1\over3 31 1 3 1\over3 311 2 3 2\over3 320 1 3 1\over3 311
z=2 σ \sigma σ10-20-2
B B B C B C_B CB C C C36200 β \beta β
X 1 X_1 X13 2 5 2\over5 5210-1 3 5 3\over5 53 − 4 5 -{4\over5} 54
X 2 X_2 X26 1 5 1\over5 51011 − 1 5 -{1\over5} 51 3 5 3\over5 53
z= 12 5 12\over5 512 σ \sigma σ00-1 − 3 5 -{3\over5} 53 − 6 5 -{6\over5} 56

对偶理论

给定如下一个最小化的原始线性规划模型:
m i n   c T x min \ c^Tx min cTx

s . t . s.t. s.t.
A x = b , x ≥ 0. Ax=b, \\ x \ge 0. Ax=b,x0.
其中 A ∈ R m × n , m < n , c ∈ R n , b ∈ R m A\in R^{m \times n},m \lt n,c \in \R^n,b \in \R^m ARm×n,m<n,cRn,bRm,则它的对偶问题可以表示为如下的线性规划模型:
m a x   z = b T y max \ z=b^Ty max z=bTy
s . t . s.t. s.t.
A T y ≤ c , y ≥ 0. A^Ty \le c,\\ y \ge 0. ATyc,y0.
支持对偶理论的基本思想是,每一个线性规划问题都存在一个与其对偶的问题,在求出一个问题解的时候,也同时给出了另一问题的解。

对偶问题的接受可以参考:https://blog.csdn.net/weixin_51128278/article/details/116246003?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%BA%BF%E6%80%A7%E8%A7%84%E5%88%92%E5%AF%B9%E5%81%B6&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-116246003.142

除了原线性规划对应的对偶问题,我们也可以人为“创造”原问题的对偶问题。
考虑一个线性规划问题§:
m i n   f ( x ) min \ f(x) min f(x)
s . t . s.t. s.t.
h ( x ) = 0 , x ∈ X . h(x)=0,\\ x \in X. h(x)=0,xX.
其中, h ( x ) h(x) h(x)是极为复杂的约束,而 x ∈ X x \in X xX是一个简单的约束。因此为了简化问题,可以不考虑约束 h ( x ) h(x) h(x)。但显然,这样会使问题与原目标相差过大。为了避免这样的情况,将 h ( x ) h(x) h(x)乘上一个系数即拉格朗日乘子 λ \lambda λ后加入目标函数一并考虑,得到新的拉格朗日对偶函数
d ( λ ) = m i n   L ( x , λ ) = f ( x ) + λ h ( x ) , x ∈ X d(\lambda)=min\ L(x,\lambda)=f(x)+\lambda h(x),x \in X d(λ)=min L(x,λ)=f(x)+λh(x),xX
显然由于松弛掉了 h ( x ) h(x) h(x)的约束,使得问题的可行域变大,得到的值应该是原问题的下界,即:
d ( λ ) ≤ f ( x ) , ∀ f e a s i b l e   s o l u t i o n   o f   ( P ) . d(\lambda) \le f(x),\forall feasible\ solution\ of\ (P). d(λ)f(x),feasible solution of (P).
所以不难得出,原问题的最优下界可以由求解拉格朗日对偶问题(D)解决:
m a x   d ( λ ) max \ d(\lambda) max d(λ)
再次考虑一个标准线性规划(LP):
m i n   c T x min \ c^Tx min cTx
s . t . s.t. s.t.
A x = b , x ≥ 0. Ax=b,\\ x \ge 0. Ax=b,x0.
引入乘子 λ ∈ R m \lambda \in \R^m λRm并类比上述过程进行松弛可以得到:
d ( λ ) = m i n { c T x + λ T ( b − A x ) } = b T λ + m i n ( c − A T λ ) T x = { b T λ A T λ ≤ c − ∞ 否则 x ≥ 0 \begin{aligned} d(\lambda)&=min\{c^Tx+\lambda^T(b-Ax)\}\\ &=b^T\lambda+min(c-A^T\lambda)^Tx\\ &=\begin{cases} b^T\lambda & A^T\lambda \le c\\ -\infin & 否则 \end{cases} &x\ge 0 \end{aligned}\\ d(λ)=min{cTx+λT(bAx)}=bTλ+min(cATλ)Tx={bTλATλc否则x0
所以可以得到对偶线性规划(LD):
m a x   b T λ max\ b^T\lambda max bTλ
s . t . s.t. s.t.
A T λ ≤ c A^T\lambda \le c ATλc
关于拉格朗日松弛算法和拉格朗日对偶问题会在对应章节进一步讨论。
一般而言,原问题和对偶问题有以下关系:

原问题对偶问题
目标函数:min目标函数:max
约束条件:m个对偶变量:m个
约束条件: ≤ \le 对偶变量: y i ≥ 0 y_i \ge 0 yi0
约束条件: ≥ \ge 对偶变量: y i ≤ 0 y_i \le 0 yi0
约束条件: = = =对偶变量: y i y_i yi为自由变量
右端常数与目标系数互换右端常数与目标系数互换

对偶问题可以用对偶单纯形法求解:

可以参考:https://blog.csdn.net/kittyzc/article/details/90230924?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%AF%B9%E5%81%B6%E5%8D%95%E7%BA%AF%E5%BD%A2%E6%B3%95&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-90230924.142

分支定界(branch and bound)

分支定界是一种搜索与迭代的方法,也被称作部分枚举或隐枚举法。其主要思想是在松弛问题的可行域中寻找使目标函数值达到最优的整数解。具体来说,把全部可行解空间反复地分割为越来越小的子集称为分支;并且对每个子集内的解集计算一个目标下界(对于最小化问题),称为定界;在每次分支后,凡是界限超出已知最好可行解目标值的那些子集将不再进一步分支,因此许多子集可不予考虑,称为剪枝

分支定界的步骤

考虑如下一个整数规划:
m a x   z = 8 x 1 + 11 x 2 + 6 x 3 + 4 x 4 max \ z=8x_1+11x_2+6x_3+4x_4 max z=8x1+11x2+6x3+4x4
s . t . s.t. s.t.
5 x 1 + 7 x 2 + 4 x 3 + 3 x 4 ≤ 14 x ∈ { 0 , 1 } 4 5x_1+7x_2+4x_3+3x_4 \le 14\\ x\in \{0,1\}^4 5x1+7x2+4x3+3x414x{0,1}4

  1. 松弛掉部分整数约束,令 x 1 = x 2 = 1 x_1=x_2=1 x1=x2=1,得到一个解 x = ( 1 , 1 , 0.5 , 0 ) x=(1,1,0.5,0) x=(1,1,0.5,0)

  2. x 3 x_3 x3作为分支的对象,分出 x 3 = 0 x_3=0 x3=0 x 3 = 1 x_3=1 x3=1两支

  3. 分别得出两个解 x = ( 1 , 1 , 0 , 0667 ) , z = 21.65 x=(1,1,0,0667),z=21.65 x=(1,1,0,0667),z=21.65 x = ( 1 , 0.714 , 1 , 0 ) , z = 21.85 x=(1,0.714,1,0),z=21.85 x=(1,0.714,1,0),z=21.85,所以可以看出,最优值一定是小于 21.85 21.85 21.85的。

  4. 因为是求最大化问题,所以先选择 x = ( 1 , 0.714 , 1 , 0 ) , z = 21.85 x=(1,0.714,1,0),z=21.85 x=(1,0.714,1,0),z=21.85这一支继续分支

  5. 得到新的两个解 x = ( 1 , 0 , 1 , 1 ) , z = 18 x=(1,0,1,1),z=18 x=(1,0,1,1),z=18 x = ( 0.6 , 1 , 1 , 0 ) , z = 21.8 x=(0.6,1,1,0),z=21.8 x=(0.6,1,1,0),z=21.8,得到一个整数解 x = ( 1 , 0 , 1 , 1 ) , z = 18 x=(1,0,1,1),z=18 x=(1,0,1,1),z=18,将这个解记录下来作为新的下界,并对 x = ( 0.6 , 1 , 1 , 0 ) , z = 21.8 x=(0.6,1,1,0),z=21.8 x=(0.6,1,1,0),z=21.8继续分支

  6. 得到两个新的解 x = ( 0 , 1 , 1 , 1 ) , z = 21 x=(0,1,1,1),z=21 x=(0,1,1,1),z=21 x = ( 1 , 1 , 1 , − 0.667 ) , i n f e a s i b l e x=(1,1,1,-0.667),infeasible x=(1,1,1,0.667),infeasible,因此将 x = ( 0 , 1 , 1 , 1 ) , z = 21 x=(0,1,1,1),z=21 x=(0,1,1,1),z=21作为新的最优解,并终止这一支的迭代

  7. 考虑最初没有选择的那一支, x = ( 1 , 1 , 0 , 0667 ) , z = 21.65 x=(1,1,0,0667),z=21.65 x=(1,1,0,0667),z=21.65,这说明这一支即使进行分支,得到的解也不会大于 21 21 21,因此可以不予考虑,即剪枝

  8. 因此, x = ( 0 , 1 , 1 , 1 ) , z = 21 x=(0,1,1,1),z=21 x=(0,1,1,1),z=21即为最优解

分枝定界的原则

在首次分支时,如果有多个分数变量,一般选择分数离整数点最远的点进行分支,例如 5.59 5.59 5.59 5.7 5.7 5.7离整数点更远,因为这样会使分支后的结果与分支前的结果相差更大,有利于更快地进行剪枝。
选枝的准则一般有最优值优先、深度优先(更快地找到可行解),混合方法(先深度优先后最优值优先)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值