我尝试在单个mzn
文件中应用如下结构:
define Variables;
%% first set of constraints
constraint ...;
constraint ...;
solve satisfy;
%% second set of constraints
constraint ...;
constraint ...;
solve satisfy;
其中第二组约束是应用于第一个solve
结果的约束,单独执行操作会减少搜索空间,从而减少计算时间,这是我想出这个的原因结构在第一位。
有没有办法实现这种依赖结构?由于MiniZinc不允许两个solve
。
答案 0 :(得分:1)
正如您所提到的,MiniZinc在模型中只需要一个solve
。
根据问题还有其他方法。
1)用另一种运行第一个MiniZinc模型的编程语言编写程序并获取结果。然后你可以制作(运行时)另一个MiniZinc模型,该模型与之前的结果一起运行。这是我自己可能会使用的方法。
MiniZinc的开发版本包含一个Python接口,这可能会让这很容易。但是,我没有测试过这个。
2)在很大程度上取决于具体问题,可以将两个版本组合在同一个模型中。例如,如果问题有两个目标,那么您可以在模型中同时存在两个子问题,并将这两个目标结合起来,在目标上增加权重,了解每个子问题目标的重要性。这是"标准"处理多个目标(多目标)的方法,例如在线性规划。但是,在MiniZinc中没有特别的支持。
(我想在MiniZinc中提供的一个相关功能是支持首先解决目标的模型,然后生成满足该目标的所有解决方案。这在今天的MiniZinc中是不可能的。但是, MiniZinc的实验性MiniSearch扩展,http://www.minizinc.org/minisearch/可能使这成为可能,至少根据开发人员的说法。虽然我从来没有让它工作......)