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

Minizinc, Gecode, how to get an identical solutions across distributed servers, with multi-solution model?

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

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

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

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

谢谢!

如果模型中的搜索策略不包含随机化,那么,假设所有版本控制相同,执行 Gecode 的单个线程应该总是 return 相同模型和实例数据的相同答案。它是否在不同的节点上并不重要。使用单线程执行是确保在所有节点上找到相同解决方案的最简单方法。

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

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

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