2014-09-23 64 views
0

我对CP和MiniZinc有一个简短的介绍,但我不是专家。使用约束编程生成独特的解决方案

我有一个CP模型,我不能在这里发布ATM,在MiniZinc中实现。 我需要为问题生成所有可行的解决方案。我们希望只有少数几个,比如少于1000个,超过100个。

我试图用-a标志传递给minizinc ver来解决模型。 1.6但我注意到很多正在打印的解决方案都是相同的。

Here他们指的是“投影”。在另一篇文章中,我读到他们使用了一些“回溯机制”。

目前还不清楚。

我的问题,然后是:

  1. 什么是生成从CP模型只独特的解决方案的最佳方式是什么?
  2. CPP库中是否存在标准机制,如SCIP或Gecode?它有一个共同的名字吗?
  3. 计算效率高吗?
  4. minizinc支持吗?我如何访问该功能?

回答

4

通常情况下,CP系统只能为您提供不同的解决方案。我怀疑你有没有打印的决策变量(不在输出部分),并且你没有看到如果这些值包含在解决方案中,它将是独特的解决方案。

在你链接到的问题(this recent discussion)中,提到Gecode的FlatZinc求解器(至少是SVN版本)现在生成了不同的解决方案,给出了输出部分的决策变量子集。其他FlatZinc解算器似乎不具备此功能。

如果没有回答您的问题,请提供模型的详细信息和输出示例(包括输出部分)。

+0

Indedd。在我的模型中,我写了一个形式为a [t]> = b [t] -b [t-1]'的类MIP约束来表明a [t]度量从时间t-1开始的b值之间的变化到t。我用'a [t] = max(0,b [t] -b [t-1])替换它,并按预期工作。 我想知道,如果没有更好的方式来更有效地表达约束。 – 2014-10-02 14:50:24