2017-05-18 4 views
0

Java에서 런타임에 동적 인수가있는 모델을 해결하고 싶습니다. 내 문제는 MiniZinc으로 작성했습니다.MiniZinc 모델을 사용하여 Java에서 gecode를 호출하십시오.

mzn2fzn model.mzn model_data.dzn (this produces model.fzn file) 
fzn-gecode model.fzn (actually solves the model) 

는 기본적으로 처음에는 데이터 파일을 공급하면서 flatzinc 형식으로 모델을 minizinc 컴파일해야하고 내가 gecode를 실행해야합니다, 2 단계가 있습니다 : 터미널에서 나는 다음과 같은 명령을 호출하여 모델을 해결할 수 flatzinc 모델 자체.

물론 나는 외부 프로세스 (자바의 ProcessBuilder 또는 파이썬의 'like'와 같은)를 호출하여 이러한 단계를 수행 할 수 있습니다. 그러나 더 좋은 방법이 있는지 알고 싶습니다. 특히 나는 모든 모델에 대해 flatzinc에 내 모델을 재 컴파일하는 것을 피하고 싶다.

내가 gecode를 호출하는 방법에 대한 대안이 있습니까?

감사합니다.

답변

3

현재 C++로 작성된 Java에서 libminizinc에 이르는 직접 인터페이스는 없습니다. 따라서 최상의 선택은 MiniZinc를 외부 프로세스로 실행하는 것입니다.

그러나 두 개의 별도 프로세스를 호출 할 필요는 없습니다. MiniZinc 2 배포판에있는 mzn-fzn 프로세스를 사용하면 하나의 프로세스 만 생성하면서 주어진 솔버를 사용하여 컴파일하고 실행할 수 있습니다. 당신은 -D 플래그를 사용하여 파일에 데이터를 저장 피할 수 mzn-fzn --solver fzn-gecode model.mzn model_data.dzn

:

주어진 코드

따라서 다음과 같이 표현 될 수있다.