Hierarchical optimization and RelTol
AnsweredHello,
I am trying to maximize the revenues from building various products while minimizing the number of machines used to make those products (i.e. increase the utilization of these machines).
The first objective function is the revenue maximization, while the second would be the minimization of the number of machine used.
Let's say, I get a gap of 7% from the first objective optimization (which does not guarantee that I got the best solution for this objective). Then, I set the RelTol parameter to 0 when optimizing for the second objective.
However, decreasing the number of machines used will change the revenues (since the costs part of the revenues depends on the number of machines used). This will therefore change the value of the first objective function.
Given that RelTol is set to 0, is this possible? In other words, can I get a lower/higher value for the first objective function when optimizing the second objective function when RelTol = 0?
Thank you for your help.
Regards
-
Official comment
This post is more than three years old. Some information may not be up to date. For current information, please check the Gurobi Documentation or Knowledge Base. If you need more help, please create a new post in the community forum. Or why not try our AI Gurobot?. -
Hi Alexia,
Such degradation may occur depending on your settings. Please refer to this part of our documentation about Multiobjective optimization, especially the section about "Allowing Multiple-Objective Degradation".
I hope that helps.
Cheers,
Matthias0 -
Hello Matthias,
Thank you for your help. I am aware of the RelTol parameter for a hierarchical optimization but my rationale is as follows:
When optimizing the first objective, I am adding a penalty on the cost of adding one machine to the optimization to calculate the total revenue. Depending on the gap I get at the end of the revenue maximization, it is not guaranteed that the minimum number of machines were used.
So, the purpose of the second objective function is to minimize the number of machines from the previously obtained solution, which is equivalent to using each machine more without degrading the revenue, hence the idea of RelTol = 0. My question is, if I choose to set RelTol to 0 to minimize the number of machines used, will Gurobi try to minimize the number of machines or will it think that since RelTol = 0, the revenue solution value needs to stay the same and hence no minimization can be made since reducing the number of machines would change the revenues?
Maybe, I am missing something...
Regards.
0 -
Hi Alexia,
When you set ObjNRelTol to 0 (which is the default value), Gurobi will not deteriorate the objective value from the previous optimization. But there may be other solutions with the same objective value that can be realized with a smaller number of machines. This is the main idea of multi-objective optimization and your approach sounds reasonable.
Although, you should be careful about the cost definition in the first objective: If this already penalizes the number of machines, there is probably not much to optimize for the second objective making the multi-objective approach somewhat redundant.
I hope this makes sense and I recommend formulating a smaller toy instance of your model to verify your implementation.
Cheers,
Matthias0
Post is closed for comments.
Comments
4 comments