使用 MiniZinc 模型从 Java 调用地理编码

Call gecode from Java using MiniZinc model

我想在 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 中使用子进程 'like')。但我想知道是否有更好的方法。特别是我想避免在每次调用时将我的模型重新编译为 flatzinc。

对于我尝试调用 gecode 的方式,是否有一些替代方法?

谢谢!

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

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

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

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