| > Discrete Optimization > Cutting Stock: Column Generation > Developing the Model: Building and Modifying > Adding Extractable Objects: Both Ways |
Adding Extractable Objects: Both Ways |
INDEX
PREVIOUS
NEXT
|
In a Concert Technology application, there are two ways of adding extractable objects to a model: by means of a template function (IloAdd) or by means of a method of the model (IloModel::add or IloArray::add). In this example, you see both ways.
When an objective is added to the model, the application needs to keep a handle to the objective RollsUsed because it is needed when the application generates columns. For that purpose, the application relies on the template function IloAdd, like this:
IloObjective RollsUsed = IloAdd(cutOpt, IloMinimize(env)); |
Apart from the fact that it preserves type information, that single line is equivalent to these lines:
IloObjective RollsUsed = IloMinimize(env); cutOpt.add(RollsUsed); |
Likewise, the application adds an array of constraints to the model. These constraints are needed later in column generation as well, so the application again uses IloAdd again to add the array Fill to the model.
IloRangeArray Fill = IloAdd(cutOpt, IloRangeArray(env, amount, IloInfinity)); |
That statement creates amount.getSize range constraints. Constraint Fill[i] has a lower bound of amount[i] and an upper bound of IloInfinity.
It is also possible to add objects to your model by means of the method IloModel::add. This example uses that approach in these lines:
patGen.add(IloScalProd(size, Use) <= rollWidth); |
In contrast, to create Cut, an array of decision variables, the application uses the add method of IloArray within a loop, like this:
IloInt nWdth = size.getSize(); for (j = 0; j < nWdth; j++) Cut.add(IloNumVar(RollsUsed(1) + Fill[j](int(rollWidth / size[j])))); |
In that loop, the variable Cut[j] is created with an objective coefficient of 1 (one), and all its pattern coefficients are initially 0 (zero) except for the one in Fill[j]. That one is set to (int(rollWidth / size[j])). By default, the type of each variable is IloFloat, so it is not explicitly mentioned in the loop.
| Copyright © 1987-2003 ILOG, S.A. All rights reserved. Legal terms. | PREVIOUS NEXT |