# What is the default weight allocation in solving multi-objective on CPLEX?

I am currently working on a multi-objective problem where I am trying to minimize cost and time. I am using Docplex to solve it, but I did not specify any weight using the following code:

mdl.set_multi_objective(ObjectiveSense.Minimize, [totalcost,cumultime], priorities=[1, 2])


Understandably, I did set a lexicographic order, but I would like to know what is the default weight allocation. Should I assume that by solving it, Docplex also determines the optimal weight allocation ? If you can provide the relevant documentation, I'd be grateful.

• You don't need weights to find a lexicographically optimal solution (or to solve multi objective problems in general actually). You solve two problems, or handle it implicitly in the branch and bound process
– Sune
Commented Jul 22, 2022 at 7:26
• I now get it, thank you.
– Bree
Commented Jul 22, 2022 at 15:43

Weights are defined by you to tell CPLEX how objectives with the same priorities are blended together. If you don't define weights, by default they are all assumed to be equal to 1.

Let's assume in your example that you have 3 objectives: [obj1, obj2, obj3] with the following priorities and weights:

mdl.set_multi_objective(ObjectiveSense.Minimize, [obj1, obj2, obj3], priorities=[1, 2, 2], weights=[1, 80, 20])

Here, obj2 and obj3 have the same priority. So, they are blended together and the weights you define are used for that blending (making that objective a weighted sum). Basically, the CPLEX first solves for obj1 and find sol1 for it. Then it adds the constraint that $$obj1 \le sol1$$ (since you're minimizing) and solves for 80obj2 + 20obj3. If you don't provide any weights, you're solving for obj2 + obj3 (remember, we assigned the same priorities to these two objectives)

• Thank you, so in my case, I have $Z\ = \ totalcost \ +\ cumultime$ with the additional constraint you mentioned once the prioritized objective has been solved. I also went on sciencedirect.com/topics/engineering/lexicographic-method and got that it is a method to solving multi-objective problems as it is a unique approach to specifying preferences, does not require that the objective functions be normalized, and always provides a Pareto optimal solution.
– Bree
Commented Jul 22, 2022 at 15:39
• So, in your case, the model first solves for min z = cumultime since it has a higher priority. Then it adds the obtain value (let's call it z1) and add a constraint of the form cumultime <=z1 and solve for min z = totalcost.
– EhsanK
Commented Jul 23, 2022 at 0:06
• In my case, it would be solving for $min \ Z_{1} \ = \ totalcost$ as the cost is my first objective with priority 1. Once $Z_{1}$ is obtained, then we add the constraint $totalcost \ \leq \ Z_{1}$ and solve for $min \ Z_{2} \ = \ cumultime$. That's how it shows in my solution log.
– Bree
Commented Jul 23, 2022 at 2:50
• In CPLEX, sub-problems are solved one after the other in the order of decreasing priorities. Check this notebook from CPLEX for an example
– EhsanK
Commented Jul 23, 2022 at 13:54
• Thank you. It was specified in my own link. I stand corrected :).
– Bree
Commented Jul 23, 2022 at 23:18