Using xor with JuMP and MiniZinc

This is undocumented, but MiniZinc has support for : MiniZinc.jl/src/MiniZinc.jl at 3bc82dc24feb869a1aa0784cb8dcc0d5b82fa104 · jump-dev/MiniZinc.jl · GitHub
and ! MiniZinc.jl/src/MiniZinc.jl at 3bc82dc24feb869a1aa0784cb8dcc0d5b82fa104 · jump-dev/MiniZinc.jl · GitHub

So you can do something like:

using JuMP
using MiniZinc
model = Model(() -> MiniZinc.Optimizer{Float64}("chuffed"))
@variable(model, x, Bin)
@variable(model, y, Bin)
Base.:⊻(x::VariableRef, y::VariableRef) = NonlinearExpr(:⊻, Any[x, y])
Base.:!(x::AbstractJuMPScalar) = NonlinearExpr(:!, Any[x])
@constraint(model, !(x ⊻ y) := true)
optimize!(model)
value(x), value(y)
1 Like