C++ TSP问题的聚类算法
我正试图解决一个有大约10000个城市的非常大的TSP问题。为了并行化我的任务,我想将这些城市划分为集群,并解决每个集群的TSP问题 我希望有一种方法可以将我的城市划分为集群(基于城市密度/集群中每个城市之间的距离)C++ TSP问题的聚类算法,c++,algorithm,visual-c++,C++,Algorithm,Visual C++,我正试图解决一个有大约10000个城市的非常大的TSP问题。为了并行化我的任务,我想将这些城市划分为集群,并解决每个集群的TSP问题 我希望有一种方法可以将我的城市划分为集群(基于城市密度/集群中每个城市之间的距离) 有人知道这样做的有效顺序吗?有一种简单的近似算法,它保证解的最差程度是最优解的2倍(如果我没记错的话,至少是欧几里德度量)。 算法是:得到一个最小生成树。使用树的边缘进行移动 我会研究更好的近似算法,而不是自己发明 要分离到集群,如果你想这样做,有一些算法和其他算法(在同一篇文章中
有人知道这样做的有效顺序吗?有一种简单的近似算法,它保证解的最差程度是最优解的2倍(如果我没记错的话,至少是欧几里德度量)。 算法是:得到一个最小生成树。使用树的边缘进行移动 我会研究更好的近似算法,而不是自己发明
要分离到集群,如果你想这样做,有一些算法和其他算法(在同一篇文章中)有一个简单的近似算法,它保证解决方案最多比最佳解决方案差2倍(至少在欧几里德度量中,如果我记得正确的话)。 算法是:得到一个最小生成树。使用树的边缘进行移动 我会研究更好的近似算法,而不是自己发明
要分离到簇,如果你想这样做,有一些和其他算法(在同一篇文章中)有几种基于密度的聚类算法,它们正是你要寻找的工具,用于将点分离到簇中 DBSCAN是派生其他数据库的主要数据库。光学是DBSCAN的一个扩展,它本身不产生群集,但绘制一个点图,您可以通过检查来提取群集(算法的另一部分也可以自动提取群集)。DBSCAN更简单,光学更灵活。使用适当的索引结构(如R-tree),这两种方法都会变得更好。工具包中有一些实现,如ELKI、scikit和WEKA
(而且,正如j_random_hacker所说,这样做并不能保证TSP的全局最优)有几种基于密度的聚类算法,它们正是您要寻找的工具,用于将点分割成簇 DBSCAN是派生其他数据库的主要数据库。光学是DBSCAN的一个扩展,它本身不产生群集,但绘制一个点图,您可以通过检查来提取群集(算法的另一部分也可以自动提取群集)。DBSCAN更简单,光学更灵活。使用适当的索引结构(如R-tree),这两种方法都会变得更好。工具包中有一些实现,如ELKI、scikit和WEKA
(正如j_random_hacker所说,这样做并不能保证TSP的全局最优)这是一个非常忙碌的推销员。祝你好运。你是否意识到,仅使用每个集群的TSP解决方案无法以最佳方式解决TSP问题?所有顶点上的最优TSP可能会访问簇1中的一些顶点,然后访问簇2中的一些顶点,然后再次访问簇1中的更多顶点,依此类推。即使对于每个簇中的每一对点,找到连接该对点并访问簇中所有顶点的最短路径,通过将这些路径缝合在一起可以构建的最佳TSP也可能远远不是最优的。这是一个非常忙碌的推销员。祝你好运。你是否意识到,仅使用每个集群的TSP解决方案无法以最佳方式解决TSP问题?所有顶点上的最优TSP可能会访问簇1中的一些顶点,然后访问簇2中的一些顶点,然后再次访问簇1中的更多顶点,依此类推。即使对于每个簇中的每一对点,找到连接该对点并访问簇中所有顶点的最短路径,通过将这些路径缝合在一起可以构建的最佳TSP也可能远远不是最优的。