Minizinc:if-then-else语句

时间:2015-06-03 10:30:42

标签: constraint-programming minizinc

var 1..5: k=1;
array[1..2] of var 1..48: key2;
constraint forall(i in 1..4,j in 1..48 where k= ceil(j/24))(if 
                 table[i,j]!=0 then key2[k]=j else true endif);

我试图在我的minizinc程序中应用这个约束。目的是最大化成本函数,这是约束之一但是当我运行这个代码时它显示

Finished in 203msec
Compiling first.mzn with data empdata2.dzn
Running first.mzn
=====UNSATISFIABLE=====
Finished in 189msec

如果我用true替换key2 [k] = j,那么它编译并运行没有任何错误。 我没有在我的程序中的任何其他地方使用key2数组。我正在使用数据文件来提供输入,并且我已初始化key2数组为key2 = [1,1]。 我是minizinc的初学者,我不明白为什么在这种情况下将数字赋给数组有问题?

1 个答案:

答案 0 :(得分:1)

我运行了以下模型,它为Gecode和G12fd求解器提供了许多解决方案(使用“求解满足”)。您使用哪种MiniZinc版本?我使用最新的Git版MiniZinc 2.0,与v2.0.2大致相同。

var 1..5: k=1;
array[1..2] of var 1..48: key2;
array[1..4,1..48] of var 0..1: table;

solve satisfy;

constraint forall(i in 1..4,j in 1..48 where k= ceil(j/24))(if 
              table[i,j]!=0 then key2[k]=j else true endif);

output [
    "key2:", show(key2), "\n",
    "table: ", show(table), "\n",
];

您在此处未显示的模型中是否有其他约束?