# Can I use generalized constraints in JuMP?

**URL:** <https://discourse.julialang.org/t/can-i-use-generalized-constraints-in-jump/62392>\
**Category:** Optimization (Mathematical)\
**Created:** [June 4, 2021, 2:22pm UTC](https://discourse.julialang.org/t/can-i-use-generalized-constraints-in-jump/62392 "2021-06-04T14:22:13Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![iiitr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iiitr/32/24586_2.png) [@iiitr](https://discourse.julialang.org/u/iiitr)\
**Post date:** [June 4, 2021, 2:22pm UTC](https://discourse.julialang.org/t/can-i-use-generalized-constraints-in-jump/62392/1 "2021-06-04T14:22:13Z")

</div>

Hi, all,

There is a simple programming with generalized constraints (min(…)), but the julia tells me errors as follows:

ERROR: LoadError: MethodError: no method matching isless(::AffExpr, ::AffExpr)  
Closest candidates are:  
isless(::Any, ::Missing) at missing.jl:88  
isless(::Missing, ::Any) at missing.jl:87

The problem is can I use generalized constraints in JuMP naturally, and the codes are:

```julia
model = Model(Gurobi.Optimizer)
@variables(model, begin
    s[1:8], Bin
    z[1:8], Bin
    d[1:8], Bin
    o[1:8], Bin
end)

for t in 1:8
    @constraint(model, o[t] == min((1 - s[t]) + z[t], 1 - d[t]))
end

@constraints(model, begin
    s[1:3] .== 0
    s[4:end] .== 1
    z[1:5] .== 0
    z[6:end] .== 1
    d[1:2] .== 1
end)

optimize!(model)

value.(o)

```

And the expected output may be:  
[0, 0, 1, 0, 0, 1, 1, 1]

I already know if I use the Gurobi solver, the codes above can use the following form (may with nonconvex optimizer in gurobi?)

```julia
model = Model(Gurobi.Optimizer)
@variables(model, begin
    s[1:8], Bin
    z[1:8], Bin
    d[1:8], Bin
    o[1:8], Bin
end)

for t in rg(8)
    @constraint(model, o[t] == ((1 - s[t]) + z[t]) * (1 - d[t]))
end

@constraints(model, begin
    s[1:3] .== 0
    s[4:end] .== 1
    z[1:5] .== 0
    z[6:end] .== 1
    d[1:2] .== 1
end)
optimize!(model)

value.(o)

```

---

<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 6, 2021, 9:39pm UTC](https://discourse.julialang.org/t/can-i-use-generalized-constraints-in-jump/62392/2 "2021-06-06T21:39:00Z")

</div>

> can I use generalized constraints in JuMP naturally

No. You need to formulate this as a MIP.

---

<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:** [June 7, 2021, 12:15am UTC](https://discourse.julialang.org/t/can-i-use-generalized-constraints-in-jump/62392/3 "2021-06-07T00:15:09Z")

</div>

Check out [9 Mixed integer optimization — MOSEK Modeling Cookbook 3.3.0](https://docs.mosek.com/modeling-cookbook/mio.html#maximum)  
You can adapt the “Maximum” formulation to a “Minimum” formulation, using min (x,y) = -max(-x,-y).
