# Setting WorkLimit for Gurobi.jl and JuMP

**URL:** <https://discourse.julialang.org/t/setting-worklimit-for-gurobi-jl-and-jump/111370>\
**Category:** Optimization (Mathematical)\
**Tags:** question, jump, gurobi\
**Created:** [March 8, 2024, 6:11pm UTC](https://discourse.julialang.org/t/setting-worklimit-for-gurobi-jl-and-jump/111370 "2024-03-08T18:11:32Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![YuriS](https://avatars.discourse-cdn.com/v4/letter/y/ccd318/32.png) [@YuriS](https://discourse.julialang.org/u/YuriS)\
**Post date:** [March 8, 2024, 6:11pm UTC](https://discourse.julialang.org/t/setting-worklimit-for-gurobi-jl-and-jump/111370/1 "2024-03-08T18:11:32Z")

</div>

Hi!  
I am solving a large instance MILP using Gurobi, and I am trying to set the `WorkLimit` parameter (see: [https://www.gurobi.com/documentation/current/refman/worklimit.html](https://www.gurobi.com/documentation/current/refman/worklimit.html)) instead of setting a `TimeLimit`, but I am struggling to do so…

For setting a `TimeLimit`, things like

```julia
model = Model(Gurobi.Optimizer)
set_attribute(model, "TimeLimit", 100)

```

or

```julia
model = Model(optimizer_with_attributes(Gurobi.Optimizer, "TimeLimit" => 100))

```

works fine, but for `WorkLimit`, I get an error saying

```julia
ERROR: LoadError: MathOptInterface.UnsupportedAttribute{MathOptInterface.RawOptimizerAttribute}: Attribute MathOptInterface.RawOptimizerAttribute("WorkLimit") is not supported by the model.

```

I figured that `WorkLimit` is Gurobi specific, so I tried things like

```julia
MOI.set(backend(model), Gurobi.ModelAttribute("WorkLimit"), 100)

```

which does not complain immediately, but when I then call `optimize!(model)`, I get the error

```julia
ERROR: LoadError: Gurobi Error 10004: Unknown attribute 'WorkLimit'

```

I would appreciate any help or suggestions, thank you!

Minimum (not) working example:

```julia
using JuMP, Gurobi

# test data for sample problem
m = 30
n = 30
x_c, y_c = rand(m), rand(m)
x_f, y_f = rand(n), rand(n)
f = ones(n);
c = rand(m, n)

# create model and set TimeLimit --- works
#model = Model(Gurobi.Optimizer)
#set_attribute(model, "WorkLimit", 100)
# ... or 
#model = Model(optimizer_with_attributes(Gurobi.Optimizer, "TimeLimit" => 100))

# create model and set WorkLimit --- does NOT work
model = Model(Gurobi.Optimizer)
#set_attribute(model, "WorkLimit", 100) # does NOT work
#set_optimizer_attribute(model, "WorkLimit", 100) # does NOT work
MOI.set(backend(model), Gurobi.ModelAttribute("WorkLimit"), 100) # does NOT work

@variable(model, y[1:n], Bin);
@variable(model, x[1:m, 1:n], Bin);
# Each client is served exactly once
@constraint(model, client_service[i in 1:m], sum(x[i, j] for j in 1:n) == 1);
# A facility must be open to serve a client
@constraint(model, open_facility[i in 1:m, j in 1:n], x[i, j] <= y[j]);
@objective(model, Min, f' * y + sum(c .* x));

optimize!(model)
println("Optimal value: ", objective_value(model))

```

---

<div class="post-metadata">

**Author:** ![torressa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/torressa/32/202204_2.png) [@torressa](https://discourse.julialang.org/u/torressa)\
**Post date:** [March 8, 2024, 6:35pm UTC](https://discourse.julialang.org/t/setting-worklimit-for-gurobi-jl-and-jump/111370/2 "2024-03-08T18:35:37Z")

</div>

Both

```julia
set_attribute(model, "WorkLimit", 100) 
set_optimizer_attribute(model, "WorkLimit", 100)

```

work for me. Can you share more details of your setup: what version of Gurobi.jl, Julia, and Gurobi?

---

<div class="post-metadata">

**Author:** ![YuriS](https://avatars.discourse-cdn.com/v4/letter/y/ccd318/32.png) [@YuriS](https://discourse.julialang.org/u/YuriS)\
**Post date:** [March 8, 2024, 9:32pm UTC](https://discourse.julialang.org/t/setting-worklimit-for-gurobi-jl-and-jump/111370/3 "2024-03-08T21:32:37Z")

</div>

Interesting…  
I’m on Julia `v"1.8.5"`, with JuMP at `v1.14.1`, Gurobi.jl at `v1.0.3`, and Gurobi is `9.1.1`.  
Out of curiosity, could you please let me know the versions that worked for you?

---

<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 8, 2024, 10:14pm UTC](https://discourse.julialang.org/t/setting-worklimit-for-gurobi-jl-and-jump/111370/4 "2024-03-08T22:14:36Z")

</div>

I think WorkLimit was added to Gurobi 9.5.

You can see the parameters available for Gurobi 9.1 here: [Parameters - Gurobi Optimization](https://www.gurobi.com/documentation/9.1/refman/parameters.html#sec:Parameters)

---

<div class="post-metadata">

**Author:** ![YuriS](https://avatars.discourse-cdn.com/v4/letter/y/ccd318/32.png) [@YuriS](https://discourse.julialang.org/u/YuriS)\
**Post date:** [March 8, 2024, 11:45pm UTC](https://discourse.julialang.org/t/setting-worklimit-for-gurobi-jl-and-jump/111370/5 "2024-03-08T23:45:55Z")

</div>

I see - I will update Gurobi and see if it works, thank you!

---

<div class="post-metadata">

**Author:** ![YuriS](https://avatars.discourse-cdn.com/v4/letter/y/ccd318/32.png) [@YuriS](https://discourse.julialang.org/u/YuriS)\
**Post date:** [March 13, 2024, 6:07pm UTC](https://discourse.julialang.org/t/setting-worklimit-for-gurobi-jl-and-jump/111370/6 "2024-03-13T18:07:26Z")

</div>

I’ve now upgraded to Gurobi 9.5 and it works!  
For future reference - I had to `pkg> remove Gurobi` then `pkg> add Gurobi` to reflect the Gurobi version update.
