我想在Java中运行时使用动态参数解决模型。我的问题是用MiniZinc编写的。从终端我可以通过调用以下命令来解决模型:
mzn2fzn model.mzn model_data.dzn (this produces model.fzn file)
fzn-gecode model.fzn (actually solves the model)
基本上有2个步骤,首先我需要在提供数据文件的同时将minizinc模型编译成flatzinc格式,然后我需要在flatzinc模型上运行gecode。
当然,我可以通过调用外部进程来执行这些步骤(在Java中使用ProcessBuilder或在python中使用子进程'类似于')。但我想知道是否有更好的方法。特别是我想避免为每次通话重新编译我的模型到flatzinc。
我试图调用gecode的方式有其他替代方法吗?
谢谢!
答案 0 :(得分:3)
目前没有从Java到libminizinc的直接接口,用C ++编写。因此,最佳选择是将MiniZinc作为外部过程运行。
但是,您不必调用两个单独的进程。使用MiniZinc 2发行版中的过程mzn-fzn
,您可以使用给定的求解器进行编译和运行,同时只构建一个过程。
因此,给定的代码可以表示为:
mzn-fzn --solver fzn-gecode model.mzn model_data.dzn
您可以使用-D
标记来避免将数据保存到文件中。