问题
I use CBC to solve different integer linear programming problems. For some of them, the set of constraints is such that there is no solution. In this case, I get something like this:
Problem is infeasible - 0.30 seconds
Infeasible - objective value -6832.50000000
Is there any way CBC can tell me somehow "why" the problem is infeasible? For example, I would be happy to have a minimal set of constraints that are incompatible.
回答1:
I'm pretty sure, this functionality is not implemented in CBC.
Alternative software
There is support for this concept in Cplex and Gurobi though. For the latter i can confirm, that this works quite well (called Irreducible Inconsistent Subsystem (IIS)). Gurobi is also available without costs if you are in an academic setting (your access-domain needs to be recognized as university) and your project qualifies as academic project (always better to check out the terms of usage yourself).
Custom implementation
If you want to implement this yourself, have a look at:
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.
or
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.
The latter is implemented in this Ruby wrapper for cbc
来源:https://stackoverflow.com/questions/37593986/cbc-know-why-a-program-is-infeasible