我有一个MiniZinc应用程序,我希望通过查找某些输入数据的低成本排列来最小化某些内容的“成本”。所以我有:
array[1 .. n] of var 1 .. n: Seq;
...
constraint alldifferent( [ Seq[i] | i in 1 .. n ]);
然后我根据Seq计算成本。该应用程序开始工作,但运行时间太长,而且数量非常少。显然,求解器会尝试所有n!可能性。我该如何扩展呢?
答案 0 :(得分:1)
如果alldifferent(Seq)是唯一约束,则求解器将尝试所有排列。
然而,通常在排列中存在可能会破坏的对称性,例如第一个元素是1或者第一个元素总是小于第二个元素等。这种对称性通常是非常特定的问题
如果模型中存在其他约束,那么这些约束可能有助于减少搜索空间,可能会破坏对称性等。
正常情况下n有多大?像往常一样,该模型的更多细节有助于提供更具体的帮助。此外,尝试不同的求解器和搜索启发式可以加快速度。