0

我想在 Java 的运行时解决具有动态参数的模型。我的问题是用 MiniZinc 写的。从终端我可以通过调用以下命令来解决模型:

mzn2fzn model.mzn model_data.dzn  (this produces model.fzn file)
fzn-gecode model.fzn (actually solves the model)

基本上有两个步骤,首先我需要在提供数据文件的同时将 minizinc 模型编译成 flatzinc 格式,然后我需要在 flatzinc 模型上运行 gecode 本身。

当然,我可以通过调用外部进程(在 Java 中使用 ProcessBuilder 或在 python 中使用子进程'like')来完成这些步骤。但我想知道是否有更好的方法。特别是我想避免每次调用都将我的模型重新编译成 flatzinc。

我尝试调用 gecode 的方式是否有其他选择?

谢谢!

4

1 回答 1

4

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

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

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

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

于 2017-05-22T13:32:31.397 回答