我想在Java运行时解决一个带有动态参数的模型。我的问题是用MiniZinc写的。在终端中,我可以通过调用以下命令来解决模型:
mzn2fzn model.mzn model_data.dzn (this produces model.fzn file)
fzn-gecode model.fzn (actually solves the model)基本上有两个步骤,首先需要在提供数据文件的同时将minizinc模型编译成平面锌格式,然后在平面锌模型上运行gecode本身。
当然,我可以通过调用外部进程来执行这些步骤(在Java中使用ProcessBuilder,在python中使用子进程'like‘)。但我想知道是否有更好的方法。特别是,我想避免每次调用时将我的模型重新编译成平面锌。
除了我试着叫壁虎的方式之外,还有别的办法吗?
谢谢!
发布于 2017-05-22 13:32:31
目前,Java与libminizinc之间没有用C++编写的直接接口。因此,最好的选择是将MiniZinc作为外部进程运行。
但是,您不必调用两个单独的进程。使用流程mzn-fzn (在MiniZinc 2发行版中找到),您可以使用给定的求解器编译和运行,同时只构建一个进程。
因此,给定的代码可以表示为:mzn-fzn --solver fzn-gecode model.mzn model_data.dzn
使用-D标志可以避免将数据保存到文件中。
https://stackoverflow.com/questions/44050354
复制相似问题