大M法的介绍以及建模过程中if else的实现
前言:刚开始接触运筹优化时,经常听到大M法,又不太懂,现在写一篇文章记录一下对大M法的理解。
大M法的作用
一般而言大M法配合0、1变量可以实现对约束的选择,也就if else的语句。在我们平常的建模过程中我们会面临选择。举一个例子,
if
then
else
类似于这种if的结构,需要经过线性转换才能被写入模型中。
假设存在一个适当大小的正数M(M的大小会影响,转换的结果),以及一个0、1变量U。
csnd的公式编辑太麻烦了,直接手写了一下。
tips:为什么说M时足够大的数,而不是无穷呢。是因为如果M取得太大,会因为计算机精度得问题导致约束失效,这里就涉及到了数值分析方面,不过多得展开。所以M得取值没有统一的准则,靠经验选取,不能太大,也不能大小。
领悟了这种思路,就可以举一反三。比如同时实现三个约束里,两个约束成立。
当然,随着求解器的发展,很多建模语言已经实现了对约束的选取,比如yalmip的implies命令