整数规划——第七章 分支定界算法

news2024/10/6 18:12:31

整数规划——第七章 分支定界算法

目前大部分整数规划商业软件如CPLEX,Gurobi和BARON等都是基于分枝定界算法框架的。

7.1 最优性条件和界

考虑下列一般线性整数规划问题:
(IP) min ⁡ c T x , s . t .   A x ≤ b , x ∈ Z + n (7.1) \text{(IP)}\quad\begin{aligned} &\min c^Tx,\\ &s.t.\ Ax\le b,\\ &\qquad x\in \Z_+^n \end{aligned}\tag{7.1} (IP)mincTx,s.t. Axb,xZ+n(7.1)
其中 Z + n \Z_+^n Z+n R n \R^n Rn 中的非负整数集合,给定(IP)的可行点 x ∗ x^* x ,如何验证 x ∗ x^* x 是(IP)的最优解?

f ∗ f^* f 是(IP)的最优值,假设可以产生 f ∗ f^* f 的下界序列满足:
f ‾ 1 ≤ f ‾ 2 ≤ ⋯ f ‾ k ≤ ⋯ ≤ f ∗ , \underline{f}_1\le \underline{f}_2\le \cdots\underline{f}_k\le \cdots\le f^*, f1f2fkf,
同时可以产生 f ∗ f^* f 的上界序列满足
f ‾ 1 ≥ f ‾ 2 ≥ ⋯ ≥ f ‾ k ≥ ⋯ ≥ f ∗ \overline{f}_1\ge \overline{f}_2\ge \cdots \ge\overline{f}_k\ge \cdots \ge f^* f1f2fkf
f ‾ k − f ‾ k ≤ ε \overline f_k-\underline f_k\le \varepsilon fkfkε 对一个很小的 $\varepsilon \ge 0 $ 成立,则显然有
f ∗ − ε ≤ f ‾ k ≤ f ∗ f^*-\varepsilon \le \underline{f}_k\le f^* fεfkf
问题(IP)的任何可行解 x k x^k xk 都对应 f ∗ f^* f 的一个上界 f ( x k ) = f ‾ k f(x^k)=\overline{f}_k f(xk)=fk,若 f ‾ k − f ‾ k ≤ ε > 0 \overline f_k-\underline f_k\le \varepsilon >0 fkfkε>0,则 x k x^k xk 是一个 ε \varepsilon ε 近似最优解,显然有如下定理:

定理7.1 { f ‾ k } \{\overline f_k\} {fk} { f ‾ k } \{\underline f_k\} {fk} f ∗ f^* f 的上界序列和下界序列,若 f ‾ k − f ‾ k = 0 \overline f_k-\underline f_k=0 fkfk=0 x k x^k xk 是(IP)的可行解, f ( x k ) = f ‾ k f(x^k)=\overline f_k f(xk)=fk,则 x k x^k xk 是(IP)的最优解。

常用的求线性整数规划问题下界的方法有两种:线性规划松弛和对偶松弛。

定义7.1 线性规划
(LP) min ⁡ c T x , s . t .   A x ≤ b , x ∈ R + n \text{(LP)}\quad\begin{aligned} &\min c^Tx,\\ &s.t.\ Ax\le b,\\ &\qquad x\in \R_+^n \end{aligned} (LP)mincTx,s.t. Axb,xR+n
成为整数规划(7.1)的线性规划松弛,也称为(LP)的连续松弛

显然,(LP)的最优值总是(IP)的最优值的一个下界,易证下列性质:

定理7.2

  1. 若(LP)不可行,则(IP)也不可行;
  2. x ∗ x^* x是(LP)的最优解且 x ∗ ∈ Z n x^*∈\Z^n xZn,则 x ∗ x^* x也是(IP)的最优解.

拉格朗日对偶松弛是另一种很有用的定界方法。考虑下面的整数规划问题:
(IP) min ⁡ c T x , s . t .   A x ≤ b , x ∈ X (7.2) \text{(IP)}\quad\begin{aligned} &\min c^Tx,\\ &s.t.\ Ax\le b,\\ &\qquad x\in X \end{aligned}\tag{7.2} (IP)mincTx,s.t. Axb,xX(7.2)
此处 X X X 是一个整数集合,如 X = { 0 , 1 } n , X = { x ∈ Z n   ∣   l ≤ x ≤ u } X=\{0,1\}^n,X=\{x\in \Z^n\ |\ l\le x\le u\} X={0,1}nX={xZn  lxu}。设 λ ∈ R + m \lambda \in \R_+^m λR+m,考虑朗格朗日松弛问题:
d ( λ ) = min ⁡ x ∈ X c T x + λ T ( A x − b ) d(\lambda)=\underset{x\in X}{\min}c^T x+\lambda^T(Ax-b) d(λ)=xXmincTx+λT(Axb)
则对任意(7.2)的可行解 x x x λ ∈ R + m \lambda \in \R_+^m λR+m,有 d ( λ ) ≤ c T x d(\lambda) \le c^Tx d(λ)cTx,故 d ( λ ) d(\lambda) d(λ) 是(IP)的一个下界,而最优的下界可以由下列对偶问题得到:
( D ) max ⁡ λ ∈ R + m   d ( λ ) (D)\qquad \underset{\lambda\in \R_+^m}{\max}\ d(\lambda) (D)λR+mmax d(λ)
在许多情况下计算拉格朗日松弛界 d ( λ ) d(\lambda) d(λ) 往往很容易,如当 X = { 0 , 1 } n X=\{0,1\}^n X={0,1}n 时​ ,
d ( λ ) = − λ T b + ∑ i = 1 n min ⁡ { 0 , c i + λ T a i } d(\lambda) = -\lambda^Tb+\sum_{i=1}^n\min\{0,c^i+\lambda^Ta_i\} d(λ)=λTb+i=1nmin{0,ci+λTai}
其中 a i a_i ai A A A 的第 i i i 列。

7.2 分支定界方法:0-1背包问题

考虑以下0-1背包问题:
(0-1 KP) max ⁡ c T x , s.t.  a T x ≤ b     x ∈ { 0 , 1 } n \text{(0-1 KP)}\qquad\begin{aligned} &\max c^Tx, \\ & \text{s.t.}\ a^Tx\le b\\ &\quad\ \ \ x\in \{0,1\}^n \end{aligned} (0-1 KP)maxcTx,s.t. aTxb   x{0,1}n
这里 c i > 0 , a i > 0 , i = 1 , . . . , n c_i>0,a_i>0,i=1,...,n ci>0,ai>0,i=1,...,n,问题(0-1KP)的线性规划松弛为:
(CKP) max ⁡ c T x , s.t.  a T x ≤ b     x ∈ [ 0 , 1 ] n \text{(CKP)}\qquad\begin{aligned} &\max c^Tx, \\ & \text{s.t.}\ a^Tx\le b\\ &\quad\ \ \ x\in [0,1]^n \end{aligned} (CKP)maxcTx,s.t. aTxb   x[0,1]n
使用贪心法来求解,将 { c i a i } \{\cfrac{c_i}{a_i}\} {aici} 按降序排列,设:
c 1 a 1 ≥ c 2 a 2 ≥ ⋯ ≥ c n a n (7.3) \frac{c_1}{a_1} \ge \frac{c_2}{a_2}\ge \cdots\ge \frac{c_n}{a_n}\tag{7.3} a1c1a2c2ancn(7.3)
s s s 是使下式成立的最大指标 k k k
∑ j = 1 k a j ≤ b (7.4) \sum_{j=1}^ka_j\le b\tag{7.4} j=1kajb(7.4)
定理7.3 线性规划问题(CKP)的最优解为:
x j = 1 , j = 1 , . . . , s x j = 0 , j = s + 2 , . . . , n x s + 1 = ( b − ∑ j = 1 s a j ) / a s + 1 \begin{aligned} &x_j=1,\quad j=1,...,s\\ &x_j=0,\quad j=s+2,...,n\\ &x_{s+1}=(b-\sum_{j=1} ^sa_j)/a_{s+1}\\ \end{aligned} xj=1,j=1,...,sxj=0,j=s+2,...,nxs+1=(bj=1saj)/as+1
f ∗ f^* f 是(0-1KP)的最优值,若 c j c_j cj 都是整数,则 f ∗ f^* f 也是整数,故 f ∗ f^* f 的一个上界为
z = ∑ j = 1 s c j + ⌊ ( b − ∑ j = 1 s a j ) c s + 1 / a s + 1 ⌋ z=\sum_{j=1} ^sc_j+\left\lfloor(b-\sum_{j=1}^s a_j)c_{s+1}/a_{s+1} \right\rfloor z=j=1scj+(bj=1saj)cs+1/as+1
例7.1 考虑下列0-1背包问题:
max ⁡ 8 x 1 + 11 x 2 + 6 x 3 + 4 x 4 s.t.  5 x 1 + 7 x 2 + 5 x 3 + 3 x 4 ≤ 14 x ∈ { 0 , 1 } 4 \begin{aligned} &\max 8x_1+11x_2+6x_3+4x_4\\ &\text{s.t.}\ 5x_1+7x_2+5x_3+3x_4\le 14\\ &\qquad x\in \{0,1\}^4 \end{aligned} max8x1+11x2+6x3+4x4s.t. 5x1+7x2+5x3+3x414x{0,1}4
应用定理7.3,该问题的线性规划松弛的最优解为 x = ( 1 , 1 , 1 2 , 0 ) T x=(1,1,\cfrac{1}{2},0)^T x=(1,1,21,0)T,对应的上界为 22。选择变量 x 3 x_3 x3 进行分枝,固定 x 3 = 0 x_3=0 x3=0 x 3 = 1 x_3=1 x3=1,得到两个子问题:
( P 1 ) max ⁡ 8 x 1 + 11 x 2 + 4 x 4 s.t.  5 x 1 + 7 x 2 + 3 x 4 ≤ 14 x 1 , x 2 , x 3 ∈ { 0 , 1 } (P_1)\quad\begin{aligned} &\max 8x_1+11x_2+4x_4\\ &\text{s.t.}\ 5x_1+7x_2+3x_4\le 14\\ &\qquad x_1,x_2,x_3\in \{0,1\} \end{aligned} (P1)max8x1+11x2+4x4s.t. 5x1+7x2+3x414x1,x2,x3{0,1}

( P 2 ) max ⁡ 6 + 8 x 1 + 11 x 2 + 4 x 4 s.t.  5 x 1 + 7 x 2 + 3 x 4 ≤ 10 x 1 , x 2 , x 3 ∈ { 0 , 1 } (P_2)\quad\begin{aligned} &\max 6+ 8x_1+11x_2+4x_4\\ &\text{s.t.}\ 5x_1+7x_2+3x_4\le 10\\ &\qquad x_1,x_2,x_3\in \{0,1\} \end{aligned} (P2)max6+8x1+11x2+4x4s.t. 5x1+7x2+3x410x1,x2,x3{0,1}

子问题 ( P 1 ) (P_1) (P1) 的线性规划松弛的最优解为 ( 1 , 1 , 2 3 ) T (1,1,\cfrac{2}{3})^T (1,1,32)T,对应的上界为 z = 21.67 z=21.67 z=21.67。子问题 ( P 2 ) (P_2) (P2)的线性规划松驰的最优解为 ( 1 , 5 7 , 0 ) T (1,\cfrac{5}{7},0)^T (1,75,0)T,对应的上界为 z = 21.86 z=21.86 z=21.86。分枝过程见图7.1.

选择子问题 ( P 2 ) (P_2) (P2),选择变量 x 2 x_2 x2 进行分枝,固定 x 2 = 0 x_2=0 x2=0 x 2 = 1 x_2=1 x2=1 ,得到2个子问题:
( P 3 ) max ⁡ 6 + 8 x 1 + 4 x 4 s.t.  5 x 1 + 3 x 4 ≤ 10 x 1 , x 4 ∈ { 0 , 1 } (P_3)\quad\begin{aligned} &\max 6+8x_1+4x_4\\ &\text{s.t.}\ 5x_1+3x_4\le 10\\ &\qquad x_1,x_4\in \{0,1\} \end{aligned} (P3)max6+8x1+4x4s.t. 5x1+3x410x1,x4{0,1}

( P 4 ) max ⁡ 17 + 8 x 1 + 4 x 4 s.t.  5 x 1 + 3 x 4 ≤ 3 x 1 , x 4 ∈ { 0 , 1 } (P_4)\quad\begin{aligned} &\max 17+8x_1+4x_4\\ &\text{s.t.}\ 5x_1+3x_4\le 3\\ &\qquad x_1,x_4\in \{0,1\} \end{aligned} (P4)max17+8x1+4x4s.t. 5x1+3x43x1,x4{0,1}

子问题 ( P 3 ) (P_3) (P3) 的最优解为 ( 1 , 1 ) T (1,1)^T (1,1)T,对应原问题的一个可行解 x = ( 1 , 0 , 1 , 1 ) T x=(1,0,1,1)^T x=(1,0,1,1)T,目标函数值为 z = 18 z=18 z=18。子问题 ( P 4 ) (P_4) (P4) 的线性规划松弛的最优解为 ( 1 , 3 5 ) T (1,\cfrac{3}{5})^T (1,53)T,对应的上界为 z = 21.80 z=21.80 z=21.80,分支过程见图7.2。

在这里插入图片描述

选择子问题 ( P 4 ) (P_4) (P4) 并对 x 1 x_1 x1 进行分枝,固定 x 1 = 0 x_1=0 x1=0 x 1 = 1 x_1=1 x1=1得到2个子问题:
( P 5 ) max ⁡ 17 + 4 x 4 s.t.  3 x 4 ≤ 3 x 4 ∈ { 0 , 1 } (P_5)\quad\begin{aligned} &\max 17+4x_4\\ &\text{s.t.}\ 3x_4\le 3\\ &\qquad x_4\in \{0,1\} \end{aligned} (P5)max17+4x4s.t. 3x43x4{0,1}

( P 6 ) max ⁡ 25 + 4 x 4 s.t.  3 x 4 ≤ − 2 x 4 ∈ { 0 , 1 } (P_6)\quad\begin{aligned} &\max 25+4x_4\\ &\text{s.t.}\ 3x_4\le -2\\ &\qquad x_4\in \{0,1\} \end{aligned} (P6)max25+4x4s.t. 3x42x4{0,1}

易见,子问题 ( P 5 ) (P_5) (P5) 的最优解为 x 4 = 1 x_4=1 x4=1,对应原问题的一个可行解 x = ( 1 , 1 , 0 , 1 ) T x=(1,1,0,1)^T x=(1,1,0,1)T,其目标函数值为 z = 21 z=21 z=21 。而子问题 ( P 6 ) (P_6) (P6) 不可行。分枝过程见图7.3。因为节点1对应的
子问题 ( P 1 ) (P_1) (P1) 的上界为21.67且原问题的最优值为整数,故子问题 ( P 1 ) (P_1) (P1) 不可能产生
x = ( 1 , 1 , 0 , 1 ) T x=(1,1,0,1)^T x=(1,1,0,1)T更好的可行解。从而推断出所有 { 0 , 1 } 4 \{0,1\}^4 {0,1}4 中没有比 x = ( 1 , 1 , 0 , 1 ) T x=(1,1,0,1)^T x=(1,1,0,1)T
更好的可行解,故 x = ( 1 , 1 , 0 , 1 ) T x=(1,1,0,1)^T x=(1,1,0,1)T 是原问题的最优解。

由上述例子可以看出,分枝定界过程中产生的子问题之间的关系是一树状结构,以后称之为分枝定界树或搜索树。分枝定界求解0-1背包问题的基本思想可以总结如下:

算法7.1(0-1背包问题分枝定界算法)

初始步.求解原问题的线性规划松弛,若得到整数解则也是原问题的最优解,否则得到原问题的一个上界.

  • 分枝:选择适当的变量 x i x_i xi,分别固定 x i = 0 x_i=0 xi=0 x i = 1 x_i=1 xi=1 得到2个子问题。
  • 定界:选择一个子问题,求解该子问题的线性规划松弛。
  • 剪枝:若发生下列情况之一,则可停止对该子问题进行分枝(剪枝):
    • 子问题的线性规划松弛的最优解是整数解;
    • 子问题不可行;
    • 子问题的上界等于或小于已知的可行解的目标函数值。

最优性.重复上述过程直到分枝定界树中没有需要考虑的节点(子问题),当前最好的可行解就是原问题的最优解。

7.3 分支定界方法:一般线性整数规划

本节讨论下列一般线性整数规划问题:
(IP) min ⁡ c T x , s . t .   A x ≤ b , x ∈ Z + n \text{(IP)}\quad\begin{aligned} &\min c^Tx,\\ &s.t.\ Ax\le b,\\ &\qquad x\in \Z_+^n \end{aligned} (IP)mincTx,s.t. Axb,xZ+n
S = { x ∈ Z + m ∣ A x ≤ b } S=\{x\in \Z_+^m|Ax\le b\} S={xZ+mAxb}。求解0-1背包问题的算法7.1可以推广到一般整数规划问题,只要使用适当方法把子问题的可行域剖分为若干个小的子集,一般是把可行域分成2个部分,从而可以产生类似于0-1背包问题的分枝定界树。设子问题的线性规划松弛解为 x 0 = ( x 1 0 , . . . , x n 0 ) T x^0=(x_1^0,...,x_n^0)^T x0=(x10,...,xn0)T,其中至少有一个 x i 0 x_i^0 xi0 是分数。假设选取变量进行分枝,一种自然的剖分方法是分别设
x i ≤ ⌊ x i 0 ⌋ , x i ≥ ⌊ x i 0 ⌋ + 1 x_i\le \left\lfloor x_i^0 \right\rfloor ,x_i\ge \left\lfloor x_i^0 \right\rfloor+1 xixi0,xixi0+1
⌊ ⌋ \left\lfloor \right\rfloor 表示取下整。则得到2个新的节点(子问题),如图7.4所示。显然,上述对整数规划可行域的剖分并不会丢失任何整数可行点。

在这里插入图片描述

选择分枝变量的基本策略是使分枝后的2个子问题的线性规划松弛界与当前问题的界之间的差别尽可能大,这样就有可能尽早进行剪枝。常用的方法是选取
i = arg ⁡ max ⁡ { min ⁡ ( x j 0 − ⌊ x j 0 ⌋ , ⌈ x j 0 ⌉ − x j 0 )   ∣   x j 0 为分数 } i=\arg \max\{\min(x_j^0-\lfloor x_j^0 \rfloor ,\lceil x_j^0 \rceil -x_j^0)\ |\ x_j^0为分数\} i=argmax{min(xj0xj0,xj0xj0)  xj0为分数}
在分枝定界过程中,在剪枝后如何从搜索树中剩下的节点(子问题)中选择一个节点继续进行分枝也将影响整个分枝定界的收敛速度。常用的策略有

  • 下界优先:总是选择下界最小的节点进行分枝,这里的下界可以是线性规划松弛界,或者是指该节点继承其父节点的下界
  • 深度优先:把分枝定界树的层数(已分枝变量的个数)定义为节点的深度,深度优先策略是选择具有最大深度的节点进行分枝,从而能比较快地找到可行解。

例7.2 考虑下列线性整数规划问题:
在这里插入图片描述

该问题的线性规划松弛的最优单纯形表见表7.1,故线性规划松弛的最优解为 x = ( 20 7 , 3 ) T x=\left(\cfrac{20}{7},3\right)^T x=(720,3)T,问题的下界为 z = − 59 7 z=-\cfrac{59}{7} z=759。选择 x 1 x_1 x1 进行分枝,分别加入约束 x 1 ≤ 2 x_1\le2 x12 x 1 ≥ 3 x_1\ge 3 x13 得到两个子问题,如图7.5。选择节点1,其对应的线性规划是节点0的线性规划加上约束 x 1 ≤ 2 x_1\le 2 x12,其可以表示为 x 1 + s = 2 , s ≥ 0 x_1+s=2,s\ge0 x1+s=2,s0,在表7.1中, x 1 x_1 x1 是基变量,可以用非基变量 x 3 x_3 x3 x 4 x_4 x4 表示,所以约束 x 1 ≤ 2 x_1\le 2 x12 可以表示为:
− 1 7 x 3 − 2 7 x 4 + s = − 6 7 -\frac{1}{7}x_3-\frac{2}{7}x_4+s=-\frac{6}{7} 71x372x4+s=76
在这里插入图片描述

将上述约束加入表7.1,可得单纯形表7.2。易见,以 ( x 1 , x 2 , x 5 , s ) (x_1,x_2,x_5,s) (x1,x2,x5,s) 为基变量的解对偶可行。经过 2 次对偶单纯形迭代,可得到最优单纯形表7.3。故节点1对应的线性规划最优解为 x = ( 2 , 1 2 ) x=\left(2,\cfrac{1}{2}\right) x=(2,21) ,最优值为 z = − 15 2 z=-\cfrac{15}{2} z=215 。选择分数变量 x 2 x_2 x2 进行分枝,加入约束 x 2 ≤ 0 x_2≤0 x20 x 2 ≥ 1 x_2≥1 x21 得到2个子问题,见图7.6。应用深度优先选择节点3,其对应的线性规划的最优解为 x = ( 3 2 , 0 ) T x=(\cfrac{3}{2},0)^T x=(23,0)T,最优值为 z = − 6 z=-6 z=6 ,继续选择节点4其对应的线性规划具有整数最优解 x = ( 2 , 1 ) T x=(2,1)^T x=(2,1)T ,最优值为 − 7 -7 7
在这里插入图片描述
在这里插入图片描述

故节点3和4可以去除(剪枝),只剩下节点2需要考虑。把约束 x 1 ≥ 3 x_1≥3 x13 写为 x 1 − t = 3 , t ≥ 0 x_1-t=3,t≥0 x1t=3,t0。类似地,可以把这个约束用表7.1中的非基变量 x 3 x_3 x3 x 4 x_4 x4 表示:
1 7 x 3 + 2 7 x 4 + t = − 1 7 \frac{1}{7}x_3+\frac{2}{7}x_4+t=-\frac{1}{7} 71x3+72x4+t=71
把该约束加入单纯形表7.1得表7.4。容易看出,该线性规划不可行.故分枝定界树里已经没有节点需要考虑,当前最好的可行解 x = ( 2 , 1 ) T x=(2,1)^T x=(2,1)T 就是原问题的最优解,见图7.7.
在这里插入图片描述
在这里插入图片描述

7.4 一般分支定界方法

考虑如下非线性整数规划问题:
(P) min ⁡ f ( x ) , s.t.  g i ( x ) ≤ b i , i = 1 , . . . , m , h k ( x ) = c k , k , . . . , l , x ∈ X \text{(P)}\qquad\begin{aligned} &\min f(x),\\ & \text{s.t.} \ g_i(x)\le b_i,\quad i=1,...,m,\\ & \qquad h_k(x)=c_k ,\quad k,...,l,\\ &\qquad x\in X \end{aligned} (P)minf(x),s.t. gi(x)bi,i=1,...,m,hk(x)=ck,k,...,l,xX
其中 f f f g i g_i gi h k h_k hk R n \R^n Rn 中的实值函数, X ∈ Z n X\in \Z^n XZn 是一个整数集合。

为了应用分枝定界的基本框架,需要

  • 对§的子问题定界的方法,如凸整数规划问题的连续松弛、线性下逼近方法可分离整数规划的拉格朗日松弛和二次0-1规划的半定规划(SDP)松弛;
  • 求可行解的启发式方法,如贪婪法和根据问题的特殊结构设计的求可行解程序。

以下记 ( P ( X i ) ) (P(X_i)) (P(Xi)) 为§的一个子问题,其中 X i X_i Xi X X X 剖分后的子集,用 L L L 记分枝定界树中存储的节点(子问题)集合。一般分枝定界的基本框架可以描述如下:

  • 步0(初始步):令 L = P ( X ) L={P(X)} L=P(X) ,利用启发式算法求得问题的一个初始可行点 x ∗ , v ∗ = f ( x ∗ ) x^*,v^*=f(x^*) x,v=f(x)。若无初始可行解则令 v ∗ = + ∞ v^*=+∞ v=+.
  • 步1(选择节点):若 L = ∅ L=\empty L=,停止, x ∗ x^* x 是原问题的最优解。否则,从L中选择一个或多个节点,记为 L s = { P ( X 1 ) , ⋯ , P ( X k ) } L^s=\{P(X_1),\cdots,P(X_k)\} Ls={P(X1),P(Xk)}。令 i = 1 i=1 i=1
  • 步2(定界):计算子问题 ( P ( X i ) ) (P(X_i)) (P(Xi)) 的下界 L B i LB_i LBi 。如果 ( P ( X i ) ) (P(X_i)) (P(Xi)) 不可行,则记 L B i = + ∞ LB_i=+∞ LBi=+。若 L B i ≥ v ∗ LB_i\ge v^* LBiv,转步5。若 ( P ( X i ) ) (P(X_i)) (P(Xi)) 的松弛问题的最优解 x ~ \tilde{x} x~ 是整数解,若 x ~ \tilde{x} x~ 是比当前最好的可行解 x ∗ x^* x 更好的解,更新 x ∗ x^* x,转步5。否则转步3。
  • 步3(可行解):利用启发式算法寻找可行解,若有则更新当前最好的可行解 x ∗ x^* x
    和上界 v ∗ v^* v。若 i < k i<k i<k ,令 i : = i + 1 i:=i+1 i:=i+1,回到步2,否则转步4。
  • 步4(分枝):如果 L s = ∅ L^s=\empty Ls=,转步1,否则,从 L s L^s Ls 选择节点 ( P ( X i ) ) (P(X_i)) (P(Xi)) 。剖分 X i X_i Xi
    为若干子集 L i s = { X i 1 , ⋯   , X i p } L_i^s=\{X_i^1,\cdots,X_i^p\} Lis={Xi1,,Xip} 并在 L s L^s Ls 中用 L i s L^s_i Lis 对应的子问题替换 ( P ( X i ) ) (P(X_i)) (P(Xi))。令
    L : = L ∪ L s L:=L\cup L^s L:=LLs。转步1。
  • 步5(剪枝):从 L s L^s Ls 中删除 ( P ( X i ) ) (P(X_i)) (P(Xi)) 。若 i < k i<k i<k ,令 i : = i + 1 i:=i+1 i:=i+1,回到步2,否则转步4。

在这里插入图片描述

上述分枝定界算法是概念性的,其算法效率取决于子问题的下界 L B i LB_i LBi 的质量和下界计算方法的效率。另一方面,算法的收敛速度与是否可以快速产生可行解也密切相关。在后面的章节中将介绍一些非线性整数规划的定界方法,如连续松弛和拉格朗日松弛等。

参考文献

  1. 整数规划 孙小玲,李瑞 北京,科学出版社 2010

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/848609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部署-打包并提交代码到Git服务器

前期准备工作 vue.config.js const { defineConfig } require(vue/cli-service) module.exports defineConfig({// 项目出Bug,点击错误可以跳到对应的位置&#xff0c;实际生成环境是不需要的 默认为trueproductionSourceMap: false,lintOnSave: false,publicPath: process.…

720度全视角!VR直播遇上法院庭审,你体验过吗?

在元宇宙发展背景之下&#xff0c;VR直播技术同样驶入了发展的快车道&#xff0c;以沉浸式、交互式体验为特点的VR技术&#xff0c;将原本就受欢迎的直播变得更加立体、真实、可靠&#xff0c;观众只需要一部手机就可以实现全方位、无死角地观看直播现场&#xff0c;体验宛如身…

小白带你学习linux的Redis基础(三十二)

目录 前言 一、概述 1、NoSQL 2、Redis 二、安装 1、基础配置 2、编译安装 3、RPM安装网络源安装 三、目录结构 1、rpm -ql redis 2、/etc/redis.conf 四、命令解析 1、redis-server 2、redis-cli 2、redis-check-rdb 3、redis-check-aof 五、redis登录更改 …

ES面试题

前言 1、面试突击正确的学习姿势 老师在给你讲面试突击的时候&#xff0c;是有课件的&#xff0c;而且是有准备的。你在面试的时候&#xff0c;是没有笔记课件的&#xff0c;而且问题是由面试官提问的&#xff0c;具有一定的随机性面试突击课程的目标不是听懂&#xff0c;而是…

文件上传漏洞(webshell)

一、防护 1、防护 1、判断文件后缀&#xff0c;为图片的话才让上传成功。 2、解析文件内容&#xff08;文件幻数&#xff09;判断文件头和文件尾部是否一致 幻数 常见的 3、隐藏按钮&#xff08;带上code唯一值&#xff09; 4、二次渲染&#xff08;类似拿着你的图片&#xff…

cannot import name ‘container_abcs‘ from ‘torch._six‘

进行模型训练的时候&#xff0c;报错&#xff1a; 原因是&#xff1a;torch1.8版本之后container_abcs被移除了&#xff0c;所以我们需要修改timm库中调用container_abcs的调用方式&#xff1a; timm库中调用container_abcs的文件是“~\Conda\envs\pytorch\Lib\site-packages\…

Java后台生成ECharts图片,并以Base64字符串返回

前言 通过echarts的jar包&#xff0c;Java后台生成一张图片&#xff0c;并把图片插入到word中。关于word插图片的代码在下一章。 需要用到的工具PhantomJS,Echarts-convert.js,jquery.js,echarts.js。 1.PhantomJS 介绍 PhantomJS是一个不需要浏览器的富客户端。 官方介绍&…

十年后的web渗透(网络安全)前景如何?你想知道的都在这里

前言 web渗透是网络安全大行业里入门板块&#xff0c;就像十年前的软件&#xff0c;前景非常被看好&#xff0c;薪资也很诱人。与软件测试和前端开发只需掌握一定的编程能力不同的是&#xff0c;渗透需要掌握的知识内容较多&#xff0c;花费的时间较长&#xff0c;渗透测试掌握…

值得苦练的100道Python经典练手题,(附详细答案)

嗨喽大家好卷子又来了&#xff0c;100道Python经典练手题奉上 花了一周的时间&#xff0c;整理了100道Python的练习题&#xff0c;如果你是一位初学者&#xff0c;那么这一份练习题将会给你带来极大的帮助&#xff0c;如果你能够完全独立的完成这份练习题&#xff0c;你已经入…

C/C++学习笔记 Vantage Point Trees的C++实现

下面代码是VP 树的 C 实现&#xff0c;递归search()函数决定是搜索左孩子、右孩子还是两个孩子。为了有效地维护结果列表&#xff0c;我们使用优先级队列。 // A VP-Tree implementation, by Steve Hanov. (steve.hanovgmail.com) // Released to the Public Domain // Based o…

【C++】开源:tinyxml2解析库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍tinyxml2解析库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…

路由器中DMZ、UPnP、Port Forwarding等功能介绍与使用

目录 一、DMZ功能1.1 概念1.2 验证测试方式 二、UPnP功能2.1 概念2.2 验证测试方法 三、Port Forwarding功能3.1 概念3.2 验证测试方法3.3 NAT相关 一、DMZ功能 1.1 概念 **DMZ&#xff08;Demilitarized Zone&#xff09;**是指位于防火墙内部网络&#xff08;LAN&#xff0…

Sentinel整合Spring Cloud Gateway、Zuul详解

Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 Sentinel 1.6.0 引入了 Sentinel API Gateway Adapter Common 模块&#xff0c;此模块中包含网关限流的规则和自定义 API 的实体和管理逻辑&#xff1a; GatewayFlowRule&#xff1a;网关限流规则…

公文校对要点:确保准确性和规范性

公文校对是确保文档准确性和规范性的重要步骤。以下是公文校对的要点&#xff1a; 1.拼写和语法检查&#xff1a;仔细检查文档中的拼写错误和语法错误。确保词语的正确拼写&#xff0c;并使用正确的语法结构和标点符号。 2.信息准确性&#xff1a;核对文档中的事实和数据&#…

AP51656 电流采样降压恒流驱动IC RGB PWM深度调光 LED电源驱动

产品描述 AP51656是一款连续电感电流导通模式的降压恒流源&#xff0c;用于驱动一颗或多颗串联LED 输入电压范围从 5 V 到 60V&#xff0c;输出电流 可达 1.5A 。根据不同的输入电压和 外部器件&#xff0c; 可以驱动高达数十瓦的 LED。 内置功率开关&#xff0c;采用电流采样…

Java ThreadPoolExecutor,Callable,Future,FutureTask 详解

目 录 一、ThreadPoolExecutor类讲解 1、线程池状态 五种状态 2、ThreadPoolExecutor构造函数 2.1&#xff09;线程池工作原理 2.2&#xff09;KeepAliveTime 2.3&#xff09;workQueue 任务队列 2.4&#xff09;threadFactory 2.5&#xff09;handler 拒绝策略 3、常…

递归在树的深度遍历中的运用

树的深度遍历 对于树这种数据结构&#xff0c;之前一直使用的是层次遍历&#xff0c;也就是广度优先搜索的方式&#xff08;BFS&#xff09;&#xff1b;对于树的遍历&#xff0c;还可以进行深度优先搜索&#xff08;DFS&#xff09;。 而结合递归&#xff0c;树的深度优先搜索…

【硬件设计】模拟电子基础三--集成运算放大电路

模拟电子基础三--集成运算放大电路 一、集成运算放大器1.1 定义、组成与性能1.2 电流源电路1.3 差动放大电路1.4 理想运算放大器 二、集成运算放大器的应用2.1 反向比例运算电路2.2 同向比例运算电路2.3 反向加法运算电路2.4 反向减法运算电路2.5 积分运算电路2.6 微分运算电路…

vivado tcl创建工程和Git管理

一、Tcl工程创建 二、Git版本管理 对于创建完成的工程需要Git备份时&#xff0c;不需要上传完整几百或上G的工程&#xff0c;使用tcl指令创建脚本&#xff0c;并只将Tcl脚本上传&#xff0c;克隆时&#xff0c;只需要克隆tcl脚本&#xff0c;使用vivado导入新建工程即可。 优…

最详细,手机APP测试-ADB命令总结大全,你要的都在这...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 adb是什么&#x…