旅行推销员和地图/减少:放弃频道

时间:2011-05-24 17:04:53

标签: optimization mapreduce traveling-salesman

这是一个学术问题,而不是实际问题。在旅行推销员问题中,或任何其他涉及寻找最小优化的问题......如果使用地图/减少方法,似乎有一些价值可以将当前最小结果广播给所有人计算节点以某种方式允许它们放弃超过该计算的计算。

换句话说,如果我们将问题映射出去,我们希望每个节点在完成之前知道何时放弃给定的部分结果,但是当它已经超出其他解决方案时。

如果减速器具有向映射器提供反馈的方法,那么立即想到的一种方法是。考虑我们是否有100个节点,映射器为它们提供了数百万条路径。如果reducer将最佳结果提供给mapper,那么该值可以作为参数与每个新路径(问题子集)一起包含。在这种方法中,粒度相当粗糙...... 100个节点将在问题的分区上逐渐磨损完成,并且只有来自映射器的下一个请求才能获得新的最小值。 (对于少量节点和大量问题分区/子集来说,这种粒度是无关紧要的;也可能是人们可以将启发式方法应用于可能的路由或问题子集被馈送到节点的序列中获得最佳的快速收敛,从而最大限度地减少节点执行的“浪费”计算量。

另一种想到的方法是节点主动订阅某种频道,或多播甚至广播,从中可以从计算循环中收集新的最小值。在这种情况下,当被通知更好的解决方案时(他们的同行之一),他们可以立即放弃糟糕的计算。

所以,我的问题是:

  • 与现有地图/简化讨论有关的任何艺术术语是否涵盖此概念
  • 当前的map / reduce框架是否提供支持此类动态反馈的功能?
  • 这个想法是否存在一些缺陷......为什么这是愚蠢的原因?

2 个答案:

答案 0 :(得分:3)

这是一个很酷的主题,没有那么多的文学作品,之前已经完成了。所以这几乎是一个头脑风暴的帖子,而不是你所有问题的答案;)

所以每个TSP都可以表示为一个图形,看起来可能就像这个:(取自德国维基百科)

TSP graph

现在您可以在其上运行图算法。 MapReduce可以很好地用于图形处理,虽然它有很多开销 您需要一种称为“消息传递”的范例。本文在此处描述了:Paper 我在图形探索方面对它进行了博客论述,它讲述了它的工作原理。 My Blogpost

这是告诉mapper当前最小结果的方式(可能只是顶点本身)。

凭借脑海中的所有知识,考虑一个branch and bound算法(你所描述的)来达到目标​​应该是非常标准的。就像有一个随机的起始顶点和分支到每个相邻的顶点。这会导致将消息发送到每个邻接,并且可以从起始顶点(Map Step)获得成本。如果顶点本身低于当前存储的成本(缩减步骤),则顶点本身仅更新其成本。最初应将其设置为无穷大 你一遍又一遍地这样做,直到你再次到达起始点(显然是在你去过其他每一个之后)。因此,您必须以某种方式跟踪当前到达顶点的最佳方式,这也可以存储在顶点本身中。并且偶尔你必须绑定这个分支并切断太昂贵的分支,这可以在阅读消息后在reduce步骤中完成。 基本上这只是MapReduce中图形算法的混合和一种最短路径 请注意,这不会产生节点之间的最佳方式,它仍然是一种启发式的东西。而你只是平行化NP难题。

但是再次进行一些自我宣传,也许你已经在我链接的博客文章中读到了它,MapReduce存在一个抽象,这种图形处理的开销更少。它被称为BSP (Bulk synchonous parallel)。它在通信和计算模型中更自由。所以我确信使用BSP可以比MapReduce更好地实现这一点。您可以通过它更好地实现这些渠道。

我目前参与了一个夏令营项目,该项目针对BSP的这些SSSP问题。也许你想要visit if you're interested。这可能是一个部分解决方案,我的博客也很好地描述了它。 SSSP's in my blog

我很高兴听到一些反馈意见;)

答案 1 :(得分:1)

似乎Storm实现了我的想法。它本质上是一种计算拓扑(考虑每个计算节点如何根据特定减速器的键/散列函数将结果路由)。

这不完全是我所描述的,但如果有一个足够低延迟的方式来传播当前边界(即局部最佳信息),拓扑中的每个节点都可以更新/接收以便知道哪些结果,那么它可能会很有用丢弃。