Minizinc:琐碎的平等不可满足

时间:2017-07-10 10:56:23

标签: constraints minizinc gecode

我有以下minizinc模型:

include "globals.mzn";
var 0..9: A_1_1;
var 0..9: A_2_1;
var 0..9: A_3_1;
constraint (A_3_1+A_2_1+A_1_1) = A_1_1;
solve satisfy;

模型应该有简单的解决方案0 = A_1_1 = A_2_1 = A_3_1。但是,Gecode和其他求解程序报告这是不可满足的。

我在俯瞰什么?

2 个答案:

答案 0 :(得分:2)

当MiniZinc将模型转换为FlatZinc格式时,似乎是一个错误。给出的信息来自MiniZinc:

WARNING: model inconsistency detected
test66.mzn:6:
in binary '=' operator expression

生成的FlatZinc文件包含以下内容:

constraint bool_eq(false,true);
solve  satisfy;

这就是FlatZinc求解器产生UNSATISFIABLE的原因。

有趣的是,以下模型使用临时决策变量T

var 0..9: A_1_1;
var 0..9: A_2_1;
var 0..9: A_3_1;
var 0..9: T;

constraint
    T = A_3_1 + A_2_1 + A_1_1 /\
    T = A_1_1
; 
solve satisfy;

模型然后产生所有10个解决方案,其中A_1_1被指定为0到9之间的值,A_2_1 = A_3_1 = 0,并且T被指定为相同的值A_1_1

但是,如果使用T初始化A_1_1,则再次抛出UNSAT:

var 0..9:T = A_1_1;

更新:可以注意到以下约束有效,即右侧的2 * A_1_1

constraint A_3_1 + A_2_1 + A_1_1 = 2 * A_1_1;

答案 1 :(得分:0)

您的约束似乎是尝试使用赋值运算符,但操作可能无效。您可以尝试a = b + c,但可能不允许b + c = a。或者,您可以尝试使用equality ==运算符来定义应该起作用的约束。我没有安装程序来验证,但希望它能让您更深入地了解问题。如果还有错误我也不会感到惊讶,我很想知道。