Solving Problems with MiniZinc
blog.jpalardy.com
blog.jpalardy.com
From what I've seen I had the impression that MiniZinc had some problems, i.e. it has some unexpected behavior, such as: - reordering constraints changes performance - reordering constraints may change results/feasibility of a problem
For quick prototyping it was nice though.
Reording causing changes in feasibility of a problem is a MAJOR bug, and I hoped they reported it. The constraint system I work on (Minion and Essence', a competitor to MiniZinc), has (AFAIK) never had such a bug in any release (they come up occasionally during development, but we have serious tests specially designed to detect that kind of problem).
MZ seems to work beautifully for simple/modular examples. A professor suggested this one instead (for performance, popularity): http://eclipseclp.org but I can't yet assert if they are comparable or if the statement is accurate.
[1]: https://homes.cs.washington.edu/~bodik/ucb/cs294fa12.html
The sweet spot for MiniZinc is in investigating a problem and prototyping a solution. I would say it takes 10-20 hours to get a workable understanding of the language and paradigm, plus or minus your previous experience.
However, MiniZinc is built on backtracking, which scales poorly to real world instances of np-hard problems.
This is in essence traversing through a search tree (through DFS) and finding a valid end-node.
This means that when we find an invalid end-node (for example by running out of possible values for a variable) then we must in some way go back up the search tree.
There are several different ways of doing this.
Short answer: Yes, we must backtrack somehow.
Now, they often do all kinds of other clever things on top (learning, restarts, parallelisation, heuristics), but when the going gets tough, there is a lot of backtracking.
One (very cool) instance of constraint programming occurs at Ericsson through the Unison project http://unison-code.github.io/ .
Pyomo uses "algebraic notation" for so-called mathematical programming models. This starts out with continuous variables and linear constraints ("linear programming"), but nonlinear constraints and discrete variables are also supported.
Of course, there is a lot of overlap in functionality. Sorry for the specific vocab.