The active model

Describes the active model in the Java API.

Modeling objects, constraints and objective functions are created as explained in Using IloModeler; then these components must be added to the active model. The active model is the model implemented by the IloCplex object itself. In fact, IloModeler is an extension of the IloModel interface defining the model API. Thus, IloCplex implements IloModel, or in other words, an IloCplex object is a model. The model implemented by the IloCplex object itself is referred to as the active model of the IloCplex object, or if there is no possibility of confusion between several optimizers, simply as the active model.

A model is just a set of modeling objects of type IloAddable such as IloObjective and IloRange. Objects of classes implementing this interface can be added to an instance of IloModel. Other IloAddable objects usable with IloCplex are IloLPMatrix, IloConversion, IloSOS1, and IloSOS2. These will be covered in the IloMPModeler section.

Variables cannot be added to a model because IloNumVar is not an extension of IloAddable. All variables used by other modeling objects (IloAddable objects) that have been added to a model are implicitly part of this optimization model. The explicit addition of a variable to a model can thus be avoided.

During modeling, a typical sequence of operations is to create a modeling object and immediately add it to the active model. To facilitate this, for most constructors with a name such as ConstructorName, there is also a method add ConstructorName which immediately adds the newly constructed modeling object to the active model. For example, the call:


IloObjective obj = cplex.addMaximize(expr);

is equivalent to:


IloObjective obj = cplex.add(cplex.maximize(expr));

Not only do the add ConstrucorName -methods simplify the program, they are also more efficient than the two equivalent calls because an intermediate copy can be avoided.