# Is it possible to use HiGHS multi-objective optimization from JuMP?

**URL:** https://discourse.julialang.org/t/is-it-possible-to-use-highs-multi-objective-optimization-from-jump/126913
**Category:** Optimization (Mathematical)
**Created:** [March 13, 2025, 12:03pm UTC](https://discourse.julialang.org/t/is-it-possible-to-use-highs-multi-objective-optimization-from-jump/126913 "2025-03-13T12:03:15Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![qwedsad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/qwedsad/32/215770_2.png) [@qwedsad](https://discourse.julialang.org/u/qwedsad)
#### Post date: [March 13, 2025, 12:03pm UTC](https://discourse.julialang.org/t/is-it-possible-to-use-highs-multi-objective-optimization-from-jump/126913/1 "2025-03-13T12:03:15Z")

</div>

HiGHS v1.9. supports multiple objectives by either blending using weights, or performing lexicographic optimization. I couldn’t find how to implement it using JuMP. Is it yet possible or not?

---

<div class="post-metadata">

### Author: ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)
#### Post date: [March 13, 2025, 6:39pm UTC](https://discourse.julialang.org/t/is-it-possible-to-use-highs-multi-objective-optimization-from-jump/126913/2 "2025-03-13T18:39:01Z")

</div>

Hi @qwedsad welcome to the forum 😄

I would recommend that you use MultiObjectiveAlgorithms.jl instead. It is more flexible than the algorithm built into HiGHS and it supports more ways of solving the problem.

See the JuMP documentation  
[Simple multi-objective examples · JuMP](https://jump.dev/JuMP.jl/stable/tutorials/linear/multi_objective_examples/)

---

<div class="post-metadata">

### Author: ![qwedsad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/qwedsad/32/215770_2.png) [@qwedsad](https://discourse.julialang.org/u/qwedsad)
#### Post date: [March 17, 2025, 11:28am UTC](https://discourse.julialang.org/t/is-it-possible-to-use-highs-multi-objective-optimization-from-jump/126913/3 "2025-03-17T11:28:52Z")

</div>

Hi,

Thank you a lot from the insightful answer!

I implemented my problem with MOA now. I simply need lexicographical optimization for two objectives. However, if I understood correctly, MOA seems to first run the program w.r.t. both objectives separately to get the ideal bounds for the objectives, and only then run the lexicographic optimization. I think this behaviour practically doubles the running time in my case. Is there a way to skip the “ideal bound search” completely?

Another question: Is it possible to give the solution obtained by solving the problem w.r.t. first objective as an initial solution when solving the probelm w.r.t. to second objective? I believe this would reduce some needless search in the second phase. Should I just code the whole procedure myself if I want this functionality?

---

<div class="post-metadata">

### Author: ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)
#### Post date: [March 17, 2025, 7:44pm UTC](https://discourse.julialang.org/t/is-it-possible-to-use-highs-multi-objective-optimization-from-jump/126913/4 "2025-03-17T19:44:16Z")

</div>

> Is there a way to skip the “ideal bound search” completely?

No, but this is a good feature request. I’ll open an issue: [Add option to skip ideal point calculation · Issue #95 · jump-dev/MultiObjectiveAlgorithms.jl · GitHub](https://github.com/jump-dev/MultiObjectiveAlgorithms.jl/issues/95)

> I simply need lexicographical optimization for two objectives

If you care only about the lexicographic solution of the objectives in the order they are given, then do:

```julia
set_attribute(model, MOA.LexicographicAllPermutations(), false)

```

> Is it possible to give the solution obtained by solving the problem w.r.t. first objective as an initial solution when solving the problem

We already do this. It’s up to HiGHS to determine if it can efficiently restart with the provided solution.

---

<div class="post-metadata">

### Author: ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)
#### Post date: [March 17, 2025, 11:35pm UTC](https://discourse.julialang.org/t/is-it-possible-to-use-highs-multi-objective-optimization-from-jump/126913/5 "2025-03-17T23:35:04Z")

</div>

Just to follow up: the upcoming release of MOA v1.4.0 ([New version: MultiObjectiveAlgorithms v1.4.0 by JuliaRegistrator · Pull Request #127085 · JuliaRegistries/General · GitHub](https://github.com/JuliaRegistries/General/pull/127085)) adds support for `set_attribute(model, MOA.ComputeIdealPoint(), false)`.

```julia
julia> using JuMP, HiGHS

julia> import MultiObjectiveAlgorithms as MOA

julia> model = Model(() -> MOA.Optimizer(HiGHS.Optimizer))
A JuMP Model
├ solver: MOA[algorithm=MultiObjectiveAlgorithms.Lexicographic, optimizer=HiGHS]
├ objective_sense: FEASIBILITY_SENSE
├ num_variables: 0
├ num_constraints: 0
└ Names registered in the model: none

julia> set_attribute(model, MOA.Algorithm(), MOA.Lexicographic())

julia> set_attribute(model, MOA.LexicographicAllPermutations(), false)

julia> set_attribute(model, MOA.ComputeIdealPoint(), false)

julia> @variable(model, x1 >= 0)
x1

julia> @variable(model, 0 <= x2 <= 3)
x2

julia> @objective(model, Min, [3x1 + x2, -x1 - 2x2])
2-element Vector{AffExpr}:
 3 x1 + x2
 -x1 - 2 x2

julia> @constraint(model, 3x1 - x2 <= 6)
3 x1 - x2 ≤ 6

julia> optimize!(model)
Running HiGHS 1.9.0 (git hash: 66f735e60): Copyright (c) 2024 HiGHS under MIT licence terms
Coefficient ranges:
  Matrix [1e+00, 3e+00]
  Cost [1e+00, 3e+00]
  Bound [3e+00, 3e+00]
  RHS [6e+00, 6e+00]
Presolving model
0 rows, 0 cols, 0 nonzeros 0s
0 rows, 0 cols, 0 nonzeros 0s
Presolve : Reductions: rows 0(-1); columns 0(-2); elements 0(-2) - Reduced to empty
Solving the original LP from the solution after postsolve
Model status : Optimal
Objective value : 0.0000000000e+00
Relative P-D gap : 0.0000000000e+00
HiGHS run time : 0.00
Coefficient ranges:
  Matrix [1e+00, 3e+00]
  Cost [1e+00, 2e+00]
  Bound [3e+00, 3e+00]
  RHS [6e+00, 6e+00]
Solving LP without presolve, or with basis, or unconstrained
Using EKK dual simplex solver - serial
  Iteration Objective Infeasibilities num(sum)
          0 -9.9999663031e-01 Ph1: 2(6); Du: 1(0.999997) 0s
          2 0.0000000000e+00 Pr: 0(0) 0s
Model status : Optimal
Simplex iterations: 2
Objective value : 0.0000000000e+00
Relative P-D gap : 0.0000000000e+00
HiGHS run time : 0.00

```

---

<div class="post-metadata">

### Author: ![qwedsad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/qwedsad/32/215770_2.png) [@qwedsad](https://discourse.julialang.org/u/qwedsad)
#### Post date: [March 21, 2025, 11:10am UTC](https://discourse.julialang.org/t/is-it-possible-to-use-highs-multi-objective-optimization-from-jump/126913/6 "2025-03-21T11:10:46Z")

</div>

Thank you for the answers and the update!
