如何优化这款MiniZinc应用程序?

时间:2015-02-10 09:26:03

标签: optimization minizinc

我有一个MiniZinc应用程序,我希望通过查找某些输入数据的低成本排列来最小化某些内容的“成本”。所以我有:

array[1 .. n] of var 1 .. n: Seq;
...
constraint alldifferent( [ Seq[i] | i in 1 .. n ]);

然后我根据Seq计算成本。该应用程序开始工作,但运行时间太长,而且数量非常少。显然,求解器会尝试所有n!可能性。我该如何扩展呢?

1 个答案:

答案 0 :(得分:1)

如果alldifferent(Seq)是唯一约束,则求解器将尝试所有排列。

然而,通常在排列中存在可能会破坏的对称性,例如第一个元素是1或者第一个元素总是小于第二个元素等。这种对称性通常是非常特定的问题

如果模型中存在其他约束,那么这些约束可能有助于减少搜索空间,可能会破坏对称性等。

正常情况下n有多大?像往常一样,该模型的更多细节有助于提供更具体的帮助。此外,尝试不同的求解器和搜索启发式可以加快速度。