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());
    }
  }
}