Try our new documentation site (beta).
Filter Content By
Version
Text Search
${sidebar_list_label} - Back
Filter by Language
Sensitivity.java
/* Copyright 2013, Gurobi Optimization, Inc. */ /* Simple MIP sensitivity analysis example. For each integer variable, fix it to its lower and upper bound and check the impact on the objective. */ import gurobi.*; public class Sensitivity { public static void main(String[] args) { if (args.length < 1) { System.out.println("Usage: java Sensitivity filename"); System.exit(1); } try { // Read model GRBEnv env = new GRBEnv(); GRBModel a = new GRBModel(env, args[0]); a.optimize(); a.getEnv().set(GRB.IntParam.OutputFlag, 0); // Extract variables from model GRBVar[] avars = a.getVars(); for (int i = 0; i < avars.length; ++i) { GRBVar v = avars[i]; if (v.get(GRB.CharAttr.VType) == GRB.BINARY) { // Create clone and fix variable GRBModel b = new GRBModel(a); GRBVar bv = b.getVars()[i]; if (v.get(GRB.DoubleAttr.X) - v.get(GRB.DoubleAttr.LB) < 0.5) { bv.set(GRB.DoubleAttr.LB, bv.get(GRB.DoubleAttr.UB)); } else { bv.set(GRB.DoubleAttr.UB, bv.get(GRB.DoubleAttr.LB)); } b.optimize(); if (b.get(GRB.IntAttr.Status) == GRB.Status.OPTIMAL) { double objchg = b.get(GRB.DoubleAttr.ObjVal) - a.get(GRB.DoubleAttr.ObjVal); if (objchg < 0) { objchg = 0; } System.out.println("Objective sensitivity for variable " + v.get(GRB.StringAttr.VarName) + " is " + objchg); } else { System.out.println("Objective sensitivity for variable " + v.get(GRB.StringAttr.VarName) + " is infinite"); } // Dispose of model b.dispose(); } } // Dispose of model and environment a.dispose(); env.dispose(); } catch (GRBException e) { System.out.println("Error code: " + e.getErrorCode() + ". " + e.getMessage()); } } }