0

我尝试在单个mzn文件中应用如下结构:

define Variables;

%% first set of constraints
constraint ...;
constraint ...;
solve satisfy;

%% second set of constraints
constraint ...;
constraint ...;
solve satisfy;

其中第二组约束是应用于 first 的结果的约束solve,单独进行操作会减少搜索空间,从而减少计算时间,这就是我首先提出这种结构的原因。

有没有办法实现这种依赖结构?由于 MiniZinc 不允许两个solve.

4

1 回答 1

1

正如你提到的 MiniZinc 需要solve一个模型。

根据问题,还有其他方法。

1) 用另一种编程语言编写一个程序,运行第一个 MiniZinc 模型并获取结果。然后,您可以制作(运行时)另一个使用先前结果运行的 MiniZinc 模型。这是我自己可能会使用的方法。

MiniZinc 的开发版本包括一个 Python 接口,这可能使这变得非常容易。但是,我没有对此进行测试。

2)非常依赖于具体问题,有可能将两个版本组合在同一个模型中。例如,如果问题有两个目标,那么您可以在模型中同时拥有两个子问题,并将这两个目标结合起来,在目标上添加权重,每个子问题目标的重要性。这是处理例如线性规划中的多个目标(多目标)的“标准”方式。然而,在 MiniZinc 中对此没有特别的支持。

(我想在 MiniZinc 中拥有的一个相关功能是支持一个模型,它首先解决一个目标,然后生成满足该目标的所有解决方案。这在今天的 MiniZinc 中是不可能的。但是,MiniZinc 的实验性 MiniSearch 扩展,http至少根据开发人员的说法,://www.minizinc.org/minisearch/可能使这成为可能。虽然我从来没有让它工作......)

于 2017-05-07T08:06:03.630 回答