『运筹OR帷幄』原创
作者:王源
编者按:
模型线性化的技巧在优化问题建模和求解中扮演着非常重要的地位,而关于这方面技巧的介绍往往分散在教科书的各个部分,在我们真正面对实际问题的时候往往不知道从何处开始下手或者该从哪里查阅资料。我这里总结了一些常用的优化模型线性化的方法,除了方便在使用的时候查阅以外,尽量在介绍的过程中告诉大家来龙去脉。授人以鱼不如授人以渔,掌握这些基本的思想对我们的建模水平会起到很大的帮助。
1
Max/Min
原始约束:
线性化后转化为:
约束(1.1)(1.2)是自然成立的。当时约束(1.3)变为 ,而约束(1.4)由于大M的存在变得不起作用。当是约束(1.4)变为 ,而约束(1.3)由于大M的存在变得不起作用了。
原始约束:
线性化后转化为:
结合约束(1.9)-(1.11)可以看出约束(1.12)的意义是: 至少有一个是成立的。
总结分析:通过上面的方法确实可以将模型线性化,但是同时也会带来一些负面作用。所以同学们在做线性化的时候一定要综合考虑优缺点,主要的负面作用有:
1 导致决策变量数量增加:从上面两个例子中我们不难观察出要线性化一个含有N个元素的Max/Min约束,我们需要引入N个新决策变量。对应上面的例子就是我们要引入
2 导致约束数量增加:同理约束数量也增加了不少,线性化一个含有N个元素的Max/Min约束,我们需要至少添加2N个约束。
3 引入了大M约束:大M约束确实给我们在建模上提供了相当多的遍历,但是在实际求解的过程中大M约束会对求解产生很多的影响,过大的大M值会导致求解过程中出现数值病态的问题,而过小的大M值又不能严格保证约束的成立。
2
绝对值
原始约束:
稍微思考一下就知道绝对值本质上可以看做是 Max 的特殊情况,即
那么我们可以直接套用上一节中处理Max约束的方法来等价处理绝对值,将式(1.1)-(1.5)中的 替换为 即可。
方法1 线性化后转化为:
上面方法1(2.1)-(2.5)是针对一般问题而言的,同样也引入了大M约束(2.3)和(2.4),对于一些稍微特殊的情况我们可以去掉约束(2.3)和(2.4),我们将在方法2中进行介绍。
方法2考虑如下含绝对值的优化问题:
其中
线性化转化为如下优化问题:
这样我们就可以将约束(2.3)(2.4)那样很丑的大M约束去掉了。切记之所以上面这种转化是等价的原因在于系数 是非负的才成立(如何证明这一点留作思考题 各位同学可以想一下)。如果系数 存在负数项的话,那还是需要老老实实按照方法1去转化。
方法3 依然是考虑优化问题(2.6)-(2.7),令, 由此可得: ,将 带入(2.6)(2.7)有
402 Payment Required
同样的方法3也需要 的条件才能成立。若系数存在负数项的话事实上我们是无法保证和至少有一个为0的隐含约束条件。
3
Piecewise Linear (Minmax/Maxmin)
考虑如下优化问题:
线性化转化为如下优化问题:
402 Payment Required
这一结论从上镜图可以比较直观的看到:
变量表示的是所有线性函数
构成的图的上方(或者说是上界),那么极小化 和原问题(3.1) (3.2)很容易看出是等价的。
推论:约束 等价于约束 ,这一条件在实际应用中也是会被经常用到的。
Maxmin和Minmax类似我们这里就不再赘述了。
4
Maxmax/Minmin
虑如下优化问题:
402 Payment Required
令
402 Payment Required
带入上式中可得:接下来我们发现约束(4.2)在第一节 Max/Min 中我们已经介绍了线性化的方法,那么就套用前面的方法直接对约束(4.2)进行线性化即可。
由于目标函数是同时考虑约束(4.5)我们知道约束(4.4)必然会被自动满足,因此去掉约束(4.4)也不会影响上述优化问题的最优解,因此最终可得:
402 Payment Required
Minmin的线性化方式和Maxmax基本一样,这里就不再赘述了。
5
分式目标函数
考虑如下优化问题:
令带入上面可得:
再令 带入上面进一步可得:
通过做两次变量的替换可以将分式目标函数线性化,(5.8)-(5.11) 中优化决策变量为 ,不难得到与原优化问题决策变量 的关系为:
6
半连续变量(带有fixed-cost)
考虑如下约束:
或者
线性化转化为:
该变量常用于带有fixed cost形式的目标函数或者约束上。
7
逻辑约束
7.1 两个约束至少有一个成立
或 两个约束至少有一个成立。线性化转化为:
7.2 两个约束只一个成立
或 两个约束只一个成立 线性化转化为:
将约束(7.7)带入约束(7.6)中进一步得到更简洁的形式:
7.3 If-then
若约束 成立,则约束 也成立 线性化转化为:
8
二次(混整)整数变量线性化
前面的内容主要都是针对连续变量的线性化,接下来我们考虑整数变量的线性化,整数变量中我们最常用的是二次整数变量的线性化。
决策变量 其中 考虑线性化二次交叉项:
令 , ,同时添加如下约束:从上式可以观察出为了表达出交叉项的信息,我们引入了新的决策变量 ,与原来优化问题的决策变量,采用如上方法线性化之后会让决策变量从线性扩增到平方的数量级。因此如上的线性化方式未必能让问题变得简单,再使用时需要进一步结合问题性质去考虑。
决策变量 其中 考虑线性化二次交叉项:
令 ,同时添加如下约束:需要注意的是这块的 是一个混整项。
参考文献
【1】Bertsimas D, Tsitsiklis J N. Introduction to linear optimization[M]. Belmont, MA: Athena Scientific, 1997.
【2】Matthias Miltenberger. Gurobi Optimization. Advanced Modeling Techniques in Gurobi
【3】日出东方:9种常用的线性化方法(含Gurobi中的写法):
9种常用的线性化方法(含Gurobi中的写法)
往期精彩回顾
适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
AI基础下载机器学习交流qq群955171419,加入微信群请扫码: