使用TSPLIB Data Java解决TSP问题

时间:2014-01-27 04:03:10

标签: java optimization traveling-salesman virtual-tour

基本上我从TSPLIB http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/tsp/获得了一些对称TSP数据然后我尝试通过首先聚类城市,为每个聚类构建子树然后连接聚类来构建路径。但是我得到的完整巡回赛的结果与最佳值相比非常低。这让我相信我做错了什么但完全超出了我的想法,我不知道为什么会这样。

这是数据文件'Burma14':

1  16.47       96.10
2  16.47       94.44
3  20.09       92.54
4  22.39       93.37
5  25.23       97.24
6  22.00       96.05
7  20.47       97.02
8  17.20       96.29
9  16.30       97.38
10  14.05       98.12
11  16.53       97.38
12  21.52       95.59
13  19.41       97.13
14  20.09       94.55

我从文件中读取这些数据,并为每个点生成一个城市对象。

然后我制作个人。这些基本上是从可用城市随机创建的子路径。两个城市之间的个人旅行,例如City1 - >城2。

然后我构建路径,这基本上是TSP的解决方案。

首先,生成集群如下:

1 cluster cities [City_3, City_4]
2 cluster cities [City_1, City_8, City_9, City_11, City_2, City_10]
3 cluster cities [City_5, City_6, City_12]
4 cluster cities [City_7, City_13, City_14]

然后按如下方式为每个群集创建小计:

SubTour: | [[City_4, City_3]] |
Cost: 2.445178930058085

SubTour: | [[City_10, City_9], [City_9, City_11], [City_11, City_8], [City_8, City_1], [City_1, City_2]] |
Cost: 6.29233886113867

SubTour: | [[City_12, City_6], [City_6, City_5]] |
Cost: 4.107068449867602

SubTour: | [[City_14, City_7], [City_7, City_13]] |
Cost: 3.5647520864865525

然后将这些小计连接起来形成一个完整的游览,如下所示:

Complete Tour: [| [[City_14, City_7], [City_7, City_13]] |, | [[City_12, City_6],    [City_6, City_5]] |, | [[City_4, City_3]] |, | [[City_2, City_1], [City_1, City_8], [City_8, City_11], [City_11, City_9], [City_9, City_10]] |]
Complete Tour Cost: 34.92630477283413

这就是我计算欧几里德距离的方法:

public static double calculateDistance(double x1, double y1, double x2, double y2){
    double xDistance = Math.abs(x1 - x2);
    double yDistance = Math.abs(y1 - y2);
    double distance = Math.sqrt( (xDistance*xDistance) + (yDistance*yDistance) );

    return distance;
}

我真的无法理解为什么我的最优成本是34.92630477283413但是这个网站http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/STSP.html对于burma14的最优成本是3323.我已经尝试了ulysses16数据集(来自某个网​​站)但我仍然遇到同样的问题。我非常感谢任何指导方面的帮助。

谢谢。

0 个答案:

没有答案