优化模型中的非线性项线性化方法(持续更新)

本文介绍了在构建优化问题模型时,面对非线性项如何通过bigM法进行线性化的处理,包括连续变量和01变量的乘积以及用if语句表示的约束条件实例。着重展示了bigM法的具体应用和难点,鼓励读者多阅读文献并参与讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在建立优化问题的模型时,目标函数和约束条件中出现非线性项,会导致模型呈现非线性,即NLP问题,采用商业求解器一般很难求解,故需要对非线性项进行线性化处理。下面用于记录阅读文献时遇到的线性化方法,不做过多定义,分别进行举例说明便于理解。

一、bigM法

1、两个连续变量相乘带来的非线性项

出现在约束中:
如KKT条件的互补松弛约束
λ(x−y−b)=0\lambda(x-y-b)=0λ(xyb)=0
λ≥0 \lambda \ge 0 λ0
x−y−b≥0x-y-b\ge 0xyb0
x,y为连续变量,其中λ\lambdaλ为对偶乘子,b为常数,上述等式约束构成了两个连续变量的相乘,采用bigM法线性化过程如下式所示
λ≤Mz\lambda \le MzλMz
x−y−b≤M(1−z)x-y-b\le M(1-z)xybM(1z)
出现在目标函数中:
min⁡x,y xy\underset{x,y}{\mathop{\min }}\,xyx,yminxy
当x和y都为连续变量,非线性项由两个连续变量相乘带来,进行如下处理:
y=∑j=1JΔy⋅zjy=\sum\limits_{j=1}^{J}{\Delta y\cdot {{z}_{j}}}y=j=1JΔyzj
∑j=1Jzj≤Zmax⁡\sum\limits_{j=1}^{J}{{{z}_{j}}}\le {{Z}^{\max }}j=1JzjZmax
Δy\Delta yΔy为对y切割的大小,为一个固定的常数,具体值根据所求精度来定,zj{{z}_{j}}zj为01变量,这样两个连续变量相乘也就变为01变量与连续变量相乘∑j=1JΔy⋅xzj=∑j=1JUj\sum\limits_{j=1}^{J}{\Delta y\cdot x{{z}_{j}}}=\sum\limits_{j=1}^{J}{{{U}_{j}}}j=1JΔyxzj=j=1JUj,目标函数替换为∑j=1JUj\sum\limits_{j=1}^{J}{{{U}_{j}}}j=1JUj,可以采用2中出现在约束中的线性化方法,表示如下:
Uj=Δy⋅xzj{{U}_{j}}=\Delta y\cdot x{{z}_{j}}Uj=Δyxzj
−M(1−zj)≤Uj−Δy⋅x≤M(1−zj)-M(1-{{z}_{j}})\le {{U}_{j}}-\Delta y\cdot x\le M(1-{{z}_{j}})M(1zj)UjΔyxM(1zj)
−Mzj≤Uj≤Mzj-M{{z}_{j}}\le {{U}_{j}}\le M{{z}_{j}}MzjUjMzj
2、01变量与连续变量相乘带来的非线性项
出现在约束中:
在选址优化问题中经常出现,如发电机定容选址
x≤yzx\le yzxyz
x,y为连续变量,z为01变量,非线性项为yz,采用bigM法线性化过程如下式所示
n=yzn=yzn=yz
x≤nx\le nxn
−M(1−z)≤n−y≤M(1−z)-M(1-z)\le n-y\le M(1-z)M(1z)nyM(1z)
−Mz≤n≤Mz-Mz\le n\le MzMznMz
3、用if语句表示约束条件时,一些求解器写约束时可能不支持if判断(非线性项问题,看到了就一并记录)
{y≤b if x≥ay≤c if x<a\left\{ \begin{align} & y\le b\text{ if }x\ge a \\ & y\le c\text{ if }x<a \\ \end{align} \right. {yb if xayc if x<a
为变量,采用bigM法进行表示上述if约束条件
{a+(z−1)M≤x<a+zMy≤b+(1−z)My≤c+zM\left\{ \begin{align} & a+(z-1)M\le x<a+zM \\ & y\le b+(1-z)M \\ & y\le c+zM \\ \end{align} \right. a+(z1)Mx<a+zMyb+(1z)Myc+zM
上述M都为较大的正值,如何选取合适的M值是bigM法的难点

持续更新,敬请期待!!(哈哈哈哈哈,得多看文献啊,有任何问题欢迎评论区讨论)

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值