运筹优化问题
经典运筹优化问题
先考虑容易理解的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问题