# How to do division in a linear model with JuMP

**URL:** https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077
**Category:** Optimization (Mathematical)
**Tags:** question, jump
**Created:** [May 30, 2021, 8:18am UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077 "2021-05-30T08:18:47Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![zlq178](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/zlq178/32/17952_2.png) [@zlq178](https://discourse.julialang.org/u/zlq178)
#### Post date: [May 30, 2021, 8:18am UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/1 "2021-05-30T08:18:47Z")

</div>

There is a constraint “P=Q./R”, where P and Q are vector{variableRef}, Q is array{Float64,2}  
JuMP model is as follow:

```julia
using JuMP,Gurobi,LinearAlgebra
model=Model(Gurobi.Optimizer)
Q=[1,2,3]                                                      
@variable(model, P[1:3])
@variable(model, R[1:3])
@expression(model, expr1[i=1:n],Q[i]/R[i])
@constraint(model, con1[i=1:3], P[i]== expr1[i])

```

Error: / is not defined?!

 ![image](https://global.discourse-cdn.com/julialang/original/3X/1/3/13de0355681645a47f74b70e05842f1182f792ca.png)

How could I solve it using @expression not @NLexpression and with Gurobi solver?

---

<div class="post-metadata">

### Author: ![leethargo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leethargo/32/6004_2.png) [@leethargo](https://discourse.julialang.org/u/leethargo)
#### Post date: [May 30, 2021, 1:15pm UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/2 "2021-05-30T13:15:59Z")

</div>

Your constraint is in fact nonlinear, so you should use `@NLconstraint` as suggested by the error message.

---

<div class="post-metadata">

### Author: ![zlq178](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/zlq178/32/17952_2.png) [@zlq178](https://discourse.julialang.org/u/zlq178)
#### Post date: [May 31, 2021, 1:27pm UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/3 "2021-05-31T13:27:54Z")

</div>

If the constraint`@constraint(model, con1[i=1:3], P[i]== expr1[i])` is written as:

```julia
@constraint(model, con1[i=1:3], R[i]*P[i]== Q[i])
@constraint(model, con2[i=1:3],R[i]>0)
@constraint(model, con3[i=1:3],R[i]<0)

```

May equivalent to the original constraint?

---

<div class="post-metadata">

### Author: ![leethargo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leethargo/32/6004_2.png) [@leethargo](https://discourse.julialang.org/u/leethargo)
#### Post date: [May 31, 2021, 1:56pm UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/4 "2021-05-31T13:56:52Z")

</div>

You can use `R[i] * P[i]`. This is still nonlinear, but the special case of quadratic expressions is supported by `@constraint`.

The other two constraints using `<` and `>` contradict each other and can not be satisfied simultaneously. Further, strict inequalities are not supported by solvers such as Gurobi.

---

<div class="post-metadata">

### Author: ![zlq178](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/zlq178/32/17952_2.png) [@zlq178](https://discourse.julialang.org/u/zlq178)
#### Post date: [May 31, 2021, 2:38pm UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/5 "2021-05-31T14:38:52Z")

</div>

Ok. Thank you for you answer!

---

<div class="post-metadata">

### Author: ![zlq178](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/zlq178/32/17952_2.png) [@zlq178](https://discourse.julialang.org/u/zlq178)
#### Post date: [June 2, 2021, 3:44am UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/6 "2021-06-02T03:44:02Z")

</div>

I still have some question. For example

```julia
using JuMP, Gurobi
m=Model(Gurobi.Optimizer)

@variables m begin
    fp
    fq
    a
    v
end
@NLconstraint(m, exp(fp) <= 40)

@NLconstraint(m, exp(1/v) <= 40)

@constraint(m,fq+a <= 40)
optimize!(m)

```

Can’t set `optimizer_attribute` or other setting to solve the problem? I saw Gurobi’s official website that it can solve NLP.  
Thank you for your help.

---

<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: [June 2, 2021, 7:35am UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/7 "2021-06-02T07:35:40Z")

</div>

Gurobi doesn’t support arbitrary nonlinear. It is restricted to quadratic programs.

---

<div class="post-metadata">

### Author: ![zlq178](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/zlq178/32/17952_2.png) [@zlq178](https://discourse.julialang.org/u/zlq178)
#### Post date: [June 2, 2021, 7:53am UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/8 "2021-06-02T07:53:29Z")

</div>

OK, I see. I need to change the nonlinear model to a linear one.  
Thank you for your answer again.

---

<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: [June 2, 2021, 8:51pm UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/9 "2021-06-02T20:51:01Z")

</div>

You can also use a nonlinear optimizer like Ipopt ([https://github.com/jump-dev/Ipopt.jl](https://github.com/jump-dev/Ipopt.jl)).

---

<div class="post-metadata">

### Author: ![zlq178](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/zlq178/32/17952_2.png) [@zlq178](https://discourse.julialang.org/u/zlq178)
#### Post date: [June 3, 2021, 12:45am UTC](https://discourse.julialang.org/t/how-to-do-division-in-a-linear-model-with-jump/62077/10 "2021-06-03T00:45:30Z")

</div>

Nice! It is also a good method.
