Multi-Objective Optimization Support



I’m working on my master thesis on Multi-Objective Optimization (MOO) and I found JuMP to be a clean and elegant framework. However, JuMP does not currently support Multi-Objective optimization. Are you planning to support it in the future?

Of course, I do know I could instead establish a preference articulation on my objectives and formulate my problem as a Single-Objective Optimization problem. However, I am more interested in providing the users a clear picture of the trade-offs involved in the optimization problem itself, rather than on providing a single solution. I’m aware of MultiJuMP but it does not satisfy my needs as I have not been able to solve the DLTZ1 problem.

Additionally, the lack of documentation on MultiJuMP also makes it a bit difficult to perceive if I am doing something wrong or not.

using JuMP, MultiJuMP
using NLopt

m = MultiModel(solver = NLoptSolver(algorithm=:GN_CRS2_LM, maxeval=100))
f(z...) = 2 + sum([(z[i]-0.5)^2 - cos(20 * 3.14 *(z[i]-0.5)) for i in 1:length(z)])
JuMP.register(m, :f, 2, f; autodiff=true)

@variable(m, 0 <= x <= 1)
@variable(m, 0 <= y <= 1)
@NLexpression(m, f2, 0.5*(1-x)*(1+f(x, y)))
@NLexpression(m, f1, 0.5*x*(1+f(x, y)))

obj1 = SingleObjective(f1, sense = :Min)
obj2 = SingleObjective(f2, sense = :Min)

md = getMultiData(m)
md.objectives = [obj1,obj2]
md.pointsperdim = 10
solve(m, method = :NBI) 

Also, are you planning on supporting derivative-free optimization? NLopt supports derivative-free optimization, however, JuMP currently claims that such optimization is not supported. And although I’m aware of BlackBoxOptim, they only provide a unique multi-objective optimization algorithm…


This is the right place to post, but please cross-link when asking the same question in multiple places. I’ve already answered at


A while ago I successfully used MultiJuMP. I don’t exactly remember if I tweaked the code or not. Also you are mixing too many things are not giving information on what’s not working. Any error messages?. So start simple.

  1. Solve an LP using JuMP with CBC as solver (If you have CPLEX or Gurobi, use that)
  2. Solve a multiobjective LP using MultiJuMP with epsilon constraint method
  3. Solve a single objective of your problem with whatever solver you want to use.
  4. Solve the multiobjective you want

My model was a MILP, and these are last lines of the code I used to solve it.

obj1 = SingleObjective(fixedCost, sense = :Min)
obj2 = SingleObjective(transportationCost + inventoryCost, sense = :Min)

md = getMultiData(m)
md.objectives = [obj1, obj2]
md.pointsperdim = 20

solve(m, method = :EPS)