Through clever use of the features provided in the multi-scenario interface, it is actually possible to do a lot more than it may first appear.
Adding or Deleting Variables or Constraints
The multi-scenario interface provides no way to add or remove
variables or constraints in a scenario, but the same effect can be
achieved by changing variable bounds and constraint right-hand side
values. To remove a variable in a scenario, simply change its lower
and upper bounds to zero. To add a variable, set its bounds to zero
in the base model and change them to their true values in the
scenario. To remove a less-than constraint, change the
right-hand-value in the scenario to
GRB.INFINITY. To add one,
set its right-hand side to
GRB.INFINITY in the base model and
change it to its true value in the scenario.
Changing the sense of a constraint can also be done using similar
tricks. For example, you can transform an equality constraint in the
base model into an inequality in a scenario by splitting the equality
into a pair of inequalities. The right-hand side values for both
inequalities in the base model would be equal to the true value in the
equality. The right-hand side value on one of the two inequalities
can then be relaxed to
GRB.INFINITY in the scenario.
You can also change the type of a variable. For example, to transform an integer variable in the base model into a continuous variable in a scenario, you can add both variables in the base model, along with a split equality constraint that sets them equal to each other. That equality constraint could then be relaxed in the scenario (using the techniques just described).
This isn't meant to be an exhaustive list of all of the ways that you can use supported multi-scenario features to achieve seemingly unsupported outcomes. The set of building blocks that we have provided can be assembled in a variety of different ways.
If all scenarios in your multi-scenario model are infeasible, your
optimize call will produce an
INF_OR_UNBD) status code. While you can't compute an IIS on a
multi-scenario model, you can extract individual scenarios as Gurobi
model objects using the
singleScenarioModel method (see below)
and then compute an IIS on each scenario individually.
Solving The Base Model
As noted earlier, an
optimize call on a multi-scenario model
will not solve the base model. If you'd like to solve that model too,
include an empty scenario among your scenarios.
Extracting One Scenario
While it may appear to be important to minimize the number of scenarios in your model, note that some scenarios are trivial to solve and thus have no impact on overall solution cost. The main thing to keep in mind is that, if (1) the solution for one scenario is feasible for another scenario, and (2) the bounds and right-hand side values for the first scenario are never tighter than the bounds for the other scenario, then the optimal solution for the first scenario is also optimal for the other scenario. This means that some scenarios won't increase solution cost significantly.