The JuMP manual page on CP lists some supported constraints, but it seems they are always reformulated into an integer linear program if we use HiGHS as a solver.
Thus we should probably use MiniZinc.jl, which is the only CP solver supported by JuMP. Unfortunately its use is not demonstrated within the JuMP docs. Would a PR be welcome there?
As HiHGS doesn’t support any constraint programming, CP constraints must be reformulated to fit what HiGHS supports (i.e. LP and MILP). MiniZinc is not really a solver, but rather an interface to many solvers; its use should be quite straightforward (I haven’t used it, though): PRs are welcome :)! You also have access to CPLEX CP (using ConstraintProgrammingExtensions and an old MOI — updating to recent MOI shouldn’t take long, but it will require ). Apart from that, I’m working on wrapping OR-Tools’ solvers and have all their features accessible from Julia — but the CP part will take a while.
ConstraintProgrammingExtensions is mostly dead, although I still have hopes to revive it. Large parts of it have been integrated into MOI, meaning that you don’t really need this package in many cases.
Overall, it’s a bit bitter-sweet: there has been some work (mostly, PhD students, including myself), parts are useable, but there is no institutional support (unlike JuMP/MOI, with someone working full-time on them).
Good to know! Gonna give it a shot to formulate some graph optimization problems in GraphsOptim.jl
Awesome! Excited to see that come to life
A good summary for the Julia ecosystem as a whole. But it’s still a testament to the language’s strengths that a community of PhD students and volunteers are able to build and sustain an ecosystem like that
what is the status of this modeling paradigm in the JuMP ecosystem?
Some things are there. People are using it. But we’ll likely never be a fully fledged replacement for MiniZinc or some SAT type language.
Unfortunately its use is not demonstrated within the JuMP docs. Would a PR be welcome there?
I’m going to say no, for now. MiniZinc is part of the JuMP docs, jump-dev/MiniZinc.jl · JuMP, but true, there isn’t a tutorial. There are two reasons: (1) I’ve tried to minimize the number of packages that we use in the documentation, because it already takes 50 minutes to build all the documentation; and (2) MiniZinc.jl currently requires a manual installation on Windows, so we’ll run into issues if we recommend it too widely. It’s still not quite ready for prime time.
PRs to improve the MiniZinc README would be welcome though.