问题描述
我想知道是否可以使用 Python 接口创建 MiniZinc 模型。正如我在文档中看到的,您可以将模型添加为字符串,但这与您之后调用的外部 MiniZinc 文件没有什么不同。
我想要的是创建一个模型,该模型使用依赖于某些先前计算的变量,因此不是在运行 Python 代码之前我可以提供的固定值。这可能吗?
解决方法
MiniZinc Python 包目前确实通过使用文件与 minizinc 可执行文件进行通信。正如您所说,MiniZinc Python 还允许您通过使用字符串来提供(部分)模型。 动态生成这些文件或字符串没有问题,它们将在编译时被 minizinc 可执行文件解析。
请注意,在 Python 中有许多选项可以生成 MiniZinc 模型字符串:
- 您可以根据其他 Python 代码有条件地附加模型字符串。
- 您可以将模型字符串与 Python 执行交错使用。例如,使用 f 字符串。
- 或者您可以使用 Python 中提供的众多模板包之一。
对于大多数应用程序,这似乎就足够了。创建字符串/文件并在 MiniZinc 可执行文件中解析它们的开销在大多数系统上都是毫秒级的,与求解(和展平)时间相比微不足道。
对于快速发展的模型,例如运行具有较小社区的 LNS,即使是这么小的开销也可能是一个问题。我们仍在研究避免这种开销的解决方案,但目前尚未为公众做好准备。