Status of constraint programming in JuMP

Now that MathOptInterface v1 supports constraint programming, what is the status of this modeling paradigm in the JuMP ecosystem? I found this checklist issue but it is a bit hard to parse for outsiders, so I wanted to make sure I got the broad strokes right.

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?

Outside of JuMP, ConstraintProgrammingExtensions.jl is stuck with MathOptInterface v0.10, and ConstraintSolver.jl apparently uses its own constraint sets instead of MOI’s. Are those projects still active?

Ping @Azzaare and @dourouc05 and @Wikunia

3 Likes

Hi!

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.

Improve support for constraint programming · Issue #2227 · jump-dev/JuMP.jl · GitHub is quite out of date too. JuMP and MOI have seen tremendous progress in many areas, including NLP: many of these action boxes should be ticked.

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).

1 Like

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

1 Like

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.

1 Like