条件输出minizinc

时间:2017-11-29 20:16:44

标签: minizinc

我用minizinc搞乱了,我试图实现一个条件输出,如果数组元素有值' true',程序输出有关这些元素的信息' ; s数组索引。这就是我所拥有的:

include "globals.mzn";
int: time=5;
int: n=3;
int: l=n*n;
array[1..4,0..time,1..l] of var bool: X;
constraint X[1,5,7]=true;
constraint X[2,5,3]=true;
constraint X[3,5,9]=true;
constraint X[4,5,7]=true;
solve satisfy;

我尝试使用concat来解决这个问题,如下所示:

output ["X_"++concat(["\(r)_\(t)_\(pos)" 
| pos in 1..l, r in 1..4, t in 0..time, where X[r,t,pos]==true])++"\n"];

然而,我不被允许, " MiniZinc:类型错误:没有找到此签名的函数或谓词:`concat(var opt string的array [int])'"

我想要的是什么,

for pos in 1..l, r in 1..4, t in 0..time
 if X[r,t,pos]==true
  output ["X_\(r)_\(pos)_\(t)"]

我怎样才能实现它?

1 个答案:

答案 0 :(得分:2)

尝试在fix(...)子句中的决策变量周围使用where,例如

output ["X_"++concat(["\(r)_\(t)_\(pos)" 
| pos in 1..l, r in 1..4, t in 0..time, where fix(X[r,t,pos])==true])++"\n"];
当使用决策变量的实际值时,通常需要

fix,例如用于比较其值等。

(关于var opt string的消息在这种情况下可能会产生误导。)