經典運籌優化問題
先考慮容易理解的0/1背包問題、TSP問題、VRP問題等。
1.TSP問題
1.1數學建模
主要是針對避免獨立環的出現,給出了數學模型,可以讓gurobi/cplex等精確求解器求解
代碼可參考我的git
1.2 基礎算法
在分類上,根據我個人理解可以分類為:
還是看這個吧遺傳算法,模擬退火算法,粒子群算法,神經網絡等智能算法的作用? - 大洪的家園的回答 - 知乎
(1)基礎搜索算法(遍歷解空間)
- 深度優先搜索(加上剪枝策略就是回溯法)
- 廣度優先搜索(加上剪枝策略就是分支限界法,上下界的確定可以參考
- 動態規划
可以參考這個作者的系列文章
回溯算法——對解空間(搜索樹)的一種策略搜索(深度優先搜索)
(2)啟發式搜索算法(在遍歷解空間樹時有比較地選擇)
- 貪心策略
- 最近插入策略
- A星算法
(3)啟發式探索算法
這里說明一下這個探索跟上面的搜索,上面的搜索更像是對解空間根據策略進行遍歷,但此處說的探索則是根據某種策略直接對可行解進行修改(這種修改結果得到的不一定是可行解但盡可能地設計可以產生可行解結果的算法),其實也有點像強化學習中的exploration,比較隨機。
- 模擬退火算法 (Simulated Annealing,參考)
- 遺傳算法(Genetic Algorithm,參考1精簡一些,參考2給出了其他的編碼和算子,不同編碼方式及算子還可看TSP的幾種求解方法及其優缺點,代碼參考)
- 蟻群算法 (為TSP而生)
- 禁忌搜索
- 算法
對於SA、GA這些從基礎可行解出發的算法,可以使用一些較快的啟發式算法得到的近似解作為初始解,以此加快收斂。
后面幾個目前還沒看,之后會逐漸更新,同時git上的代碼也會更新
以下為進階TSP解決方案
1.3 混合策略for大規模TSP(Large Scale TSP)
對於大規模的TSP問題(一般城市個數超過100個),上述方法往往由於規模的增大而需要很長的求解時間(SA單次應該不會太長,跟它的探索算法有關),並且這些啟發式算法的結果更難收斂到全局最優,因此考慮使用混合策略。
常見的思路是首先是將城市划分為多個城市群(可使用聚類算法)形成子問題,在城市群內部求回路(足夠小可以用啟發式搜索甚至基礎搜索算法,中等規模可以用啟發式探索算法),各子問題求解完畢用臨近原則確定問題的整體解,再利用局部改進算法對其作進一步加工以得到問題的最終解。
參考文獻<聚類分層+蟻群算法>
1.4 多目標優化
多目標優化問題的算法及其求解 這個暫時還沒有經驗。
1.5 多旅行商問題 mTSP
分為4類 參考 多旅行商問題研究綜述
知網文獻:
多旅行商問題研究綜述
模糊聚類分析應用於炮兵精確打擊效能評估
1.6 其他
matplotlib.animation動態展示效果
2.VRP問題