2017-11-29 2 views
1

나는 ariz를 minizinc로 망치고있다. 조건부 출력을 얻기 위해 노력하고 있는데, 배열 요소의 값이 'true'이면이 요소의 배열 인덱스에 관한 정보가 출력된다. 어떤 기능이나와 술어 :조건부 출력 minizinc

I 허용하고 있지 않다 그러나
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 : 유형의 오류를

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를 사용하여이 문제를 해결하지 시도 : 이것은 내가 무엇을 가지고 발견이 서명 : 'CONCAT (VAR 옵트 인 문자열의 배열 [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)"] 

어떻게하면됩니까?

답변

2

where 절의 의사 결정 변수 주변에서 fix(...)을 사용해보십시오.

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에 관한 메시지는 아마도 이런 맥락에서 오해의 소지가 있습니다.)