Вызов геокода из Java с использованием модели MiniZinc
Я хотел бы решить модель с динамическими аргументами во время выполнения в Java. У меня есть проблема, написанная в MiniZinc. Из терминала я могу решить модель, вызвав следующие команды:
mzn2fzn model.mzn model_data.dzn (this produces model.fzn file)
fzn-gecode model.fzn (actually solves the model)
В основном, есть 2 шага: сначала мне нужно скомпилировать модель миницинка в формат flatzinc при подаче файла данных, а затем мне нужно запустить сам gecode для модели flatzinc.
Конечно, я могу выполнить эти шаги, вызвав внешний процесс (используя ProcessBuilder в Java или подобный подпроцесс в python). Но я хотел бы знать, есть ли лучший способ. В частности, я бы хотел избежать повторной компиляции моей модели в flatzinc для каждого звонка.
Есть ли альтернатива тому, как я пытаюсь вызвать gecode?
Спасибо!
1 ответ
В настоящее время нет прямого интерфейса от Java к libminizinc, написанного на C++. Таким образом, наилучшим вариантом является запуск MiniZinc как внешнего процесса.
Однако вам не нужно вызывать два отдельных процесса. Используя процесс mzn-fzn
В дистрибутиве MiniZinc 2 вы можете скомпилировать и запустить его с использованием данного решателя, пока создаете только один процесс.
Таким образом, данный код может быть выражен как:mzn-fzn --solver fzn-gecode model.mzn model_data.dzn
Вы можете избежать сохранения данных в файл, используя -D
флаг.