非线性建模问题的线性化思考

发布于:2024-09-19 ⋅ 阅读:(5) ⋅ 点赞:(0)

很长时间没有提笔写博,近两年来一直从事规划领域方面的研究,在熟悉业务的同时,对规划算法也有了新的看法。相比智能算法的概率性,规划算法对求解的精确性要求更高。

本篇博客将围绕非线性问题如何线性化典型问题,分类归纳,给正在入手线性规划的同学们带来系列思考感悟。

文章目录


前言

我们知道,对于线性规划问题,有非常成熟的求解方法——单纯形法。可实际在科研建模时,目标函数或是约束条件,极大概率会出现非线性的形式。

此时若选择采用启发式算法求解,就相当于放弃了求精确解,而实际业务上对问题解的要求更高。因此,了解并懂得何种形式可以转化为线性和如何线性化,是非常重要的。

在解决实际较为复杂的问题时,会面临以下两个问题:

  • 我应该构建哪种非线性形式来刻画该问题?
  • 这样的非线性刻画还能否线性化(决定了还能否求得精确解)?

为了回答好这两个问题,本文将围绕《非线性问题的典型特征刻画》《线性化处理技巧》两部分解释。


一、非线性规划问题的典型特征

笔者认为,经典线性规划问题可以统一转换为矩阵化的范式:

object: min CX

constraintsB\leq AX\leq U 

variablesX\in \mathbb{R}_{m\times n} 满足其他条件等

然后可采用单纯形法进行处理。单纯形法本质是迭代找每个问题解空间的凸点,不断更新凹点最终缩小解空间到截止,则最优解必存在某一凸点上。这也就是凸优化的常用求解途径(很多学者都会研究非凸优化发paper)。有意思的是国内外的凸凹翻译是反的。而我们认为非线性规划就是一个非凸问题。

回到正题,非线性规划问题的典型数学特征为,具有:

  • 分段函数形式
  • 条件约束形式
  • 绝对值函数形式
  • 最小/大值函数形式
  • 逻辑或形式
  • 含有0-1变量的乘积形式
  • 混合整数形式
  • 分式目标函数

以上均可实现线性化。

二、常用处理技巧

线性化的主要手段其实就两点:

  • 引入0-1变量
  • 引入很大的整数M

灵活运用这两点会呈现非常巧妙且神奇的线性化技巧。

1.分段函数

(1)示例1

分段函数f(x)的表达式如下,问题域为0 \leq x \leq c

如果要对分段函数f(x)进行线性化处理,则需要引入0-1辅助变量\lambda和一个很大的正整数M


对上式分析可知:

①考虑\lambda _1=1, \lambda _2=0, \lambda _3=0,对应分段函数1,且约束均成立

②考虑\lambda _1=0, \lambda _2=1, \lambda _3=0,对应分段函数2,且约束均成立

③考虑\lambda _1=0, \lambda _2=0, \lambda _3=1,对应分段函数3,且约束均成立

(2)继而推广至K项分段函数

 通过增加K个0,1变量,以及极大值M,实现线性化

(3)总结分析

1)约束区间的适应性

约束区间可适应\leq\geq<>,不影响以上特性。

2)约束区间的特定性

  • 上界可推广至\infty
  • 下界有且仅有能为零,因为\lambda _k为0/1变量,仅\lambda _k为1时,其它项为零,使得约束下界为0
  • 上下界必须和问题域范围相同。在分段函数中,约束区间的并集 = 问题域

3)当约束下界为a_0\neq 0时,如何处理?①如何同问题域保持一致性②同各分段函数约束区间保持一致性?

在分段函数中,约束区间的并集 = 问题域。所以保持各分段函数约束区间一致即可。

这里结合问题域,区分两种情况讨论:

a_0<0

考虑对x坐标进行平移,增加变量y,令y=x-a_0

a_0>0

如果已定义问题域范围为a_0<x<a_k,可不做任何处理(因为问题域a_0<x<a_ka_0*0<x<a_1同时定义约束会取并集得到a_0<x<a_1,在约束区间上保持一致);未定义问题域范围时,需要考虑对x坐标进行平移,增加变量y,令y=x-a_0

2.条件约束★

条件约束相对来说较常见,可以理解为if... then...。分为单条件约束和组合条件约束。顾名思义:

(1)单条件约束

指围绕变量Variable,仅有一条约束,如:

通常为了解决约束条件,一般采用松弛法,即“将约束范围放大到无穷范围、将约束条件松弛到恒成立”。这里我们设置无穷大变量M,和0/1变量k。

通过设置两个变量,在满足约束条件的同时,对范围外松弛到恒满足约束条件,完成约束的去除 。对上式分析可知:

①考虑k=1,对应原式

②考虑k=0,对应为- \infty <f(x)<\infty,且约束-\infty < x < \infty

与分段函数不同,在分段约束中,一致性如何判定

  • 与问题域是否保持一致?只有问题域B \leq x \leq U一定要先定义(一般约束区间为问题域子集,会先行定义)才成立
  • 与条件约束是否保持一致?显然- \infty <f(x)<\infty-\infty < x < \infty成立。

(2)组合条件约束

多种单条件约束的组合,且各条件区间上不冲突。

与分段函数不同,组合约束各区间并集不一定等于问题域。

定义K个0/1变量和1个M大整数变量,线性化为以下所有公式:

分析:通过控制0/1变量\lambda_k仅有1个能为1,实现K个表达式只有1个式子对应原式,其他均为默认[-\infty , + \infty]显然成立。实现以上公式去约束、线性化。

(3)总结分析

如果问题域明确是[0, + \infty],则可以考虑以下线性操作:

3. 绝对值约束

举例:要求线性化如下数学模型

求解方法1:用yi代替绝对值部分

注意,yi=|xi|的数学含义其实就是:yi≥xi和yi≥-xi。这个数学思想非常重要,可以解决很多有关绝对值的问题。

求解方法2:用ui、vi代替

这种方法没有那么直观,一回生,二回熟嘛,以后看到绝对值问题,脑海中有这种思路就好啦。

高中或是高数课上学过如下定理:

则之前的数学模型可以线性化为:

将左边|xi|转化为ui+vi,x转化为u-v。注意,这里的x是向量奥,对于x下标中的每个i都是成立的,可不能以为只有一个约束条件。

4. 逻辑或

该部分主要针对约束条件(含有逻辑或)的线性化操作。通常,逻辑或两端的约束存在三种情形。

  • 情形1:逻辑或两段均为≤,即:

此时线性化方法为:

引入两个0-1变量M。分类讨论取0或1的四种情形便能理解以上过程。思路非常巧妙,希望大家多悟几遍并消化。

这里虽然只讲了"均为≤"的情形,大家理解了这个逻辑,对于"两边均为≥""一边≥一边≤"的情形,线性化思路是类似的。

大家可以试着写一些,我这里总结句口诀:大减小加。含义是:

只要用了大于等于,后面M前面的符号一定是减号;
只要用了小于等于,后面M前面的符号一定是加号。

大家可以思考下为什么是这样,相信你一定理解的~

  • 情形2:一端为≤,一端为=,即:

此时线性化方法为:

可见,多添加一个≥的式子即可。那么,情形3如何处理相信大家也猜到了。(感谢评论区,第三个约束的M前应该是减号,即bx≥c2-M(1-v),抱歉

  • 情形3:两端均为=,即:

此时线性化方法为:

可见,逻辑或是通过新引入的两个0/1变量u和v来控制的,再次感叹非常巧妙!

待更新


总结


网站公告

今日签到

点亮在社区的每一天
去签到