我有以下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和其他求解程序报告这是不可满足的。
我在俯瞰什么?
答案 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 ==运算符来定义应该起作用的约束。我没有安装程序来验证,但希望它能让您更深入地了解问题。如果还有错误我也不会感到惊讶,我很想知道。