一、背景
非线性规划在工业界和学术界中应用非常普遍,譬如交通运输中的路径优化、金融领域中的资产配置、5G网络切片中VNF的放置等。很多时候,我们对复杂问题进行提炼和抽象后,发现可以建模成某一种非线性规划。然而,由于非线性规划多是NP难的问题,并不容易得到最优的可行解。比如非线性规划中的整数规划,就存在着指数爆炸的问题,往往是结合近似算法、启发式算法甚至利用强化学习等方式以在短时间内给出一个较好的可行解。
鉴于非线性规划的普遍性和重要性,以下,我们将就非线性规划中最为常见和重要的两类问题——整数规划(IP)和混合整数(MIP)问题进行介绍。
二、定义及概念
-
整数规划:
所谓整数规划(Integer Programming)是指模型中所有决策变量都取整数值,可行解的区域离散。一般来说,整数规划多指线性整数规划,可用如下表达式来表征:
min x c T x s . t . A x ≤ b x ≥ 0 x ∈ Z n \min\limits_x c^Tx \\s.t. \quad Ax \le b \\ x \ge 0 \\ x \in Z^n xmincTxs.t.Ax≤bx≥0x∈Zn
实际中整数规划之所以重要,就是因为生活中很多东西都是离散的,或者是仅有“yes”或“no”的二值选择。以手机制造的例子来看,由于生产出的手机数量限制在整数,这在采用线性规划的方式下很少得到的最优解恰为整数,下图就是一个典型的例子。
上图中深蓝色框内为可行解区域,而浅蓝色点为可选择的方案(整数点取值)。很明显的,最优解并不是整数,这就需要在已有的LP方案上加以限制来得到整数规划方法。 -
混合整数规划:
混合整数规划(Mixed Integer Programming)是指模型中部分决策变量取值为整数,部分决策变量取值连续。相比于整数规划,区别仅仅是存在有取值连续的决策变量,其总体求解方法和整数规划相差不大。
三、主要求解方法
那么,如何对整数规划问题进行求解呢?目前主要有以下4大类方法:
1)精确算法:主要有割平面法,分支定界法等。其特点在于处理问题规模相对较小,且得到的解一定是最优解。
2)近似算法:只能针对特定问题求解,采用一些特殊的技巧(贪婪、松弛等)进行设计,求解规模相对放宽,但得到的最终结果未必是最优解。
3)启发式算法:没有严格的理论分析,通过设计经验或者观察到的性质设计出来的,得到的最终结果未必是最优解,但是能够更加适应大规模问题的情况。
在上述求解方法中,最为基本的就是分支定界法,在此基础上结合不同的优化技巧(预处理、割平面、启发式、并行)变形得到其它的方法。其中,预处理主要是通过在分支界定前采取一些预判操作以减小问题规模和化简约束条件,而切割平面通过去除一些非整数解来进一步化简约束条件,启发式则是在搜索树的某些节点上做一些额外的工作以找到更好的当前最优解,并行计算则是针对不同子树相互独立的特性来实现并行加速。因而可以说分支界定法是整数规划最为核心的方法,以下将详细介绍这一基础方法。
四、分支定界法介绍
分支定界法是一种利用搜索不断迭代的方法,每次选择不同的分支变量和子问题进行分支。所谓分支,是将全部可行空间分割成若干个子集;定界则是利用松弛化方法,将整形松弛化成连续变量,求得目标下界(对于最小问题而言)。对于界限超过可行解集目标值的分支则可以提前砍掉,以达到优化的效果。以下将结合一个示例来讲解一下具体的执行流程,目标函数及约束如下:
m
a
x
i
m
i
z
e
x
+
y
+
2
z
s
.
t
.
7
x
+
2
y
+
3
z
<
=
36
5
x
+
4
y
+
7
z
<
=
42
2
x
+
3
y
+
5
z
<
=
28
x
,
y
,
z
∈
N
maximize \quad x+y+2z \\s.t. \quad 7x+2y+3z<=36 \\5x+4y+7z<=42 \\2x+3y+5z<=28 \\x,y,z \in N
maximizex+y+2zs.t.7x+2y+3z<=365x+4y+7z<=422x+3y+5z<=28x,y,z∈N
由于优化目标为
m
a
x
(
x
+
y
+
2
z
)
max(x+y+2z)
max(x+y+2z),且
x
,
y
,
z
∈
N
x,y,z \in N
x,y,z∈N,所以最终值
v
≥
0
v \ge 0
v≥0,现取
v
=
0
v = 0
v=0。首先对求解目标进行松弛化,即,让原式中3个变量取值范围都松弛化为连续,求得目标值
11.4545
>
v
11.4545>v
11.4545>v,此时obj为目标上界,而x和z都非整数,显然不符合x、y、z都为整数的要求,需要进一步分支。
以考虑x值范围为例(也可以先考虑z的范围,这回导致生成的树形状不同,求取最优解速度也不一样),由于松弛条件下x=1.273,以此为分界线找到最近的2个整数,即考虑
x
≤
1
x \le 1
x≤1和
x
≥
2
x \ge 2
x≥2两种情况。在Node1条件下分别加入这两个新的约束条件,解得结果分别为Node2和Node3,二者
o
b
j
>
v
obj>v
obj>v,说明可能存在可行的整数解,需要继续分支。
以Node2和Node3继续下去,得到Node4~7,由于Node5和Node7无解,可以砍掉这俩分支。而Node6的解恰好都为整数,可以更新
v
=
11
v=11
v=11。然而,此时Node4的解仍存在非整数,需要继续分支下去,最终得到的结果是
m
a
x
(
x
+
y
+
2
z
)
=
11
max(x+y+2z)=11
max(x+y+2z)=11。
一些总结经验:
1)松弛化后没有可行解,则原问题也无可行解
2)松弛化后解恰好符合整数约束条件,则该解为子问题最优解
3)如果子问题X松弛化后解恰好符合整数约束条件,而另一个子问题Y松弛化后解得的目标值 < X松弛化后解得的目标值 + 1,则可以直接将X剪枝掉。文章来源:https://www.toymoban.com/news/detail-402584.html
参考链接
整数规划经典方法漫谈
Beyond_Linear_Programming
Branch-and-Cut 解混合整数规划(MIP)
branch and bound(分支定界)算法文章来源地址https://www.toymoban.com/news/detail-402584.html
到了这里,关于非线性规划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!