基本上我使用的是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