這一段只是一個介紹。如果你想跳過它,那就做吧。 ;-) 我實施了類似的交通堵塞方法,但它不是一個實時系統。解決方案每X分鐘運行一次,這絕對沒問題。 在實際的optaPlanner計算開始之前,這給了我預先計算完整道路網絡的方式和路線的好處。 這爲optaPlanner的真實計算節省了時間。網絡由頂點和圓弧組成。對於每個弧線你都會有一個重量。
這裏爲你開始真正的交易。 我們假設您爲所有地方的預先計算步驟以及如何實現Dijkstra
或A-Star
算法實施算法。這些尋路算法選擇具有最低「旅行」成本的弧線。對於將被阻擋的每條弧線/道路,我們假設距離爲DOUBLE.MAX_VALUE
。這個值可以被解釋爲「不可驅動」或者徹底地說:在當前求解過程中,兩個頂點之間的連接甚至不存在。所以尋找算法的方法將簡單地跳過這條路。對於每條可駕駛的道路,我們都會計算實際成本,例如距離或採取近似的經驗。
的optaplanner過程本身只是使用預先計算的查找方式機構,例如比較從地點A到地點B的計算距離。
設置distance
變量爲DOUBLE.MAX_VALUE
您可以在基於用戶的信息,其他提供者的信息(如Google或基於管理員的規則)之間做出決定。由於我的經驗與基於用戶的內容和基於管理的操作一致,我可以推薦兩種方式。
讓我們討論了基於用戶行爲:用戶可以擁有一組相同的GUI操作作爲管理員的檢舉的方式「卡住」。對於下一個optaPlanner迭代,將涉及該標誌。如果你有你的用戶的GPS數據,你可以得到近似的速度。對於GPS測量的每個intervall,您都可以計算出該速度。如果速度在道路上(不是十字路口),並且低於規定的最低速度(假設爲1mph或2kmh),那麼您可以通過彈出式窗口詢問用戶是否出現交通堵塞問題,或者自動阻止該道路而不詢問用戶。如果你選擇了彈出式對話框,那麼很多不同的用戶必須在定義的時隙內投票「是」,例如,半個小時,然後道路被阻擋。當許多用戶再次開車行駛併發送該道路的GPS座標時,您可以解決交通堵塞問題。 自動方法的主要優點是,您將擁有低錯誤率的基於系統的方法。
如果您通過管理員採取手動方式,那麼您必須照顧實施GUI以顯示道路並啓用/禁用道路的阻止屬性。
感謝您分享您對車輛路徑問題的交通擁堵的想法和經驗。我仍然困惑的一件事是,交通擁堵數據的最佳來源是什麼?目前,我讓我的用戶自己定義了它,但這種方法實際上有點奇怪,並不是很好。 –
添加了關於添加/刪除阻塞道路屬性的不同接近的信息。 – mchlfchr