愿你搜索到人生的最优解
hello,大家好。各位可点击左下方,访问公众号官方店铺。谨防上当受骗,感谢各位支持!
新来的小伙伴可在公众号后台回复 代码,即可提取一整套高质量智能优化算法的MATLAB代码。
前一段时间看到阿里车辆路径规划算法入围Franz Edelman奖(全球运筹和管理科学界的最高工业应用奖)决赛,于是找资料了解了一下这个VRP算法,今天我们从元启发式算法的角度与各位简单的聊聊为什么菜鸟VRP求解引擎如此强大?
本期推文目录:
01 算法框架
02 丰富算子
01 算法框架
菜鸟仓配智能化算法团队使用自适应大规模邻域(Adaptive Large Neighborhood Search, ALNS)作为VRP引擎的算法框架。
相对于其它算法,ALNS算法的优势包括:
- 算法框架易于拓展,除了求解标准的VRP之外,还能够求解VRPPD,MDVRP等变型问题;
- 相对于普通的Local Search类型的算法,ALNS在每一步搜索过程中能够探索更大的解空间;
- ALNS算法在搜索过程中能够自适应地选择合适的算子,从而对于不同类型的问题数据能够有比较稳定的良好求解结果;
- 通过设计实现不同类型的算子,ALNS可以实现不同的搜索策略,从而便于算法的升级拓展。
何柱、守初、本华,公众号:阿里技术世界冠军之路:菜鸟车辆路径规划求解引擎研发历程
经典的ALNS算法的主流程如下图所示:
图片来源:世界冠军之路:菜鸟车辆路径规划求解引擎研发历程
ALNS算法的步骤为:
(1)使用一定的规则构造一个初始解(即Initial过程);
(2)基于算子的权重,选择此次迭代过程中使用的Ruin算子和Insert算子;
(3)对此次迭代的初始解执行Ruin操作,即将部分已经被车辆服务的客户点删除,使初始解成为一个不可行解;
(4)对步骤3获得的解执行Insert操作,即对于还没有被车辆服务的客户点,将其插入到解中,尽量获得一个可行解;
(5)基于优化目标函数评估步骤4获得的新的解,并根据一定的策略决定是否接受新解;
(6)判断是否达到终止条件。如果是,则终止计算,返回当前找到的最好解;否则,基于此轮计算中算子的表现,更新算子的权重,并返回到步骤2。
何柱、守初、本华,公众号:阿里技术世界冠军之路:菜鸟车辆路径规划求解引擎研发历程
02 丰富算子
在世界冠军之路:菜鸟车辆路径规划求解引擎研发历程这篇文章中提到,菜鸟仓配智能化算法团队在VRP求解引擎中增加了Two-Opt, Three-Opt, Cross-Exchange等不同类型的局部搜索算子,那么上述这3个算子究竟是怎么一回事?除上述3个算子外,还有哪些VRP局部搜索算子?接下来,我们来一探究竟。
(1)2opt算子
2opt算法为一种路径内搜索方法。该方法随机选择当前路径方案中的一条路径,在该路径内改变顾客的排序。在维基百科中2opt交换算子的伪代码如下:
procedure 2optSwap(route, i, k) {
1. take route[0] to route[i-1] and add them in order to new_route
2. take route[i] to route[k] and add them in reverse order to new_route
3. take route[k+1] to end and add them in order to new_route
return new_route;
}
比如说:某一条路线为A → B → C → D → E → F → G → H → A,假设i=4,k=7(初始索引为1),则按照上述伪代码的步骤,对上述路线执行2opt交换操作:
a)(A → B → C)
b)A → B → C → (G → F → E → D)
c)A → B → C → G → F → E → D → (H → A)
在使用上述2opt交换算子后,如果该路径的成本降低,则保留改变后的路径;否则,仍然保留原始路径。
(2)3opt算子
3opt算法为一种路径内搜索方法。3opt算子就是从原始路径中移除3条边,然后再新增3条边,重新将路径连接起来。比2opt复杂的是,在重新连接路径时共有8种(包含原始路径)连接方式。如下图所示,3条虚线为新增的3条边。
实际上kopt算子,就是从原始路径移除k条边,然后采用种方式重连路径。
在使用上述kopt交换算子后,如果该路径的成本降低,则保留改变后的路径;否则,仍然保留原始路径。
(3)Cross-Exchange算子
Cross-Exchang算法为一种路径间搜索方法。该算子的基本思路为从一条路径中移除2条边 和 ,从另一条路径中移除2条边 和 ,然后交换上述4条边 ,产生新的4条边 。下图左侧4条红色的边为被移除的边,右侧4条蓝色的边为新生成的边。
(4)swap算子
swap算法为一种路径间搜索方法。该算子随机选择当前路径方案中的两条路径,分别在每条路径中选择一个顾客节点,交换后形成两条新的路径。
(5)shift算子
shift算法为一种路径间搜索方法。该算子随机选择当前路径方案中的两条路径,从一条路径中随机选择一个顾客节点i,将节点i随机插入另一条路径中,形成两条新的路径。
(6)relocate算子
relocate算法为一种路径内搜索方法。该算子随机选择当前路径方案中的一条路径,选择该路径中m个连续的顾客节点,将这m个节点重新定位到该路径中,形成一条新的路径。下图以m=2为例,将顾客节点j和j+1重定位到顾客节点i和i+1之间。
(7)exchange算子
exchange算法为一种路径内搜索方法。该算子随机选择当前路径方案中的一条路径,再随机选择该路径中的两个顾客节点进行交换,形成一条新的路径。
(8)GENE算子
广义交换(Generalized exchange,GENE)算法为一种路径间搜索方法。该算子随机选择当前路径方案中的两条路径,再随机选择一条路径中的一个顾客节点,插入到另一条路径中,且插入位置为距离该顾客最近的两个节点(这两个节点可以不连续)之间。
(9)Three-point算子
Three-point算法为一种路径间搜索方法。该算子随机选择当前路径方案中的两条路径,分别在一条路径中选择一个顾客节点,在另一条路径中选择一对相邻顾客节点,交换后形成两条新的路径。下图红色的点为一对相邻顾客节点,蓝色的点为第3个顾客节点。
03 参考文献
1.https://mp.weixin.qq.com/s/U3qlIsSLJ6E1eNzQ-ZZ6zQ
2.https://www.zhihu.com/question/440079767/answer/1688213738
3.https://www.zhihu.com/question/440079767/answer/1690070842
4.https://www.zhihu.com/question/440079767/answer/1685950322
5.王超, 刘超, 穆东, 等. 基于离散布谷鸟算法求解带时间窗和同时取送货的车辆路径问题[J]. 计算机集成制造系统, 2018 (2018 年 03): 570-582.
8.Blazinskas A, Misevicius A. combining 2-opt, 3-opt and 4-opt with k-swap-kick perturbations for the traveling salesman problem[J]. Kaunas University of Technology, Department of Multimedia Engineering, Studentu St, 2011: 50-401.
各位小伙伴可点击下方图片留言,未来我们讲解的具体内容由你做主。如果可以的话,可以把希望讲解的文献也在留言板上写出来。
知乎 | bilibili:随心390
长按识别二维码关注我们