2
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

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

4

1 回答 1

2

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

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",
];

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

于 2015-06-03T18:05:09.630 回答