TSP的聚类算法

时间:2012-12-14 05:10:03

标签: c++ algorithm visual-c++

我正在尝试用大约10,000个城市解决一个非常大的TSP。为了并行化我的任务,我想将这些城市划分为多个群集,并为每个群集解决TSP问题。

我想要一种方法,我可以将我的城市分成几组(根据城市密度/该群组中每个城市之间的距离)。

有没有人知道这样做有效的命令?

2 个答案:

答案 0 :(得分:5)

有一个简单的近似算法,它承诺解决方案最多比最优解决方案差2倍(至少在欧几里得指标中,如果我没记错的话)。 算法是:获得最小的生成树。使用树木边缘旅行。

我正在研究更好的近似算法,而不是自己发明一种算法。

要分离到群集,如果你想这样做,那就是K-means和其他算法(在同一篇文章中)

答案 1 :(得分:0)

有几种基于密度的聚类算法只是您正在寻找的工具,无论如何都要将点分离成簇。

DBSCAN是其他人派生的主要人物。 OPTICS是DBSCAN的扩展,它不会产生聚类本身,但会绘制一个可以检查以提取聚类的点图(算法的另一部分也会自动提取聚类。)DBSCAN更简单,OPTICS更多灵活。使用适当的索引结构(如R-tree),这两种方法都会变得更好。工具包中有实现,如ELKI,scikit和WEKA。

(并且,正如j_random_hacker所说,通过这种方式无法保证TSP的全局最优性)