在較早的帖子,我制定了創建橫跨美國所有主要高速公路的公路旅行地圖的計劃。 我討論瞭如何設置網絡以及用於查找路徑的算法。 在這篇文章中,我將向您展示我找到的最終路徑以及我如何縮小我的終極公路旅行。
在我第一次運行搜索算法之前,我快速總結了我的網絡,看看是否有任何額外的約束可以添加來幫助找到路徑。 原來,有幾個:
- Hwy 3 僅與另外兩條高速公路相交:Hwy 2 和 Hwy 4。 這意味著序列 2-3-4 或 4-3-2 將是路徑的固定部分。
- Hwy 48 也只與另外兩條高速公路相交:Hwy 33 和 Hwy 11。 這意味著序列 33-48-11 或 11-48-33 將是路徑的固定部分。
- 57 號高速公路在技術上只與另一條高速公路相連:83 號高速公路。 它的終點在墨西哥邊境和通往聖安東尼奧的 I-35。 然而,它離 90 號高速公路很近,所以很想讓它連接到那個高速公路。 但是,規則就是規則,對吧? … 說,是不是約翰·薩爾在那邊?! 對,在那邊!... 它不是?... 你確定?... 伙計,我可以發誓就是他。 無論如何,正如我所說,Hwy 57 僅連接到 Hwys 83 和 90,因此這意味著序列 83-57-90 或 90-57-83 將是路徑的固定部分。
- 最後,Hwy 46 只連接另外兩條高速公路:Hwy 1 和 Hwy 9。 然而,這是一個有趣的案例,因為這“兩個”交叉點實際上只是一個交叉點。 你看,這個交叉口的位置(新澤西州帕利塞德公園),1 號高速公路和 9 號高速公路同時運行。 所以這意味著 1-46、9-46、46-9 或 46-1 中的任何一個都將是路徑上的固定點。 此外,這也意味著該路徑將以 46 號公路開始或結束。
第一輪:搜索!
在仔細地將這些約束放入我的算法之後,我決定從 Hwy 46 開始路徑並運行算法。 有幾條高速公路被遺漏了,所以我使用了填補空白方法的方法 1 將它們重新安裝回去(“移植和重試”方法)。 重試三遍後……成功!! 圖 1 顯示了第一次嘗試的原始輸出。
Figure 1: Raw output of first attemptFigure 1: Raw output of first attemptFigure 1: Raw output of first attemptFigure 1: Raw output of first attempt圖 1:第一次嘗試的原始輸出這對我的口味來說有點太笨重了,所以我進去了,在谷歌地圖的一些友好幫助下,用額外的點填充了一些線,以增加更多的曲率並更接近實際路線。 我還在我的數據中添加了一個標記類型列,我可以用它來識別我路徑上的主要城市和地標。 為了避免過多的標記使圖表擁擠,我複制了緯度列,刪除了該列中與主要城市或地標無關的值,然後使這些點使用該列作為其“Y 軸”(您可以通過選擇相應組下的變量箭頭來執行此操作JMP圖形生成器)。 順便說一句,我在這裡使用的背景地圖是美國各州強加的街道地圖視圖(邊界線設置為比默認值略深的灰色)。
經過這一點整理後,我得到了圖 2 所示的路徑。
Figure 2: Cleaned version of first attemptFigure 2: Cleaned version of first attemptFigure 2: Cleaned version of first attemptFigure 2: Cleaned version of first attempt圖 2:第一次嘗試的清理版本
我可以想像您對這張地圖的一些反應如下:
- 啊啊啊!! 那是什麼?! 太可怕了!! 看起來有人給了一個 2 歲的孩子一個很好的小費標記和一張美國地圖供其繪製。
- 所以我可以弄清楚你從哪裡開始和在哪裡結束,但你到底是怎麼到達那裡的? 我認為佐治亞州亞特蘭大的意大利面十字路口很糟糕……
- 嘿,你完全錯過了我的狀態! (來自加利福尼亞州、亞利桑那州、羅德島州和緬因州的居民)。
- 加拿大之行是怎麼回事? (這個很簡單。 有趣的事實:Hwy 2 在設計上分為東部和西部! 要穿越這一切,需要繞道進入加拿大。 這裡沒有投訴!)。
好的,好的,所以我承認第一次嘗試有很多問題。 對我來說最值得注意的是它完全錯過了幾個州,這肯定不適用於全國各地的公路旅行(對不起,阿拉斯加和夏威夷;我希望你能理解)。 那麼為什麼這些州被排除在外呢? 好吧,為了回答這個問題,我首先做了我應該做的事情:繪製網絡!
圖 3 顯示了我按照上一篇文章所述編譯的高速公路網絡。
Figure 3: The highway intersection network visualizedFigure 3: The highway intersection network visualizedFigure 3: The highway intersection network visualizedFigure 3: The highway intersection network visualized圖 3:可視化的高速公路交叉口網絡
從這個圖中,我們可以清楚地看到為什麼錯過了這些狀態。
- 加利福尼亞沒有十字路口,只有結束或開始(那裡有一個深刻的聲明)。
- 緬因州只有一個十字路口,恰好位於霍爾頓的 1 號和 2 號高速公路之間。 這個交叉點很容易在路徑搜索中被忽略。
- 亞利桑那州只有兩個十字路口; 60 號和 95 號高速公路(左)和 60 號和 70 號高速公路(右)。 與上一點的推理相同。
- 羅德島只有一個十字路口:Hwys 6 和 44。
第二輪:萬眾期待的續集!
掌握了從圖 3 中收集到的信息後,是時候添加更多約束以確保每個狀態都被訪問且充分訪問。
- 為了確保參觀加州,我決定從 101 號高速公路開始,這條路從洛杉磯開始,幾乎沿著該州的整個海岸延伸。 這條路仍然需要以 46 號高速公路結束。
- Hwy 101 之後的下一條高速公路有四種連接方式。 我最初選擇從 Hwy 26 開始,因為這個選項會帶您穿越波特蘭和胡德山。
- 我將 4-3-2 固定點擴展到現在包括 Hwy 1。 這迫使緬因州成為路徑的一部分,儘管它不再允許在 2 號高速公路上延長旅行(對不起,加拿大)。
- 我在路徑中添加了一個 60-70 和 93-95 的固定點,由於算法的性質,這最終將導致鏈 93-95-60-70 或反之亦然成為路徑的一部分。 這迫使亞利桑那州成為這條道路的一部分,並讓拉斯維加斯也成為其中的一部分。 別客氣。
- 我還決定將 52 號高速公路添加到 83-57-90 鏈中,因為 52 號高速公路和 83 號高速公路在北達科他州邁諾特相交。 這使得北達科他州的覆蓋範圍更大。 所有州都應該分享愛。
添加了這些新約束後,我重新運行了算法,只剩下一條高速公路。 所以我使用填充間隙方法的方法 2 將其重新添加(“嘗試每個選項”方法)。 經過一些清理後,得到了圖 4 所示的地圖。
Figure 4: The second attempt at a road tripFigure 4: The second attempt at a road tripFigure 4: The second attempt at a road tripFigure 4: The second attempt at a road trip圖 4:公路旅行的第二次嘗試好吧,至少現在每個州都有一些報導,儘管它仍然有點混亂。 這次旅行我仍然不太熱衷的一件事是懷俄明州的環路。 事實證明,Hwys 87 和 85 與從丹佛下來的 I-25 幾乎同時運行,這就是為什麼它們會出現在這裡的原因。 此外,看起來華盛頓州幾乎沒有任何報導,佛蒙特州也是如此。 因此,我添加了更多約束(包括切換到 Hwy 101 – Hwy 12 起點)並得到圖 5 中所示的路徑。
Figure 5: Yet another attempt at a road tripFigure 5: Yet another attempt at a road tripFigure 5: Yet another attempt at a road tripFigure 5: Yet another attempt at a road trip圖 5:公路旅行的又一次嘗試現在看起來好多了。 在我看來,與路徑的某些部分仍然有很多重疊,但沒有第 2 輪版本那麼糟糕。
因此,我似乎能夠通過最後兩條路徑解決“缺失狀態”問題。 但是,佈局中仍然存在相當多的瘋狂。 感覺這篇文章已經完成了,所以在下一篇文章中,我將討論我所做的一些調整,以嘗試進一步清理路徑並展示我的最終路徑。
我有我做到的方式......雖然我可以保證這不是很容易。 本質上,當我填寫一些路徑時,我使用谷歌地圖計算了駕駛時間和距離。 我還有另外兩列可以跟踪累積時間和距離。 這是相當辛苦的,因為我必須確保這條路線沿著高速公路行駛,當它沿著州際公路行駛時變得更加困難,因為谷歌一直堅持走那條州際公路。 最後,我確實計算了第 2 輪地圖的總距離,並在第 3 輪地圖上接近,它們都在 36,000 英里左右(大約 650 小時的駕駛時間)。
我想你可以通過取停靠點之間的歐幾里得(如烏鴉飛行)距離來近似總距離。 你顯然會錯過某些道路的一些細節,但我相信它足夠接近實際使用。 使用 SAS 有很多方法可以做到這一點,但我還不確定如何在 JMP 中做到這一點。
不錯的工作! 我很好奇各種路線的總里程是多少。 你有一個簡單的方法來計算嗎?