
為何經緯度在求解器中無法運作
經緯度無法直接輸入「旅行銷售員求解器」以取得可靠的地理距離,因為此工具是以平坦座標平面上的直線歐幾里得距離來計算每個路段,而不是以弧度在彎曲的地球上測量。求解器每列接受三項資料——名稱、一個 x 值和一個 y 值——並將這兩個數字視為該平面上的笛卡兒座標。赤道附近的一度緯度大約是 111 公里,但一度經度會隨著靠近兩極而縮小,這兩個數字在反子午線附近都會產生跨越或變形。將原始度數代入距離公式 sqrt((x2−x1)²+(y2−y1)²) 所得到的數字,其意義取決於這些點在地球上的位置,因此路線長度對實際規劃而言就變得毫無意義。求解器不呼叫任何地圖或路徑規劃 API、不傳送任何資料到伺服器,僅對您輸入的數字套用確定性的最近鄰點加上 2-opt 啟發法,因此其安全網完全取決於您選擇餵入的投影方式或座標系統。
旅行銷售員問題是尋找一組點之間最短封閉路線的正式名稱,而旅行銷售員求解器透過最小化連續停靠點之間的直線距離總和(加上返回起點的那段)來達成此目標,採用有界的最近鄰點建構,接著進行確定性的 2-opt 改良。經緯度看起來就像兩個數字,所以很自然會想把們貼到 x 和 y 欄位,但底層的數學假設兩個座標軸共用同一個線性單位。倫敦附近的一度經度涵蓋大約 70 公里的地面距離;同一度數在基多附近則涵蓋大約 111 公里。因此,以度數計算的兩座城市之間直線距離,有些方向會小於實際距離,有些方向則會大於實際距離,誤差會隨著路線變長或跨越經度刻度差異極大的緯度時累積放大。
同樣的不匹配也會在反子午線處失效。如果某個停靠點位於經度 +179,而下一個位於經度 −179,單純的歐幾里得計算會讓路線繞行地球一大圈——跨越換日線再繞回來——而不是跨越太平洋的短距離。真實的派遣工具會使用測地線函式庫或已經處理過這個問題的路徑矩陣;本頁面的啟發法既不知道也無法補償這種情況。
求解器實際上將座標視為什麼
求解器每行接受一個地點,格式為名稱、x、y,並假設 x 和 y 是共用線性軸上的數字。有效的輸入包括本地測量圖上的公尺、版面格線中的像素、無單位的課堂座標,以及來自平面地圖的投影座標。輸入受到三項條件限制:3 到 50 組不同的座標對、不能有重複座標,以及名稱中不能包含逗號。拒絕重複座標是因為兩個位於完全相同位置但名稱不同的點會讓路線顯示變得模糊,而 50 點上限則是為了讓二次方複雜度的 2-opt 階段在一般瀏覽器上仍能保持回應速度。
任意兩個連續停靠點之間的距離使用 sqrt((x2−x1)²+(y2−y1)²) 計算,這是平面上教科書定義的歐幾里得長度。例如,以 (0,0) 和 (3,4) 作為兩個停靠點,路段長度為 sqrt((3−0)²+(4−0)²) = sqrt(9+16) = sqrt(25) = 5,單位取決於兩個座標軸共用的單位。路線從第一列開始,在末端返回該點,且每個其他點恰好造訪一次。第一列被固定為起點,以便使用相同輸入的重複執行能產生相同結果,而在最近鄰點步驟出現精確平手時,則維持原始輸入順序以保持建構的穩定性。
將座標輸入旅行銷售員求解器
如果您的座標已經位於平坦平面上,工作流程很簡短,您唯一需要做的決定就是命名、排序以及起始列。
- 在瀏覽器中開啟旅行銷售員求解器。
- 將每個停靠點單獨列在一行,格式為名稱、x、y,同一行內 x 和 y 以逗號分隔,各行之間以換行符分隔。
- 將您想要作為起點的位置放在第一列——該列被固定為起點,也是路線末端返回的位置。
- 確認輸入至少包含 3 組、最多 50 組不同的座標對,沒有重複,且名稱中不含逗號。
- 建構近似路線,並在結果中讀取初始最近鄰點距離以及經 2-opt 改良後的距離。
- 在複製路線之前,先檢查封閉路線和列出的假設——只有在直線歐幾里得距離確實符合您任務需求時,才複製名稱序列。
- 如果解的品質很重要,請比較幾種不同的起點順序;不同的起點會落入不同的局部極小值,而固定起點的行為讓每次比較都能重現。
當您需要真實地理時,將經緯度轉換為本地平面
如果您的目標確實是地理路線——配送路線、銷售區域、校園巡檢——最乾淨的變通方法是在貼入之前先投影您的座標。本地投影將一小塊地球視為平面,因此歐幾里得距離能在城市範圍內與實際地面距離吻合到幾公分以內,並在小區域範圍內吻合到幾公尺以內。UTM、State Plane,或是以您路線邊界框為中心的簡單等距矩形投影,都能讓求解器的直線數學保持誠實。路線建構完成後,您可以將名稱無損地對應回原始的經緯度點。
如果區域太大而無法展平——橫越大陸的旅程、跨越反子午線的任何路線、或緯度跨度超過數百公里的情況——請跳過投影,改用具備地球弧度知識的路徑規劃服務。經緯度是座標系統,不是距離系統,而求解器的輸入需要的是後者。
此啟發法保證與不保證的事項
求解器以三個可見的階段執行。第一,它將第一列輸入固定為起點。第二,它從目前位置以歐幾里得距離走到最近的未造訪點,重複此過程直到每個點都被造訪一次,且路線閉合回到起點——這就是最近鄰點建構,也是結果中回報的起始距離。第三,2-opt 掃描封閉迴圈,尋找兩條邊,若將其之間的路段反轉可以嚴格縮短總長,則套用第一個這類改良,然後重新開始掃描,直到找不到進一步改良或達到防護上限。回報的「passes」計數代表成功交換後掃描必須重新啟動的次數。
該輸出伴隨著兩項保證和一項注意事項。保證在於 2-opt 絕不會讓初始路線變長,因為每次交換都必須在總長嚴格縮短後才會被套用。八個小型幾何黃金案例——三角形、正方形、長方形、共線點,以及一個中心點——驗證精確的周長距離、閉合性、每個地點造訪一次,以及 2-opt 絕不會拉長初始路線。注意事項在於,結果在兩邊交換下是局部最優,但非全域最短,因為旅行銷售員問題在計算上很困難,且精確解法無法擴展到任意輸入。根據Google OR-Tools 的路徑規劃文件,實用的求解器可能會返回非最優結果,而本頁面刻意使用有界且可檢視的啟發法,而不是聲稱能為任意輸入提供精確解。不同的起點或建構規則可能落入另一個局部極小值,這就是為何此工具將第一列固定為起點,以便重複執行具有確定性。
何時應改用具備地圖資料的路徑規劃服務
求解器忽略道路、單行道、交通、行程時間、障礙物、預約、車輛容量以及多位駕駛,因為這些條件約束都沒有編碼在一份平坦的 x 和 y 值清單中。兩點之間的直線段並不代表車輛能以該方式行駛;它只是幾何距離。對於派遣、導航、成本承諾,或安全關鍵的路徑規劃,請使用具備真實路網資料的經過驗證的求解器,並獨立驗證路線,而不是將此局部近似視為營運上的權威依據。當您的目標是最小化時間而非距離、您擁有具容量限制的車隊,或需要遵守客戶時間窗口時,同樣適用上述原則。
| 條件約束或功能 | 旅行銷售員求解器 | 具備地圖資料的路徑規劃服務 |
|---|---|---|
| 距離度量 | 平坦 x、y 上的直線歐幾里得距離 | 路網距離或經緯度上的測地線距離 |
| 經緯度輸入 | 無法直接處理;需要投影 | 原生支援 |
| 道路與單行道 | 忽略 | 遵守 |
| 交通與行程時間 | 忽略 | 遵守 |
| 反子午線跨越 | 失真或失敗 | 可處理 |
| 車輛容量、時間窗口、多位駕駛 | 未建模 | 已建模 |
| 網路呼叫或資料上傳 | 無——在本機執行 | 有——需要以取得真實路網資料 |
| 解的保證 | 2-opt 下的局部最優,絕不長於起始值 | 取決於服務;仍不一定全域最優 |
若要學習 TSP 啟發法本身、在本地圖面上探索空間排序、規劃已知座標系統上的近似巡檢序列,或建立可重現的測試資料,旅行銷售員求解器就是合適的工具。貼上您投影後的座標,將輸出視為建設性的近似解,如果解的品質很重要,請比較幾種不同的起點順序。
若想進一步了解此啟發法的背景——包括最近鄰點與 2-opt 如何融入更廣泛的 TSP 方法家族——請參閱旅行銷售員問題:最佳解路線建構器。
如果您正在權衡選項,24 點求解器酷數學遊戲:找出所有答案對此有詳細說明。