MiniZinc 可以应用多个 'solve' 吗?

Can more than one 'solve' be applied in MiniZinc?

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

define Variables;

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

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

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

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

正如您提到的 MiniZinc 在模型中恰好需要一个 solve

根据问题还有其他方法。

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

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

2) 很大程度上取决于具体问题,可以将两个版本组合在同一模型中。例如,如果问题有两个 objective,那么您可以在模型中同时包含两个子问题,并将这两个 objective 结合起来,在 objective 上添加权重子问题 objective 是。这是 "standard" 处理多个 objectives (multi-objectives) 的方法,例如线性规划。然而,在 MiniZinc 中没有对此的特殊支持。

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