MiniZinc与SAT求解:从模型转换到混合求解技术
MiniZinc与FlatZinc的转换及工具实验
MiniZinc是一种旨在成为标准约束编程(CP)建模语言的工具,它的一大重要特性是能够将自身代码转换为FlatZinc内置代码。在转换过程中,不同类型的表达式和约束会有不同的处理方式。
- 线性(不)等式处理 :线性(不)等式通常会被替换为(特定类型、可能被具体化的)线性谓词,除非可以用更简单的算术约束替代。例如, int_lin_le_reif([1,-1], [s[0], s[2]], -2, b1) 就是转换后的一个示例。
- 数组访问处理 :涉及非固定索引的数组访问会被替换为FlatZinc元素约束,如 array_int_element 。
- 其他操作处理 :其余的MiniZinc操作都有对应的FlatZinc操作。像 (b1 \/ b2) <-> true 会转换为 bool_or(b1, b2, true) , x * y = z 会转换为 int_times(x, y, z) 。
- 顶级合取拆分 :顶级合取会被拆分为多个约束项,例如 constraint a /\ b; 会变成两个约束项。
在注解方面,大部分注解在转换过程中会被保留,注解内的固定表达式会像其他表达式
超级会员免费看
订阅专栏 解锁全文


被折叠的 条评论
为什么被折叠?



