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

时间:2017-08-29 07:52:48

标签: minizinc gecode

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

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

有没有办法可以解决这个问题?

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

谢谢!

1 个答案:

答案 0 :(得分:4)

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

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

您可以对解决方案进行分类,但需要付出代价。有两种方法可以做到这一点。您可以使用-a标记找到所有解决方案,然后对其进行排序,也可以更改模型以强制解决方案成为第一个解决方案你会对它们进行排序可以通过更改搜索策略来实现第二个选项。这两种解决方案都非常昂贵,并且可能(超过)以指数方式增加运行时间。

如果你完全关心运行时,那么我建议你接受Patrick Trentin的建议并在主节点上运行模型并分发解决方案。这将是计算时间中最有效的,并且最有可能在运行时有效。