2017-11-30 7 views
1

출력시 선택적 enum은 어떻게됩니까? 내가 INTMiniZinc에 결석 한 선택적 enum을 출력하십시오.

set of int: Foo = 1..2; 
var opt Foo: foo; 
output [ "foo: \(foo)" ]; 
solve satisfy; 

의 세트로 푸를 변경하는 경우 다음이

Compiling test.mzn 
Running test.mzn 
foo: <> 
---------- 
Finished in 136msec 

작동

Compiling test.mzn 
MiniZinc: flattening error: 
    function _toString_Foo is used in output, par version needed 
Finished in 29msec 

그리고 누락 된 값 :

enum Foo = { A, B }; 
var opt Foo: foo; 
output [ "foo: \(foo)" ]; 
solve satisfy; 

이 출력 실패 분명히 여기서 문제가되지 않습니다.

는 I는 솔루션이 존재하는 경우, 그것은 여전히 ​​심지어는 INT의 집합 실패,

실제로
Compiling test.mzn 
Running test.mzn 
MiniZinc: evaluation error: undeclared identifier '_absent' 
unknown file 
Finished in 39msec 

실패

set of int: Foo = 1..2; 
var opt Foo: foo; 
output [ "foo: " ++ 
    if (occurs(fix(foo))) then "present" else "absent" endif 
              ]; 
solve satisfy; 

실패 확인하더라도.

답변

2

업데이트 :이 문제는 MiniZinc 컴파일러의 develop 분기에서 해결되었습니다. 다음 릴리스 인> 2.1.6에서는 선택적 매개 변수를 출력에 사용할 수 있어야합니다. 열거가 해석 입력에서 정수로 표시되므로


특수 매핑 기능은 올바른 출력을 위해 출력 모델로 삽입된다.

해결사 출력을 MiniZinc 출력으로 변환하는 것은 solns2out 실행 파일의 작업입니다. 이 작업은 출력 모델 (.ozn)을 사용하여 수행됩니다.

오류는 정수를 다시 열거 형에 매핑하는 데 필요한 함수가 없기 때문에 발생합니다. 이는 컴파일러의 버그입니다. 단지 이틀 전에 열거 집합에 대한 _toString_ 함수가 개발 분기에 추가되었으며 옵션 유형의 버전이 여전히 누락 된 것처럼 보입니다. https://github.com/MiniZinc/libminizinc/issues

+0

내가이 예상되는 경우 확인할 수있는 다음 릴리스에 대한 일정 또는 곳이 있습니까 :

난 당신이 GitHub의에서 문제를 만들고 문제가 가능성이 다음 MiniZinc 릴리스에서 해결 될 것 제안 ? 스냅 샷 버전을 직접 다운로드하지 않고 다운로드하는 옵션이없는 것 같습니다. –

+0

새로운 버전의 MiniZinc 배포판에 대한 발표는 아직 없습니다. MiniZinc 팀은 현재 다가오는 버전의 마감일을 처리하지 않지만 수정이 필요한 중요한 버그가 있거나 중요한 기능이 추가 될 때마다 버전을 릴리스합니다. 더 큰 방출은 내년의 첫번째 달 동안 계획된다. – Dekker