使用MiniZinc模型从Java调用gecode

时间:2017-05-18 14:18:50

标签: java minizinc gecode

我想在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的方式有其他替代方法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

目前没有从Java到libminizinc的直接接口,用C ++编写。因此,最佳选择是将MiniZinc作为外部过程运行。

但是,您不必调用两个单独的进程。使用MiniZinc 2发行版中的过程mzn-fzn,您可以使用给定的求解器进行编译和运行,同时只构建一个过程。

因此,给定的代码可以表示为: mzn-fzn --solver fzn-gecode model.mzn model_data.dzn

您可以使用-D标记来避免将数据保存到文件中。