遺傳算法可視化項目(插曲):關於距離的計算

今天暫時先不講遺傳算法,我要解決的是TSP問題,具體什麼TSP問題以前文章裏講過了,你們能夠點一下歷史消息或者這裏:html

遺傳算法可視化項目(1):概述
ios

遺傳算法可視化項目(2):獲取信息
git

遺傳算法可視化項目(3):建立圖的數據結構
github

TSP問題裏面除了算法還有一個重要的東西,就是距離,通常狀況下計算兩點之間距離直接用公式:√(Δx²+Δy²),但是我以前爬到的數據是經緯度,兩地距離沒有這麼簡單,由於畢竟是球面上兩點的距離,不是平面,這裏我不用網上的那個推導出來的公式,我一步步推導,首先以地球球心爲原點,赤道平面爲xOy平面,創建xyz三維座標系,我在這裏就默認東經是[0°,180°],西經是[-180°,0°](反過來也沒事),北緯[0°,90°],南緯[-90°,0°](反過來沒問題),假設第一個點經緯度是(α1,β1),第二個點經緯度是(α2,β2)(α1,α2對應經度值;β1,β2對應緯度值)。很明顯第一個點轉換成爲三維座標是(cosα1,sinα1,sinβ1),第二個點轉換成爲三維座標也就是(cosα2,sinα2,sinβ2),點能夠當作是向量,直接利用:算法

cosθ=兩向量數量積/兩向量模長的乘積微信

這個公式求出兩向量夾角的餘弦值cosθ,而後再利用反餘弦函數arccos求出θ,不須要進行平移啥的,arccos函數值域是[0,π],向量夾角也是這個範圍,最後利用公式L=|θ|*r(θ必定要是弧度制!r是地球平均半徑,不平均還真的有點難處理)求得弧長,也就是所謂的球面上兩點的距離!數據結構

接下來講一下昨天文章中遺留下來的MAX取多大的值的問題,設置成10的話上面那個公式徹底不能用,最小值應該比地球平均半徑*π(也就是半圈)要大,這個值很明顯比10大不少,但爲何我要用10是由於我感受就海南島那一小塊地方,球面能夠近似的當作平面(若是不能當作平面用上面那個方法),而後就是那個距離公式(√(Δx²+Δy²)),而後我編寫程序算了一下經緯度的差,代碼和運行結果以下:機器學習

很明顯,令Δx=經度差,Δy=緯度差,代入√(Δx²+Δy²)這個距離公式,結果小於10,因此我能夠用10表示不可達!函數

無論用什麼方法,明天遺傳算法你們也就只是距離計算方式不一樣,但最後得出來的最短路徑都差很少那樣!文章最後附上項目地址:https://github.com/3480430977/DataVisualizationOfGA學習

最後歡迎你們掃碼關注

本文分享自微信公衆號 - Python機器學習算法說書人(Python-ML-Algorithm)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索