# Jump, MultiObjectiveAlgorithms - How do manuelly set priorities of objectives

**URL:** <https://discourse.julialang.org/t/jump-multiobjectivealgorithms-how-do-manuelly-set-priorities-of-objectives/136823>\
**Category:** Optimization (Mathematical)\
**Tags:** question, package, jump, moa\
**Created:** [April 22, 2026, 8:02am UTC](https://discourse.julialang.org/t/jump-multiobjectivealgorithms-how-do-manuelly-set-priorities-of-objectives/136823 "2026-04-22T08:02:53Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Caroline](https://avatars.discourse-cdn.com/v4/letter/c/ba8739/32.png) [@Caroline](https://discourse.julialang.org/u/Caroline)\
**Post date:** [April 22, 2026, 8:02am UTC](https://discourse.julialang.org/t/jump-multiobjectivealgorithms-how-do-manuelly-set-priorities-of-objectives/136823/1 "2026-04-22T08:02:53Z")

</div>

Hi everyone! I’m new to Julia and trying to use it to implement a MILP with multiple objectives. I haven’t been able to find how to set the priorities for the different objectives. Here objective 1 is x+5 and objective 2 is y

```julia-auto
using JuMP
using Gurobi

model = Model(() -> MOA.Optimizer(Gurobi.Optimizer))
@objective(model, Max, [x+5, y])
set_attribute(model, MOA.Algorithm(), MOA.Hierarchical())

```

---

<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:** [April 22, 2026, 8:25am UTC](https://discourse.julialang.org/t/jump-multiobjectivealgorithms-how-do-manuelly-set-priorities-of-objectives/136823/2 "2026-04-22T08:25:33Z")

</div>

Hi @Caroline, welcome to the forum 😄

The first answer is that you can set the `MOA.ObjectivePriority` attribute for each objective index.

```Julia
julia> using JuMP

julia> using Gurobi

julia> import MultiObjectiveAlgorithms as MOA

julia> begin
           model = Model(() -> MOA.Optimizer(Gurobi.Optimizer))
           @variable(model, x >= 0)
           @variable(model, y >= 0)
           @constraint(model, x + y <= 10)
           @objective(model, Max, [x+5, y])
           set_attribute(model, MOA.Algorithm(), MOA.Hierarchical())
           set_attribute(model, MOA.ObjectivePriority(1), 1)
           set_attribute(model, MOA.ObjectivePriority(2), 2)
           optimize!(model)
       end
Set parameter WLSAccessID
Set parameter WLSSecret
Set parameter LicenseID to value 722777
WLS license 722777 - registered to JuMP Development
----------------------------------------------
        MultiObjectiveAlgorithms.jl
----------------------------------------------
Algorithm: Hierarchical
----------------------------------------------
solve # Obj. 1 Obj. 2 Time    
----------------------------------------------
    1 -5.00000e+00 -1.00000e+01 1.01781e-03
    2 -5.00000e+00 -1.00000e+01 1.44792e-03
----------------------------------------------
termination_status: OPTIMAL
result_count: 1

Total solve time: 1.79482e-03
Time spent in subproblems: 5.06878e-04 (28%)
Number of subproblems: 4
----------------------------------------------

julia> value(x)
0.0

julia> value(y)
10.0

julia> set_attribute(model, MOA.ObjectivePriority(1), 3)

julia> optimize!(model)
----------------------------------------------
        MultiObjectiveAlgorithms.jl
----------------------------------------------
Algorithm: Hierarchical
----------------------------------------------
solve # Obj. 1 Obj. 2 Time    
----------------------------------------------
    1 -1.50000e+01 -0.00000e+00 1.71185e-03
    2 -1.50000e+01 -0.00000e+00 2.51889e-03
----------------------------------------------
termination_status: OPTIMAL
result_count: 1

Total solve time: 3.50690e-03
Time spent in subproblems: 1.58787e-03 (45%)
Number of subproblems: 4
----------------------------------------------

julia> value(x)
10.0

julia> value(y)
0.0

```

Objectives are minimised in order of decreasing priority. Bigger is more important.

But the hierarchical algorithm is really useful only if you want to blend different objectives together. If you just want the lexicographic solution, then do:

```julia
julia> using JuMP

julia> using Gurobi

julia> import MultiObjectiveAlgorithms as MOA

julia> begin
           model = Model(() -> MOA.Optimizer(Gurobi.Optimizer))
           @variable(model, x >= 0)
           @variable(model, y >= 0)
           @constraint(model, x + y <= 10)
           @objective(model, Max, [x+5, y])
           set_attribute(model, MOA.Algorithm(), MOA.Lexicographic())
           set_attribute(model, MOA.LexicographicAllPermutations(), false)
           optimize!(model)
       end
Set parameter WLSAccessID
Set parameter WLSSecret
Set parameter LicenseID to value 722777
WLS license 722777 - registered to JuMP Development
----------------------------------------------
        MultiObjectiveAlgorithms.jl
----------------------------------------------
Algorithm: Lexicographic
----------------------------------------------
solve # Obj. 1 Obj. 2 Time    
----------------------------------------------
    1 1.50000e+01 0.00000e+00 1.93028e-02
    2 1.50000e+01 0.00000e+00 1.97539e-02
----------------------------------------------
termination_status: OPTIMAL
result_count: 1

Total solve time: 2.01530e-02
Time spent in subproblems: 6.46830e-04 (3%)
Number of subproblems: 4
----------------------------------------------

julia> value(x)
10.0

julia> value(y)
0.0

```

The objectives are prioritised given the order that they are defined. So `x+5` is more important than `y`.

---

<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:** [April 22, 2026, 8:40pm UTC](https://discourse.julialang.org/t/jump-multiobjectivealgorithms-how-do-manuelly-set-priorities-of-objectives/136823/3 "2026-04-22T20:40:49Z")

</div>

Just to follow up: if you’re using Gurobi and you want the hierarchical/lexicographic solution, you can use Gurobi directly:

```Julia
using JuMP
using Gurobi
begin
    model = Model(Gurobi.Optimizer)
    @variable(model, x >= 0)
    @variable(model, y >= 0)
    @constraint(model, x + y <= 10)
    @objective(model, Max, [x+5, y])
    set_attribute(model, Gurobi.MultiObjectiveAttribute(1, "ObjNPriority"), 1)
    set_attribute(model, Gurobi.MultiObjectiveAttribute(2, "ObjNPriority"), 2)
    optimize!(model)
end
value(x)
value(y)
set_attribute(model, Gurobi.MultiObjectiveAttribute(1, "ObjNPriority"), 3)
optimize!(model)
value(x)
value(y)

```
