我需要計劃一次航行,將具有指定起點和指定目的地的海中的n個位置連接到以下約束。
航程必須觸及所有位置。
如果有從A到B的預訂,那麼必須在B之前觸摸a
每個位置的時間花費有所不同(取決於對該位置的預訂)
每個位置都有一個工作窗口。如果船隻在工作窗口之前到達,它必須等待。
注:「最小生成樹」算法可能不會像在每個端口所需的時間取決於以前的路線上(由於工作窗口)
是否有可用於此的任何算法?算法:航行計劃
Q
算法:航行計劃
5
A
回答
4
Ant colony optimization似乎是最知名的解決這個。請注意,這是一個NP problem,實際上甚至是NP完全問題。這意味着驗證解決方案是否「正確」很「容易」,但找到它卻「很難」。找到「最佳」解決方案的唯一途徑是嘗試所有可能的解決方案,比較結果並採取最佳解決方案。當然,如果你想在合理的時間範圍內解決這個問題,這是不可接受的。
蟻羣算法會找到一個很好的解決方案,接近最佳。我說得很接近,因爲AFAIK並不能保證總能找到最好的。可能有更好的解決方案然而,通常沒有必要真正找到可能的最佳解決方案,只需「非常好」的解決方案就可以實現,ACO就是您正在尋找的。它可以在合理的時間間隔內找到解決方案,並且解決方案肯定會有好處。
在你的情況,你需要稍作修改。通常它只會嘗試找到最短的路線,只考慮路徑。在你的情況下,它必須考慮你的工作窗口,預訂和花費在一個位置上的時間。但這些只是「螞蟻如何旅行」的修改,基本算法保持不變,仍然可以工作。
5
2
這是一個旅行商問題的修改增加了工作窗口的限制......這意味着解決這個問題將更難找到比標準旅行商問題。
我已經是體面的工作給予近似解的幾種方法。
我不知道是否適用於您的問題,從我的頭頂,我說這不,但dynamic programming偶爾可用於棘手的問題。
0
在這個問題上有很多工作。它通過不同的名稱
- 旅行推銷員(車輛路線)問題與時間窗口和優先約束。
- 接送問題。
有很多關於這個問題的研究,其中很多都在運籌學研究Journals。這個問題一般來說是NP-Hard,所以對問題的一般準確解決方案與您描述的問題不符,但可能會有針對您的具體問題的好的,準確的或近似的解決方案。最好的算法將是你的數據的函數。
- 你的數據集有多大。如果「n」相對較小(30-100),則可能會有與math programming的確切解決方案。
- 時間窗口和優先約束有多緊密。如果在任何時間窗口訪問的可能位置數量很小,那麼可以使用動態編程等解決方案。
- 如果找不到特殊情況,那麼您可能希望將啓發式構造算法與本地搜索後處理器相結合。一個簡單的方法是所謂的GRASP啓發,在那裏你
- 利用現有建設啓發式,
- 隨機化是使多個運行將會給你多種解決方案,
- 運行隨機版本多次
- 起飛這是最好的解決方案。
相關問題
- 1. 顯示計劃算法
- 2. 計劃課程的算法
- 3. 比賽計劃算法
- 4. 無法計算構建計劃 - Eclipse Maven
- 5. 學生計劃構思:並行計算
- 6. 計劃執行程序的計劃方法只執行一次
- 7. 匹配計劃生成器算法
- 8. Pollard Rho算法的計劃代碼
- 9. 對數時間計劃算法
- 10. 劃分算法
- 11. 劃分算法。
- 12. 計算算法運行時?
- 13. Maven無法計算構建計劃:無法傳輸org.apache.maven.plugins
- 14. 劃分和計算劃分數連續
- 15. 執行計劃
- 16. 規劃算法的
- 17. 如何計算動態規劃(Memoization)算法的大O O
- 18. 卡路里計劃 - Java計算
- 19. 複利計劃將不計算
- 20. 計算信用餘額的計劃
- 21. Excel VBA:計劃單元格計算
- 22. 計算每週輪換計劃
- 23. SQL如何計算NEXT_RUN_DATE作業計劃?
- 24. 計算器的計劃是什麼?
- 25. 計劃高階函數 - GPA計算器
- 26. Maven錯誤:無法計算構建計劃
- 27. 無法計算構建計劃:Plugin org.apache.maven.plugins:maven-resources-plugin:2.6
- 28. 無法使用SpringSource工具套件計算構建計劃
- 29. :無法計算構建計劃:插件org.apache.maven.plugins:maven-resources-plugin:2.6?
- 30. DBMS:關係代數執行計劃成本計算
謝謝。聽起來很有希望。我解決它,看看它是怎麼回事。順便提供任何僞代碼? – 2008-10-29 08:35:50