專案成果與過程分享:從圖論導航到 AI 風險預測的多模態路徑系統
這個專案是怎麼開始的
專案一開始時,其實只是想做個結合Youbike的路線規劃工具,但到後來才發現,真正的問題不在於怎麼畫路線,而是路線到底能不能自己算。如果整個系統都依賴商業地圖 API,很多事情就會變得很難做,比如 YouBike 站點到底值不值得去、票價和體力要怎麼一起算、使用者偏好又要怎麼真的影響路徑結果。
所以這個專案最後走的是一條比較硬派的路:前端保留地圖的呈現與互動,後端則自己處理圖論搜尋、票價計算、廣義成本與風險預測。這樣做的好處很直接,系統不只能用,而且每一步都說得清楚、驗證得出來。
我怎麼把資料接起來
真正開始做之後,第一個大工程不是模型,而是資料整合。因為一個能用的導航系統,前提不是演算法多漂亮,而是手上必須有一張夠完整、夠一致的交通路網圖。
這部分我把幾種資料串在一起:
- OSM 路網,當作基礎道路結構
- 台北市捷運、公車、臺鐵與 YouBike 資料,當作多模態運具層
- SQLite,負責保存票價、站點與路線資訊
- 歷史 YouBike 快照,拿來做預測模型與回測驗證
接完之後,整個系統就不再只是地圖上的點和線,而是一張能拿來算路徑的城市路網。
核心運算其實在後端
前端看起來像是一個導航介面,但真正重要的部分其實都在後端。我把它拆成幾個角色來做:
- GraphService 負責載入圖資、找最近節點、跑 A* 路徑搜尋
- FareCalculator 負責捷運、公車、臺鐵和 YouBike 的票價與費率
- CostService 負責把時間、金錢、體力和風險整合成廣義成本
- PredictionService 負責根據歷史供給量預測 YouBike 站點風險
我希望它算出來的不是單純的最短路,而是合理的路。這也是整個專案跟一般導航功能最大的差別。
我做了哪些實際成果
自研圖論引擎
專案最先完成的是圖論搜尋引擎。除了基本道路搜尋之外,我也把捷運、公車、臺鐵和 YouBike 站點一起放進圖裡,讓 A* 不只是找街道,而是可以找一條真正跨運具的完整旅程。
這一段其實踩了不少坑,所以也做了幾個關鍵修正:
- 用 BallTree 加速最近節點搜尋
- 修正 OSM 權重型別不一致的問題
- 修正距離累計錯誤
- 移除重複函式和孤立實例化造成的混亂
這些看起來很像工程瑣事,但實際上會直接影響結果是不是可信。如果底層圖資有問題,後面所有分析都會跟著偏掉。
多目標成本函數
傳統導航通常只看距離或時間,但我想做的是把問題拉回到真實使用情境,所以成本函數同時考慮了四件事:
- 行走時間
- 金錢成本
- 體力消耗
- 站點風險
這樣一來,系統就能依照不同需求輸出不同路線。趕時間的人和想省錢的人,理論上就應該拿到不同答案,而不是被同一條路徑綁死。
LSTM 風險預測
另一個重點是 YouBike 的最後一哩路問題。因為站點供給量是會變的,所以只靠靜態圖論不夠,我就加了 BiLSTM 預測模型,使用歷史快照、時間特徵和站點供需資訊去預測未來可借車輛數。
這一層的角色不是取代圖論,而是補上圖論看不到的時間變化。簡單說,圖論管空間,LSTM 管時間,兩個放在一起,路徑決策才會更接近真實體驗。
回測驗證
我不想只靠單一案例說這個系統有效,所以後面又做了回測流程,把歷史快照擴充成多批次模擬,然後比較兩種策略:
- Naive Strategy:直接前往最近站點
- AI-Aware Strategy:避開預測供給不足的站點
結果很清楚,AI-Aware 的空站風險明顯比較低,而且不是只有單一時間點有效,在多快照統計下也維持一致優勢。這部分是我覺得最有說服力的地方,因為它不只看起來合理,在真實體驗上也能在數據上看到效果。
現在做到哪裡了
如果把目前的成果整理一下,現在這個專案已經不只是想法,而是一個完整可展示的系統。
工程上,已經完成:
- 台北市完整多模態路網建置
- 自研路徑搜尋與票價計算
- YouBike 歷史資料收集與風險預測
- 前後端整合與多場景測試
研究上,已經完成:
- 可說明的廣義成本模型
- 用 LSTM 補足供給變動的時間序列問題
- 用回測驗證動態避險策略
- 把路徑決策從單一最短路提升成多目標最佳化
開發過程中最花時間的地方
老實說,這個專案最花時間的不是把第一版功能寫出來,而是修那些會讓結果失真的細節。
像是資料庫路徑用相對路徑,啟動位置一變就可能讀錯檔案;權重欄位型別不一致,A* 就可能直接出錯;交通模式切換沒寫好,票價和路段顯示就會亂掉;預測模型如果沒有跟回測串起來,風險降低率就只是數字,沒有說服力。
這些問題最後都不是靠某一個神奇演算法解決的,而是靠資料、工程和驗證一起慢慢收斂。
我現在怎麼看這個系統
如果只用一句話來形容現在的成果,我會說:這已經不是一個單純的地圖導航系統,而是一個能同時考慮空間結構、交通模式、即時供給和風險預測的路徑分析平台。
我覺得它的價值主要有三個:
- 技術上,證明自研圖論和 AI 預測可以放進同一套導航架構
- 研究上,讓多目標成本函數和動態風險評估可以被驗證
- 實務上,提供一個可用的工具,讓使用者在規劃路線時能真正考慮到時間、金錢、體力和風險
接下來我想繼續做的事
這個專案其實還有不少可以繼續優化的地方:
- 增加回測樣本數,讓結果更真實
- 持續優化 YouBike 預測模型和特徵工程
- 研究更細緻的多階段轉乘策略,減少節點吸附造成的偏差
未來應該會給這個系統持續迭代加料,不只是讓它更好用,也讓它在研究上能有更多的洞見。
畢竟某人拿這玩意去投了科展,不繼續玩不行
技術棧
前端
- HTML5 / CSS3 / Vanilla JavaScript
- Google Maps JavaScript API
- HTML Geolocation API
- 透過 Cloudflare R2 / Worker 提供靜態前端與 API 分流
後端
- Python 3.11
- FastAPI
- Uvicorn
- Pydantic
- SQLAlchemy
- httpx
- python-dotenv
- polyline
- NetworkX
- OSMnx
- scikit-learn
- PyTorch
- NumPy
- pandas
資料與演算法
- SQLite
- GraphML 路網資料
- OSM / TDX 資料整合
- A* 圖論搜尋
- BallTree 空間索引
- BiLSTM 供給預測
- 廣義成本函數 / 多目標最佳化
部署與維運
- Docker
- Docker Compose
- Cloudflare Tunnel
- Cloudflare Worker
- Wrangler
- R2
資料管線與自動化
- Python ETL 腳本
- YouBike 歷史快照爬取
- 回測模擬腳本