jump-dev / MiniZinc.jl

A Julia interface to the MiniZinc constraint modeling language
https://www.minizinc.org/
MIT License
17 stars 4 forks source link

Try with generic JuMP #30

Closed odow closed 1 year ago

odow commented 1 year ago

Chuffed is a good candidate for the JuMP generic number type PR for GenericModel{Int}(() -> MiniZinc.Optimizer(MiniZinc.Chuffed()))

odow commented 1 year ago

Niiiiiice.

julia> using JuMP

julia> import MiniZinc

julia> model = GenericModel{Int}(() -> MiniZinc.Optimizer{Int}(MiniZinc.Chuffed()))
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: EMPTY_OPTIMIZER
Solver name: MiniZinc

julia> @variable(model, 1 <= x[1:3] <= 3, Int)
3-element Vector{GenericVariableRef{Int64}}:
 x[1]
 x[2]
 x[3]

julia> @variable(model, z[1:2], Bin)
2-element Vector{GenericVariableRef{Int64}}:
 z[1]
 z[2]

julia> @constraint(model, z[1] <--> {[x[1], x[2]] in MOI.AllDifferent(2)})
z[1] <--> {[x[1], x[2]] ∈ MathOptInterface.AllDifferent(2)}

julia> @constraint(model, z[2] <--> {[x[2], x[3]] in MOI.AllDifferent(2)})
z[2] <--> {[x[2], x[3]] ∈ MathOptInterface.AllDifferent(2)}

julia> @constraint(model, z[1] + z[2] == 1)
z[1] + z[2] = 1

julia> optimize!(model)
Warning: included file "count.mzn" overrides a global constraint file from the standard library. This is deprecated. For a solver-specific redefinition of a global constraint, override "fzn_<global>.mzn" instead.

Warning: included file "global_cardinality_low_up.mzn" overrides a global constraint file from the standard library. This is deprecated. For a solver-specific redefinition of a global constraint, override "fzn_<global>.mzn" instead.

julia> value.(x)
3-element Vector{Int64}:
 2
 3
 3

julia> value.(z)
2-element Vector{Int64}:
 1
 0
chriscoey commented 1 year ago

that's great!