很长时间没有提笔写博,近两年来一直从事规划领域方面的研究,在熟悉业务的同时,对规划算法也有了新的看法。相比智能算法的概率性,规划算法对求解的精确性要求更高。
本篇博客将围绕非线性问题如何线性化典型问题,分类归纳,给正在入手线性规划的同学们带来系列感悟。
文章目录
- 前言
- 一、非线性规划问题的典型特征
- 二、常用处理技巧
- 分段函数形式
- 条件约束形式
- 绝对值函数形式
- 最小/大值函数形式
- 逻辑或形式
- 含有0-1变量的乘积形式
- 混合整数形式
- 分式目标函数
- 总结
前言
我们知道,对于线性规划问题,有非常成熟的求解方法——单纯形法。可实际在科研建模时,目标函数或是约束条件,极大概率会出现非线性的形式。
此时若选择采用启发式算法求解,就相当于放弃了求精确解,而实际业务上对问题解的要求更高。因此,了解并懂得何种形式可以转化为线性和如何线性化,是非常重要的。
在解决实际较为复杂的问题时,会面临以下两个问题:
- 我应该构建哪种非线性形式来刻画该问题?
- 这样的非线性刻画还能否线性化(决定了还能否求得精确解)?
为了回答好这两个问题,本文将围绕《非线性问题的典型特征刻画》《线性化处理技巧》两部分解释。
一、非线性规划问题的典型特征
笔者认为,经典线性规划问题可以统一转换为矩阵化的范式:
object:
constraints:
![]()
variables:
满足其他条件等
然后可采用单纯形法进行处理。单纯形法本质是迭代找每个问题解空间的凸点,不断更新凹点最终缩小解空间到截止,则最优解必存在某一凸点上。这也就是凸优化的常用求解途径(很多学者都会研究非凸优化发paper)。有意思的是国内外的凸凹翻译是反的。而我们认为非线性规划就是一个非凸问题。
回到正题,非线性规划问题的典型数学特征为,具有:
- 分段函数形式
- 条件约束形式
- 绝对值函数形式
- 最小/大值函数形式
- 逻辑或形式
- 含有0-1变量的乘积形式
- 混合整数形式
- 分式目标函数
以上均可实现线性化。
二、常用处理技巧
线性化的主要手段其实就两点:
- 引入0-1变量
- 引入很大的整数M
灵活运用这两点会呈现非常巧妙且神奇的线性化技巧。