I'd be interested to use MiniZinc for its in-browser experience & its support of many solvers, but at the same time I find CP-SAT (from OR-Tools) really efficient and I'd like to be sure that by choosing to use MiniZinc with CP-SAT as a backend, I lose nothing compared to using CP-SAT directly.
So here are my questions: how efficient is the MiniZinc -> CP-SAT translation? Do I have any benefit from coding things directly in CP-SAT? If yes, can I, somehow, provide alternative instructions in MiniZinc, like one specialized for CP-SAT and one for any generic backend? Is there a list of constraints that are known to be more efficient with CP-SAT directly compared to minizinc's translation?
To give a more precise example, CP-SAT has many functions like "NoOverlap2D", "circuits", "AddReservoirConstraint"… but is there always an equivalent MiniZinc constraint, and will it be compiled correctly to CP-SAT? For instance, for NoOverlap2D, it seems like I want to use diffn, so if I use diffn, will CP-SAT use the optimized NoOverlap2D code under the hood, or will it start from a more low-level set of instructions that it might have a harder time to optimize?
Also, in the MiniZinc challenge, are CP-SAT's performance obtained via a code written in MiniZinc, or directly via a code optimized for CP-SAT?
For the constraints that matches, we have a direct translation.
There are lots of constraints in minizinc that are not in CP-SAT and that are made available through the expansion mechanism of Minizinc.
About the benchmarks, they were obviously run using the minizinc front-end.