非零成本降低:下限或上限是否有效?

nonzero Reduced cost: Is lower or upper bound active?

降低的成本给出了对应于变量的框约束的对偶变量,正如在这个问题的相关答案中指出的那样:

我如何知道下限或上限是活动约束?当然,我可以检查变量值与其边界之间的差异是否小于某个 epsilon。但是,我不清楚如何选择这样的 epsilon,因为模型可能会尝试通过将下限设置为等于上限来修复变量。在这种情况下,没有 epsilon 可以明确指示哪个边界是活动边界。

cplex 是否提供其 C++ 中哪个绑定处于活动状态的信息 api?是否有任何其他 LP 求解器这样做?是否有另一种技巧来计算活动边界? 谢谢。

很大程度上看标志就可以了。降低成本的规则是:

               Basic   Non-basic-at-LB     Non-basic-at-UB      
minimization     0           >= 0               <= 0
maximization     0           <= 0               >= 0

一些问题:

  • 并非所有的求解器都遵循这一点(尤其是在最大化时)。
  • 退化可能使事情变得困难

大多数求解器都会让您访问基础状态。例如。 Cplex 具有 BasisStatus,它可以准确地为您提供变量的基本状态:Basic、AtLower、AtUpper 或 FreeOrSuperbasic。