Skip to main content

Multi-criteria objectives in CP Optimizer

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);

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, and Truckfleet.cs.