# Gurobi AddGenConstrPoly() in JuMP

**URL:** <https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123>\
**Category:** Optimization (Mathematical)\
**Tags:** question, jump, gurobi\
**Created:** [December 4, 2023, 5:02pm UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123 "2023-12-04T17:02:50Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![manoj.centura](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/manoj.centura/32/216443_2.png) [@manoj.centura](https://discourse.julialang.org/u/manoj.centura)\
**Post date:** [December 4, 2023, 5:02pm UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123/1 "2023-12-04T17:02:50Z")

</div>

Hi All,  
Can we code GRBModel.AddGenConstrPoly()  
constraint available in gurobi directly in JuMP.

> **[GRBModel.AddGenConstrPoly() - Gurobi Optimization](https://www.gurobi.com/documentation/9.5/refman/cs_model_agc_poly.html#dotnetmethod:GRBModel.AddGenConstrPoly)**
>
> Est. reading time: 1 minute

The MINLP is solved using Juniper. we want to try Gurobi for this.

---

<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:** [December 4, 2023, 6:07pm UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123/2 "2023-12-04T18:07:11Z")

</div>

You’ll need to use the C API [https://www.gurobi.com/documentation/11.0/refman/c\_agc\_poly.html](https://www.gurobi.com/documentation/11.0/refman/c_agc_poly.html)

Something like:

```julia
using JuMP, Gurobi
column(x::VariableRef) = Gurobi.c_column(backend(owner_model(x)), index(x))
model = direct_model(Gurobi.Optimizer())
@variable(model, x)
@variable(model, y)
p = [3.0, 0.0, 0.0, 7.0, 3.0]
GRBaddgenconstrPoly(backend(model), C_NULL, column(x), column(y), 5, p, "")
optimize!(model)

```

See also: [Can't solve a problem with nonlinear terms like x^0.7 or x^3 using JuMP with Gurobi 11 - #8 by odow](https://discourse.julialang.org/t/cant-solve-a-problem-with-nonlinear-terms-like-x-0-7-or-x-3-using-jump-with-gurobi-11/106896/8)

---

<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:** [December 5, 2023, 12:16am UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123/3 "2023-12-05T00:16:38Z")

</div>

See also [GitHub - jump-dev/Gurobi.jl: Julia interface for Gurobi Optimizer](https://github.com/jump-dev/Gurobi.jl#the-c-api-from-jump)

---

<div class="post-metadata">

**Author:** ![manoj.centura](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/manoj.centura/32/216443_2.png) [@manoj.centura](https://discourse.julialang.org/u/manoj.centura)\
**Post date:** [December 5, 2023, 5:52am UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123/4 "2023-12-05T05:52:36Z")

</div>

Dear Odow  
with [2e9cd046] Gurobi v1.2.0 on julia 1.6

```julia
julia> column(x::VariableRef) = Gurobi.c_column(backend(owner_model(x)), index(x))
column (generic function with 1 method)
julia> model = direct_model(Gurobi.Optimizer())
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: DIRECT
Solver name: Gurobi

julia> @variable(model, x[i in 1:2])
2-element Vector{VariableRef}:
 x[1]
 x[2]

julia> @variable(model, y[1:2])
2-element Vector{VariableRef}:
 y[1]
 y[2]

julia> GRBaddgenconstrPow(backend(model), "x1^0.7", column(x[1]), column(y[1]), 0.7, "")
ERROR: UndefVarError: c_column not defined
Stacktrace:
 [1] column(x::VariableRef)
   @ Main .\REPL[32]:1
 [2] top-level scope
   @ REPL[36]:1

julia> GRBaddgenconstrPow(backend(model), "x2^3", column(x[2]), column(y[2]), 3.0, "")
ERROR: UndefVarError: c_column not defined
Stacktrace:
 [1] column(x::VariableRef)
   @ Main .\REPL[32]:1
 [2] top-level scope
   @ REPL[37]:1

julia> @objective(model, Min, y[1] + y[2])
y[1] + y[2]

julia> optimize!(model)
```

---

<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:** [December 5, 2023, 5:58am UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123/5 "2023-12-05T05:58:33Z")

</div>

Are you sure you typed exactly:

```julia
using JuMP, Gurobi
column(x::VariableRef) = Gurobi.c_column(backend(owner_model(x)), index(x))

```

What did you type before the code you posted?

Note that you need `Gurobi.c_column` not just `c_column`.

---

<div class="post-metadata">

**Author:** ![manoj.centura](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/manoj.centura/32/216443_2.png) [@manoj.centura](https://discourse.julialang.org/u/manoj.centura)\
**Post date:** [December 5, 2023, 6:36am UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123/6 "2023-12-05T06:36:50Z")

</div>

yes it was typo. Thanks for the reply.

---

<div class="post-metadata">

**Author:** ![manoj.centura](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/manoj.centura/32/216443_2.png) [@manoj.centura](https://discourse.julialang.org/u/manoj.centura)\
**Post date:** [December 11, 2023, 4:49am UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123/7 "2023-12-11T04:49:04Z")

</div>

Hi  
can do the same for JUMP expressions?

---

<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:** [December 11, 2023, 5:17am UTC](https://discourse.julialang.org/t/gurobi-addgenconstrpoly-in-jump/107123/8 "2023-12-11T05:17:23Z")

</div>

You cannot.

Define an additional variable and use an equality constraint to make the additional variable equal to the expression.
