Hierarchical (or lexicographic) multi-objective linear programming is when you have more than one linear objective, and you optimize them in order.
Gurobi’s documentation states that it supports this.
How can I do this in Julia, using any of the packages for linear programming (Gurobi.jl, MathProgBase, JuMP, etc.)? Do any of them offer a way to do this?
From the documentation I think that JuMP does not support hierarchical multi-objective linear programming… Will it be supported in the near future?
JuMP itself doesn’t support multiple objectives, and I don’t know of any extensions that add support either. I don’t think any of the core developers are likely to add this feature in the foreseeable future. However, it should be relatively straightforward to 1) build a JuMP extension for modeling multiple objectives, and 2) wrapping the necessary methods in the Gurobi C interface.
@joehuchette I guess one has to start by adding this feature in Gurobi.jl. I’ll have to inspect the code and figure out where it should be done.
Right now I’m trying to do this “by hand” with JuMP. Basically, I am solving the first LP with the primary objective. Then I add a constrain to fix this to the optimal value, and optimize the secondary objective.
This approach seems to have numerical issues, since I am getting that the second optimization is infeasible (I know it isn’t). Any ideas of what I could do as a workaround?
Indeed, with vOptGeneric, the user describes the MOIP model with JuMP, and solves it with a MILP embedded into an exact and classic MOP algorithm among:
epsilon-constraint (=> Y_N : all non-dominated points)
Chalmet algorithm (=> Y_N : all non-dominated points)
dichotomic (Aneja-Nair algorithm) (=> Y_{SN} : all supported points)
lexicographic method (=> Y_{Lex} : lex points)
These algorithms make calls to the MILP.
We have modified JuMP; now multiple objectives may be defined and handled by the mentioned algorithms. See here for examples: