The IBM ILOG CP Optimizer constraint programming solver has a Java API that currently seems to provide no easy way to print out a model. Here's a hack that prints the key ingredients (objectives and constraints). It does not explicitly list variables (they're embedded in the constraints and objectives), but that would be an easy fix. It also does not print out parameter settings. The code as written overrides the .toString() method for a class containing an instance of IloCP named 'solver'.
@Override
public String toString() {
if (solver == null) {
return "No model yet!";
} else {
StringBuilder sb = new StringBuilder();
Iterator it = solver.iterator();
while (it.hasNext()) { // iterate over the model
IloAddable object = (IloAddable) it.next(); // get the next object
if (object instanceof IloObjective) {
// For an objective, .toString() returns the body of the objective.
sb.append(object.getName())
.append(": ")
.append(object)
.append("\n");
} else if (object instanceof IloConstraint) {
/*
For some constraints, .toString() returns the body; for others
(notably inequalities), .toString() returns the name if there is
one, the body if the name is null.
*/
IloConstraint ct = (IloConstraint) object;
String name = ct.getName(); // get the name
ct.setName(null); // temporarily remove the name
sb.append(name)
.append(": ")
.append(ct) // this now gets the body
.append("\n");
ct.setName(name); // restore the name
} else {
sb.append(object.getClass().toString()).append("\n");
}
}
return sb.toString();
}
}
No comments:
Post a Comment
Due to intermittent spamming, comments are being moderated. If this is your first time commenting on the blog, please read the Ground Rules for Comments. In particular, if you want to ask an operations research-related question not relevant to this post, consider asking it on Operations Research Stack Exchange.