可以不止一个人解决'适用于MiniZinc?

时间:2017-05-05 08:43:55

标签: minizinc

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

define Variables;

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

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

其中第二组约束是应用于第一个solve 结果的约束,单独执行操作会减少搜索空间,从而减少计算时间,这是我想出这个的原因结构在第一位。

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

1 个答案:

答案 0 :(得分:1)

正如您所提到的,MiniZinc在模型中只需要一个solve

根据问题还有其他方法。

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

MiniZinc的开发版本包含一个Python接口,这可能会让这很容易。但是,我没有测试过这个。

2)在很大程度上取决于具体问题,可以将两个版本组合在同一个模型中。例如,如果问题有两个目标,那么您可以在模型中同时存在两个子问题,并将这两个目标结合起来,在目标上增加权重,了解每个子问题目标的重要性。这是"标准"处理多个目标(多目标)的方法,例如在线性规划。但是,在MiniZinc中没有特别的支持。

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