基本上我使用的是TSPLIB的数据,我有这个规范。计算Java中TSP的地理位置和欧氏距离
这是我的计算出的欧几里德距离(根据上述规格):
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;
}
这是(根据上述规格)我怎样计算出来的所述地理距离:
public static double calculateGeoDistance(double lat1, double lon1, double lat2, double lon2) {
double lat1Rad = coordinates2Radians(lat1);
double lat2Rad = coordinates2Radians(lat2);
double lon1Rad = coordinates2Radians(lon1);
double lon2Rad = coordinates2Radians(lon2);
double R = 6378.388;
double q1 = Math.cos(lon1Rad - lon2Rad);
double q2 = Math.cos(lat1Rad - lat2Rad);
double q3 = Math.cos(lat1Rad + lat2Rad);
double distance = (R * Math.acos(0.5 * ((1.0 + q1) * q2 - (1.0 - q1) * q3)) + 1.0);
return distance;
}
private static double coordinates2Radians(double coordinate) {
double deg = Math.round(coordinate);
double min = coordinate - deg;
double rad = Math.PI * (deg + 5.0 * min/3.0)/180.0;
return rad;
}
但是,这个问题是我得到的结果比TSPLIB最优(这是不可能的!)。我的计算有什么问题吗?我已经尝试使用预定义的数据和距离来计算最佳值,并且我确实得到了最优值,但我不确定为什么这个不起作用。
非常感谢。
a)你指的是“以上规格”? b)为什么距离比TSPLIB实例中的距离更短?我的意思是,那里的距离是沿着可能路线的距离,所以它们明显长于两点之间的地理距离,是不是? –
对不起,这是规范:http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/DOC.PS @DaDaDom – RegUser
因为最佳路径是找到的最短路径 - 我很确定这意味着我有一个错误。我只是不知道如何检查我的计算是否错误..我不知道什么可能是错的@DaDaDom – RegUser