CBC - 知道 "why" 一个程序不可行

CBC - know "why" a program is infeasible

我使用 CBC 来解决不同的整数线性规划问题。对于其中一些,约束集是这样的,没有解决方案。在这种情况下,我得到这样的结果:

Problem is infeasible - 0.30 seconds
Infeasible - objective value -6832.50000000

CBC 有什么办法可以告诉我 "why" 这个问题是不可行的吗?例如,我很乐意拥有一组不兼容的最小约束。

我很确定,此功能未在 CBC 中实现。

替代软件

不过 Cplex and Gurobi 支持这个概念。对于后者,我可以确认,它工作得很好(称为 Irreducible Inconsistent Subsystem (IIS))。如果您在学术环境中(您的访问域需要被认可为大学)并且您的项目符合学术项目的条件(最好自己检查使用条款),Gurobi 也可以免费使用。

自定义实现

如果您想自己实现,请查看:

O. Guieu and J.W. Chinneck (1999), "Analyzing Infeasible Mixed-Integer and Integer Linear Programs", INFORMS Journal on Computing, vol. 11, no. 1, pp. 63-77.

Ulrich Junker. 2004. QUICKXPLAIN: preferred explanations and relaxations for over-constrained problems. In Proceedings of the 19th national conference on Artifical intelligence (AAAI'04), Anthony G. Cohn (Ed.). AAAI Press 167-172.

后者在this Ruby wrapper for cbc

中实现