CP Optimizer can solve models with a multi-criteria objective.
The truckfleet example illustrates this feature. The model and data files can be found in:
Install_dir\opl\examples\opl\truckfleet
where Install_dir is your installation directory.
In the model truckfleet.mod, there are two criteria for the minimize objective, e1 and e2, as shown in the code extract.
// Objective: first criterion for minimizing the cost for configuring and loading trucks
// second criterion for minimizing the number of trucks
dexpr int e1 = sum(t in Trucks) (truckCost[truckConfigs[t]]*(load[t]!=0))
+ sum(t in Trucks) transitionCost[t];
dexpr int e2 = numUsed;
minimize staticLex(e1, e2); // trying to minimize cost first