为什么 Matlab `intlinprog` return in-integers 用于整数变量?

Why does Matlab's `intlinprog` return near-integers for integer variables?

我的背景不是线性规划。我正在研究 Matlab 的混合整数线性规划 (intlinprog),目的是正确应用它,而不是推进底层引擎的科学。

根据intlinprog页面,在Limitations部分,解决方案似乎是在非整数space中寻求的,并且被认为满足整数约束如果表面上是整数的变量有非常小的非整数部分。

为什么要这样做?为什么它不像在组合问题中那样只搜索整数 space?这样一来,就不存在结果解是否足够接近整数的问题了。

intlinprog 的底层算法基于一个名为 "Branch and Bound" (BnB) 的过程。在此算法框架中,解决方案 space 并非字面上的 "searched",而是隐式处理了完整性约束。该方案已被证明是 general MILP 问题的最有效算法。 (当然,有许多针对 特定 问题的算法,它们的工作原理不同,并将整数真正视为整数,例如 graph/network 算法)。

Continuous relaxations在BnB中起着突出的作用:去除("relaxing")变量的完整性约束后,剩下的问题只是一个线性优化问题这可以非常有效地解决。在该分支定界过程中,求解了一系列此类连续松弛,每个松弛在整数变量上具有不同的界限。

现在这些子问题都是用浮点数来求解的,自然不能保证结果是整数。因此,大多数 MILP 求解器都有一个可设置的公差,用于控制 "integer".

的含义

intlinprog 背后的不同算法组件的概述在 documentation 中给出。