运筹优化问题

经典运筹优化问题

先考虑容易理解的0/1背包问题、TSP问题、VRP问题等。

1.TSP问题

1.1数学建模

旅行商问题(TSP)的两种模型

主要是针对避免独立环的出现,给出了数学模型,可以让gurobi/cplex等精确求解器求解

代码可参考我的git

1.2 基础算法

TSP的几种求解方法及其优缺点

在分类上,根据我个人理解可以分类为:

还是看这个吧遗传算法,模拟退火算法,粒子群算法,神经网络等智能算法的作用? - 大洪的家园的回答 - 知乎 

(1)基础搜索算法(遍历解空间)

  • 深度优先搜索(加上剪枝策略就是回溯法)
  • 广度优先搜索(加上剪枝策略就是分支限界法,上下界的确定可以参考 
  • 动态规划

可以参考这个作者的系列文章

旅行商(TSP)问题专题——多种方法对比

回溯算法——对解空间(搜索树)的一种策略搜索(深度优先搜索)

分支限界法——对解空间的一种策略搜索(广度优先搜索)

0/1背包问题——动态规划、回溯、分支限界法对比

(2)启发式搜索算法(在遍历解空间树时有比较地选择)

  • 贪心策略
  • 最近插入策略
  • A星算法

(3)启发式探索算法

这里说明一下这个探索跟上面的搜索,上面的搜索更像是对解空间根据策略进行遍历,但此处说的探索则是根据某种策略直接对可行解进行修改(这种修改结果得到的不一定是可行解但尽可能地设计可以产生可行解结果的算法),其实也有点像强化学习中的exploration,比较随机。

对于SA、GA这些从基础可行解出发的算法,可以使用一些较快的启发式算法得到的近似解作为初始解,以此加快收敛。

后面几个目前还没看,之后会逐渐更新,同时git上的代码也会更新

以下为进阶TSP解决方案

1.3 混合策略for大规模TSP(Large Scale TSP)

对于大规模的TSP问题(一般城市个数超过100个),上述方法往往由于规模的增大而需要很长的求解时间(SA单次应该不会太长,跟它的探索算法有关),并且这些启发式算法的结果更难收敛到全局最优,因此考虑使用混合策略。

常见的思路是首先是将城市划分为多个城市群(可使用聚类算法)形成子问题,在城市群内部求回路(足够小可以用启发式搜索甚至基础搜索算法,中等规模可以用启发式探索算法),各子问题求解完毕用临近原则确定问题的整体解,再利用局部改进算法对其作进一步加工以得到问题的最终解。

参考文献<聚类分层+蚁群算法>

大规模旅行商问题解决方案

K_Means for TSP

1.4 多目标优化

多目标优化问题的算法及其求解 这个暂时还没有经验。

Python遗传算法框架使用实例

遗传算法关于多目标优化python

NSG-II详解与实现

gurobi求解介绍(含多目标优化问题)

1.5 多旅行商问题 mTSP

分为4类 参考 多旅行商问题研究综述 

GA算法for tsp & mtsp

知网文献:

多旅行商问题研究综述 

模糊聚类分析应用于炮兵精确打击效能评估

1.6 其他

matplotlib.animation动态展示效果

 

 2.VRP问题

 

posted @ 2019-09-18 15:16  汉尼拔草  阅读(2007)  评论(0编辑  收藏  举报