# Absolute value, abs(), on Gurobi solver

**URL:** <https://discourse.julialang.org/t/absolute-value-abs-on-gurobi-solver/68493>\
**Category:** Optimization (Mathematical)\
**Created:** [September 20, 2021, 8:27pm UTC](https://discourse.julialang.org/t/absolute-value-abs-on-gurobi-solver/68493 "2021-09-20T20:27:40Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![SingingKim](https://avatars.discourse-cdn.com/v4/letter/s/5fc32e/32.png) [@SingingKim](https://discourse.julialang.org/u/SingingKim)\
**Post date:** [September 20, 2021, 8:27pm UTC](https://discourse.julialang.org/t/absolute-value-abs-on-gurobi-solver/68493/1 "2021-09-20T20:27:40Z")

</div>

Hi all, is there a way to use absolute value e.g. `abs(x)` with JuMP/Gurobi?  
It seems like Gurobi supports it (see: [https://www.gurobi.com/documentation/9.1/refman/py\_abs\_.html](https://www.gurobi.com/documentation/9.1/refman/py_abs_.html)), but `abs(x)` is linked with a `NLconstraint` which is not compatible with Gurobi Solver.  
Is there a way to bypass it? Any comments would be appreciated. Thanks!

```julia
using JuMP, Gurobi, Ipopt
m = Model(Ipopt.Optimizer)
@variable(m, x)
@NLconstraint(m, abs(x) <= 5)
@objective(m, Min, x)
JuMP.optimize!(m)
@show JuMP.termination_status(m)
@show value.(x)

```

---

<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:** [September 20, 2021, 9:36pm UTC](https://discourse.julialang.org/t/absolute-value-abs-on-gurobi-solver/68493/2 "2021-09-20T21:36:11Z")

</div>

> Hi all, is there a way to use absolute value e.g. `abs(x)` with JuMP/Gurobi?

No. You will need to use a reformulation as a linear program.

---

<div class="post-metadata">

**Author:** ![jd-foster](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jd-foster/32/35824_2.png) [@jd-foster](https://discourse.julialang.org/u/jd-foster)\
**Post date:** [September 21, 2021, 5:12am UTC](https://discourse.julialang.org/t/absolute-value-abs-on-gurobi-solver/68493/3 "2021-09-21T05:12:29Z")

</div>

Try this:

```julia
using JuMP, Gurobi
m = Model(Gurobi.Optimizer)
@variable(m, x)
@constraint(m, x <= 5)
@constraint(m, - x <= 5)
@objective(m, Min, x)
JuMP.optimize!(m)
@show JuMP.termination_status(m)
@show value.(x)

```

or use a function

```julia
function add_abs_constraint(model::JuMP.Model, expr::GenericAffExpr, rhs)
    @constraint(model, expr <= rhs)
    @constraint(model, - expr <= rhs)

   return nothing
end

```

e.g.

```julia
expr = JuMP.@expression(m, 2x - 4)
add_abs_constraint(m, expr, 2)
JuMP.optimize!(m)

```

should return something from Gurobi like

```julia
Solved in 1 iterations and 0.00 seconds
Optimal objective 1.000000000e+00

```

---

<div class="post-metadata">

**Author:** ![SingingKim](https://avatars.discourse-cdn.com/v4/letter/s/5fc32e/32.png) [@SingingKim](https://discourse.julialang.org/u/SingingKim)\
**Post date:** [September 21, 2021, 12:49pm UTC](https://discourse.julialang.org/t/absolute-value-abs-on-gurobi-solver/68493/4 "2021-09-21T12:49:48Z")

</div>

Thank you for providing this! This helps a lot.
