Mip2.java
/* Copyright 2009, Gurobi Optimization, Inc. */
/* This example reads a MIP model from a file,
solves it, creates the fixed model from it and
solves it */
import gurobi.*;
public class Mip2 {
public static void main(String[] args) {
if (args.length < 1) {
System.out.println("Usage: java Mip2 filename");
System.exit(1);
}
try {
GRBEnv env = new GRBEnv();
GRBModel model = new GRBModel(env, args[0]);
model.optimize();
int optimstatus = model.get(GRB.IntAttr.Status);
double objval = 0;
if (optimstatus == GRB.OPTIMAL) {
objval = model.get(GRB.DoubleAttr.ObjVal);
System.out.println("Optimal objective: " + objval);
} else if (optimstatus == GRB.INF_OR_UNBD) {
System.out.println("Model is infeasible or unbounded");
return;
} else if (optimstatus == GRB.INFEASIBLE) {
System.out.println("Model is infeasible");
return;
} else if (optimstatus == GRB.UNBOUNDED) {
System.out.println("Model is unbounded");
return;
} else {
System.out.println("Optimization was stopped with status = "
+ optimstatus);
return;
}
GRBModel fixed = model.fixedModel();
fixed.getEnv().set(GRB.IntParam.Presolve, 0);
fixed.optimize();
int foptimstatus = fixed.get(GRB.IntAttr.Status);
if (foptimstatus != GRB.OPTIMAL) {
System.err.println("Error: fixed model isn't optimal");
return;
}
double fobjval = fixed.get(GRB.DoubleAttr.ObjVal);
if (Math.abs(fobjval - objval) > 1.0e-6 * (1.0 + Math.abs(objval))) {
System.err.println("Error: objective values are different");
return;
}
GRBVar[] vars = fixed.getVars();
double[] x = fixed.get(GRB.DoubleAttr.X, vars);
String[] vnames = fixed.get(GRB.StringAttr.VarName, vars);
for (int j = 0; j < vars.length; j++) {
if (x[j] != 0.0) System.out.println(vnames[j] + " " + x[j]);
}
} catch (GRBException e) {
System.out.println("Error code: "+e.getErrorCode()+". "+e.getMessage());
}
}
}
