我有兴趣使用 MiniZinc,因为它的浏览器内体验和对许多求解器的支持,但同时我发现 CP-SAT(来自 OR-Tools)确实非常高效,并且我想确保通过选择使用 MiniZinc 和 CP-SAT 作为后端,与直接使用 CP-SAT 相比,我不会有任何损失。
所以我的问题是:MiniZinc -> CP-SAT 的转换效率如何?直接在 CP-SAT 中编码有什么好处吗?如果是,我能否以某种方式在 MiniZinc 中提供替代指令,例如一个专门用于 CP-SAT 的指令和一个用于任何通用后端的指令?与 minizinc 的翻译相比,是否有一个已知使用 CP-SAT 更高效的约束列表?
举一个更精确的例子,CP-SAT 有许多函数,如“NoOverlap2D”、“circuits”、“AddReservoirConstraint”……但是否总是存在等效的 MiniZinc 约束,并且它会被正确编译为 CP-SAT?例如,对于 NoOverlap2D,似乎我想使用 diffn,所以如果我使用 diffn,CP-SAT 会在后台使用优化的 NoOverlap2D 代码,还是会从一组可能更难优化的低级指令开始?
另外,在 MiniZinc 挑战赛中,CP-SAT 的性能是通过用 MiniZinc 编写的代码获得的,还是直接通过针对 CP-SAT 优化的代码获得的?