转眼距离开学又过去一个多月了,不知道大家在家里学习的怎么样?这段时间小编在家里也没闲着,时隔多日,再次为大家带来干货内容!
邻域搜索类启发式算法有很多种,比如禁忌搜索啦,模拟退火啦,变邻域搜索啦等等。这次带来的自适应大邻域搜索代码,相对上述几种会更复杂,内容相对全面。
小编在编写代码时,主要采用git-hub上一位作者de.markusziller的代码,参考他的ALNS框架下写出了解决带时间窗的车辆路径规划问题的代码,今天文章的主要内容将围绕代码实现展开。下面就开始今天的内容吧!
算法介绍
有关ALNS概念的介绍,公众号内已经有相关内容了,这里稍提一下,有疑惑的同学可以参考往期内容:
简单的讲,ALNS主要有两个特点:1.先用destroy方法破坏当前解,再用repair方法组合成新解。2.设计一组destroy,repair方法,动态评估每种方法的效果,在搜索中选用效果较好的方法。
ALNS算法是脱胎于大邻域搜索算法(Large Neighborhood Serach,LNS)的,第一个特点就是LNS的关键。通过带有随机性的destroy、repair方法构造新解,从而对解空间进行启发式搜索。
第二个特点是ALNS的自适应部分。类似于蚁群算法中的信息素,或禁忌搜索算法重点的禁忌表,由于ALNS算法的解空间是有destroy和repair方法定义的,因此这里记忆的主要是算子的使用情况。
下面针对这次的VRPTW代码进行一些讲解。当然,这里只是挑选部分重点内容进行讲解,代码总量有2000多行,想要认真研究还需要下载代码亲自查阅哦!
初