我最近遇到了一个案例,当被要求解决的用例属于旅行商问题/车辆路径问题时。我能够告诉他们实际问题是什么以及问题涉及什么数学。我确实解释了如何使用Hadoop的MapReduce范例部分解决下面提到的用例。 (解释了多个地图减少工作将如何解决问题)使用本书中提到的数据密集文本处理与MapReduce提到的图谱算法“作者:Jimmy Lin和Chris Dyer。
出于好奇,我对谷歌进行了一些研究,我可以看到很多实施和研究已经针对这个问题以不同的方式进行。 问题我被问到有(x,y)格式提到的城市坐标,我在谷歌看到的许多解决方案考虑了一些其他因素,如单位距离,负/正测量单位等。所以简而言之,我做了研究和阅读,我更加困惑。
我的问题是针对以下用例可能的解决方案以及最佳解决方案。如果一些经验丰富的人可以对此进行一些说明,那么清除我的困惑并以更好的方式理解解决方案将会有所帮助。或者,如果有人可以指导我正确的方向(这样我就不会更加困惑地探索整个解决方案的海洋)
采访中使用的案例:
一家公司正在努力寻找最佳解决方案,以便为12名员工提供300名客户服务。 他们想要一种技术解决方案,告诉他们如何随着业务的增长以及其他变化(如客户变更位置,新位置等)的变化来满足客户需求。
问题基本上是旅行商问题(TSP)或车辆路径问题(VSP)的一种形式。以下事情需要在这里完成。
起始坐标为(0,0),城市坐标示例如下所述。 以下是在文本文件中作为输入提供工作解决方案的坐标:
X coordinate Y Coordinate
420 278
421 40
29 178
350 47
298 201
417 186
378 134
447 239
42 114
45 199
362 195
381 243
429 1
338 209
176 9
364 26
326 182
500 129
190 51
489 103
368 142
132 260
305 200
446 137
375 154
440 190
9 118
437 32
383 266
什么是正确的方法来处理这个NP难题或者如果不对 什么可以是不同的方法与他们的利弊。
由于更多基于分析的问题可以进行某种可视化 完成了解决这个问题。像某些图表或使用R /分析工具
如果您需要更多详细信息,或者您可以建议我可以阅读和了解更多内容,请告诉我。
提前致谢
答案 0 :(得分:3)
没有解决NP问题的正确方法。由于复杂性是指数级的,因此除了微不足道的例子之外,其他任何事情都需要很长时间。
然而,有些近似值可以与真实答案相当接近,并且可能对您的应用程序而言足够好(因为它不是最短的路径,但它在某个相对范围内)它)。
检查wikipedia page。他们甚至有一些例子。
答案 1 :(得分:2)
如果我在面试时问这个问题 - 我会提出类似paper中描述的内容,看起来最适合你的任务的制定。在本文中,您将找到优化的近似方法,从一个点开始解决所有销售人员的多个销售人员问题。如果我们通过解决每个单一的旅行商问题(聚类将主要问题与经典问题分开)从特定的销售人员的家庭/家庭办公室开始,我们知道员工离开的地方就可以采用。
如果我们将地方图形作为输入而不仅仅是坐标 - 我们可以用像MCL这样的图聚类算法替换k-means。
答案 2 :(得分:2)
事实上,正如德米特里所提到的,这是一个多旅行推销员问题的案例。 由于NP很难自然,采访者正在寻找你建议一个heursitic优化算法。
我认为在这种情况下的关键是他们正在寻找能够实时更新目的地数量和位置的算法。蚁群优化(粒子群优化的一种形式)实际上最初是针对旅行商问题制定的,参见论文和维基百科:
https://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms
“M.Dorigo,V。Maniezzo,et A. Colorni,Ant系统:由一群合作代理人进行的优化,IEEE系统,人与控制论交流 - B部分,第26卷,第1册,第29页-41,1996。“
这已经被推广到多个旅行销售员的问题,例如参见本文(开源),其中有一些很好的工作:
在采访的情况下,我会详细说明其优点是:1。是一种有效的启发式解决方案; 2.能够实时更新图表中的两个变化; 3.对于奖励积分,我提到,一旦获得了 in silico 的合理有效的解决方案,驱动程序本身可以以略微概率的方式分配路线,随后可以执行由实际数据驱动的优化。 / p>
缺点是,与德米特里建议的首先减少搜索空间的问题相比,可能需要相当大量的处理能力。其次,如果他们想要你实际制定一个alogirthm,这在面试的空间里可能会非常具有挑战性。
有趣的问题:)
答案 3 :(得分:0)
我'我不是专家,但你不能只计算原点和所有其他点之间的距离并找到最近的点,然后重复该点的过程直到你覆盖了每一点?