Minizinc、Gecode,如何通过多解决方案模型跨分布式服务器获得相同的解决方案?

kir*_*rbo 2 minizinc gecode

我正在使用 minizinc 和 gecode 以分布式方式解决最小化问题。我有多个分布式服务器,它们使用相同的输入来解决相同的模型,并且我希望所有服务器都能获得相同的解决方案。

问题是模型有多个解决方案,这会定期导致服务器独立地提出不同的解决方案。选择哪种解决方案并不重要,只要所有服务器之间的解决方案都是相同的即可。我还使用“-p”参数和 gecode 来使用多个线程(如果相关)。

有什么办法可以解决这个问题吗?

例如,我正在考虑输出所有解决方案,然后在每台服务器上按字母数字对它们进行排序。

谢谢!

Dek*_*er1 5

如果模型中的搜索策略不包含随机化,则假设所有版本控制都相同,执行 Gecode 的单个线程应该始终为相同的模型和实例数据返回相同的答案。如果它位于不同的节点上也没关系。使用单线程执行是确保在所有节点上找到相同解决方案的最简单方法。

然而,如果您想使用多个线程,则无法做出这样的保证。由于程序的并发性,每次运行的执行路径可能不同,每次都可能找到不同的解决方案。

您对解决方案进行排序的建议是可能的,但需要付出代价。有两种方法可以做到这一点。您可以使用标志找到所有解决方案-a,然后对它们进行排序,或者您可以更改模型以强制该解决方案成为第一个解决方案(如果您要对它们进行排序)。第二个选项可以通过更改搜索策略来实现。这两种解决方案都可能非常昂贵,并且可能(超过)成倍地增加运行时间。

如果您完全担心运行时,那么我建议您采纳 Patrick Trentin 的建议,在主节点上运行模型并分发解决方案。这在计算时间上是最高效的,并且在运行时也很可能是最高效的。