| Overview | Group | Tree | Graph | Deprecated | Index | Concepts |
For some optimization problems, a single objective function is insufficient; several criteria are required to express the problem precisely. The different criteria are generally contradictory; for instance, when buying a car, it is not trivial to find a cheap model with a powerful engine, low fuel consumption, great comfort, a large inside and a small outside. Instead, a trade-off amongst the various criteria must be found. CP Optimizer allows the user to define a multi-criteria objective and to specify the type of trade-off between the criteria. Basically, a multi-criteria objective is constructed with three elements: an array of expressions representing the different criteria, the sense of the optimization which specifies whether the criteria are to be minimized or maximized and a policy to determine the trade-offs between the criteria.
Concert Technology uses instances of the class
IloMultiCriterionExpr for regrouping
the array of criteria and the trade-off policy. An instance of IloMultiCriterionExpr
is created by the function IloStaticLex() that can be given
as parameter to the function IloMaximize or IloMinimize to specify
the sense of optimization and the multi-criteria objective. For example:
IloMultiCriterionExpr moExpr = IloStaticLex(env, exprArray); IloObjective obj = IloMaximize(env, moExpr); model.add(obj);
The function IloStaticLex() defines a multi-criteria policy, ordering the different criteria
and performing a lexicographic optimization: the first criterion is considered as the most
important one, any improvement of this criterion is worth any loss on the other criteria. The
second criterion is the second most important one and so forth. The last criterion is the least
important one.
In the Java(TM) API, the IloStaticLex() method is called IloCP.staticLex.
In the .NET Languages API, this new method is called CP.StaticLex.
For further illustration, see the examples truckfleet.cpp, Truckfleet.java
and Truckfleet.cs.