将分段约束转换成线性约束

关于将分段约束转换成线性约束网上没有找到多少参考资料,找到仅有的几个资料也没整明白,但好在解决了问题。

讲人话系列——分段约束的整数规划问题,这篇博客关键部分的图片没有显示出来,后来参考【运筹学基础课件】整数规划.PPT明白了一些,但仍然没有完全理解。

还找到一个MATLAB源代码,有一定参考价值,但是注释比较少难以理解。


我遇到的问题是线性优化约束条件中存在以下分段约束问题:

\begin{matrix} x=0 \\ a<=x<=b \end{matrix}

转换成线性约束可以表示成:

\begin{matrix} -M(1-y)\leqslant x\leqslant M(1-y)\\ a-My\leq x\leq b+My\\ y=0 or 1 \end{matrix}

y是逻辑变量,M是一个非常大的整数(这样当y为0的时候,第一个约束范围包含了第二个约束范围)。

这里需要注意的问题是:x=0不能直接转成x==M(1-y),否则不会找到在x=0约束下的解。


对于上面这样的分段约束,因为一个约束条件是x= 0,所以上述线性化约束可以进一步简化为

\begin{matrix} ya<=x<=yb \\ y=0or1 \end{matrix}

你可能感兴趣的:(整数规划,分段约束,整数规划)