使用自动吸尘器清洁地板上某些斑点的算法?

时间:2011-10-28 01:51:51

标签: java algorithm graph

请随意重命名问题......

问题在于:

我在地板上有一定数量的'n'自动吸尘器,上面有一些'k'个脏点。将真空吸尘器分配到脏点以便以最有效的方式清洁地板的最佳方法是什么?

详细说明:

  • 地板由未加权的图表表示,其中随机放置n / k
  • 最多可以将一个真空吸尘器分配到脏点
  • 忽略两个吸尘器可能相互撞击的可能性
  • 清洁现场的时间无关紧要。只有它们之间的距离
  • 请记住,k可能大于n

这有什么“问题”?

您将如何为其实施解决方案?

我考虑计算所有可能的对之间的距离('n'*'k'),按升序排序,并匹配真空吸尘器和脏点,确保不要将两个清洁剂送到同一个地方。这可能效率不高,可能无法始终找到最佳解决方案..

谢谢!

2 个答案:

答案 0 :(得分:2)

这看起来像travelling salesman问题。但我确信有更快的方法可以使结果接近最佳解决方案。

希望这能让你开始搜索。

答案 1 :(得分:1)

该问题在文献中称为多旅行商问题(MTSP)。

TSP 是一个难以解决的问题,实际上只能为少数城市(< ~20)找到强力解决方案。为了找到一个次优的解决方案,已经开发了许多启发式方法:你可以在this paper找到一个有趣的幸存者。总的来说,我找到一个很好的解决方案,应用 最近邻居启发式 ,然后进行 k-opt 优化 爬山 随机重启

我强烈建议您将TSP作为算法的起点(k = 1),这只是您稍后将在MTSP解决方案中使用的砖块,并且您将有机会在启发式方法。此外,一旦你理解了这个理论,实施只需要一个晚上(可能在你身边喝一杯咖啡)。

多个旅行商问题是一个非常具有挑战性的问题,但您可以应用相同的启发式方法。基本上,您需要找到一个初始解决方案,在其中为每个销售人员分配多个城市(请参阅后面的可能最近邻居指标),而不是每个销售人员可以计算TSP的启发式解决方案

爬山方法可以在销售人员和重新计算TSP之间交换城市。这种方法会引导您到很多local minima,因此我建议您使用simulated annealing algorithm。基本上,你在算法发展过程中以较低的概率交换城市。

MTSP的初始解决方案 看看这个一维的例子(S为销售员和C城市)

  • S0 = 3
  • S1 = 5
  • C0 = 2.5
  • C1 = 1.5
  • C2 = 3.6
  • C3 = 8

只需实施贪婪算法(使用带队列的时间轴)

  1. 时间0.5:S0 - > C0
  2. 时间1.4:S1 - > C2
  3. 时间1.5:S0 - > C1
  4. 时间5.8:S1 - > C3
  5. 初始分区:S0:{C0,C1} - S0:{C2,C3}

    您还可以阅读本文并向后查看参考书目

    http://www.worldacademicunion.com/journal/1749-3889-3897IJNS/IJNSVol09No2Paper06.pdf