| Overview | Group | Tree | Graph | Index | Concepts |
This macro defines a new choice function (a criterion) in Solver for setting parameters on the search for a solution, you use this macro if you have one integer criterion.
This macro defines a choice function for constrained variables of type
varType. The name of the function will be name.
The second argument, criterion, should be a C++ expression of
type IlcInt. In that expression, the constrained variable to
evaluate must be denoted by var. The index of the variable in
the array is varIndex. The function named name
returns the index of the constrained variable of type varType
that minimizes the expression criterion. If all the constrained
variables have already been bound, then this function returns -1.
Example
As an example of how to use IlcChooseIndex1, the predefined criteria for constrained integer variables could be defined in the following way with this macro:
IlcChooseIndex1(IlcChooseMinSizeInt, var.getSize(), IlcIntVar); IlcChooseIndex1(IlcChooseMaxSizeInt, -var.getSize(), IlcIntVar); IlcChooseIndex1(IlcChooseMinMinInt, var.getMin(), IlcIntVar); IlcChooseIndex1(IlcChooseMinMaxInt, var.getMax(), IlcIntVar); IlcChooseIndex1(IlcChooseMaxMinInt, -var.getMin(), IlcIntVar); IlcChooseIndex1(IlcChooseMaxMaxInt, -var.getMax(), IlcIntVar);
Other classes of variables can also be used:
IlcChooseIndex1(IlcChooseMinSizeAny, var.getSize(), IlcAnyVar);
Implementation
Here's how this macro might be implemented.
#define IlcChooseIndex1(name, criterion, type)
IlcInt name (IlcInt theIlcChooseIndexSize,
name2(type,I**) vars) {
IlcInt varIndex;
type var;
name2(type,I**) tmp=vars;
IlcInt indexBest=-1;
IlcInt value, min = IlcIntMax;
for (varIndex=0;
varIndex<theIlcChooseIndexSize;
varIndex++, tmp++) {
var = type(*tmp);
if (!var.isBound()) {
value = criterion;
if (min > value) {
indexBest = varIndex;
min = value;
}
}
}
return indexBest;
}
IlcInt name (const name2(type,Array) array){
return name (array.getSize(), array.getImpl()->getArray());
}See Also:
IlcChooseFirstUnboundInt, IlcChooseIndex2, IlcChooseIntIndex, IlcChooseMaxMaxInt, IlcChooseMaxMinInt, IlcChooseMaxSizeInt, IlcChooseMinMaxInt, IlcChooseMinMinInt, IlcChooseMinSizeInt