非零成本降低:下限或上限是否有效?
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。
降低的成本给出了对应于变量的框约束的对偶变量,正如在这个问题的相关答案中指出的那样:
我如何知道下限或上限是活动约束?当然,我可以检查变量值与其边界之间的差异是否小于某个 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。