1. 什么是 MiniZinc ?
约束满足性问题(Constraint Satisfaction Problem,CSP)判断在有限变量与有限约束条件下,是否存在满足所有约束条件的变量赋值,若有,则认为该问题是可满足的,并返回找到的可行解,这个过程并无优化功能,求解CSP的工具称为约束求解器,通常是组合基于回溯的搜索和约束传播为求解算法。例如该专栏的其他文章介绍的 CP-SAT 就是约束求解器,这类工具已成功用于解决许多领域的许多实际问题,例如调度、计划、组合设计等。
若约束满足性问题带优化目标,则称为约束优化问题(Constrained Optimization Problem,COP),它假设了一个目标函数值的变量,在求解过程中增加对该变量值的约束,解决的也是 CSP 问题,许多约束求解器带有优化功能。
在使用约束求解器的一个重要步骤是约束建模,这里面有两方面的挑战:
- 许多约束求解器使用的语言不尽相同,相同问题调用不同约束求解器需要多次建模;
- 约束建模涉及到非常多的复杂约束,用紧凑灵活的方式表达具有较高门槛。
在约束规划的许多研究与实际应用中,MiniZinc(免费开源)常常作为约束建模语言,承担了连接现实世界和约束求解的桥梁。MiniZinc 基于大型预定义约束库,以独立于求解器的高级方式对约束满足和优化问题进行建模。MiniZinc 编译器并不规定如何解决