在建立优化问题的模型时,目标函数和约束条件中出现非线性项,会导致模型呈现非线性,即NLP问题,采用商业求解器一般很难求解,故需要对非线性项进行线性化处理。下面用于记录阅读文献时遇到的线性化方法,不做过多定义,分别进行举例说明便于理解。
一、bigM法
1、两个连续变量相乘带来的非线性项
出现在约束中: 如KKT条件的互补松弛约束
λ
(
x
−
y
−
b
)
=
0
\lambda(x-y-b)=0
λ(x−y−b)=0
λ
≥
0
\lambda \ge 0
λ≥0
x
−
y
−
b
≥
0
x-y-b\ge 0
x−y−b≥0 x,y为连续变量,其中
λ
\lambda
λ为对偶乘子,b为常数,上述等式约束构成了两个连续变量的相乘,采用bigM法线性化过程如下式所示
λ
≤
M
z
\lambda \le Mz
λ≤Mz
x
−
y
−
b
≤
M
(
1
−
z
)
x-y-b\le M(1-z)
x−y−b≤M(1−z) 2、01变量与连续变量相乘带来的非线性项 出现在约束中: 在选址优化问题中经常出现,如发电机定容选址
x
≤
y
z
x\le yz
x≤yz x,y为连续变量,z为01变量,非线性项为yz,采用bigM法线性化过程如下式所示
n
=
y
z
n=yz
n=yz
x
≤
n
x\le n
x≤n
−
M
(
1
−
z
)
≤
n
−
y
≤
M
(
1
−
z
)
-M(1-z)\le n-y\le M(1-z)
−M(1−z)≤n−y≤M(1−z)
−
M
z
≤
n
≤
M
z
-Mz\le n\le Mz
−Mz≤n≤Mz 3、用if语句表示约束条件时,一些求解器写约束时可能不支持if判断(非线性项问题,看到了就一并记录)
{
y
≤
b
if
x
≥
a
y
≤
c
if
x
<
a
\left\{ \begin{align} & y\le b\text{ if }x\ge a \\ & y\le c\text{ if }x |