这是一种针对周期性和多站点车辆路线问题的禁忌搜索启发式方法
请参阅网站了解数据源的含义http://neumann.hec.ca/chairedistributique/data/README.TXT
我意识到这是MDVRP(多站点车辆路线问题)的一部分。在文章中,代码使用python。
模拟后的结论是:对于相对较小的问题,我们会达到最佳答案或接近基线的答案,但当我们处理较大的问题时,我们得到了一些糟糕的模拟,而有时达到基线的6倍。总之,这在某些领域是有意义的,值得记录。
我们介绍的是多车场的车辆路由问题研究,其只要研究的问题是,在给定客户和车场的坐标和编号和需求的情况下,找到一种解决方案,使得每个客户有且仅有属于一个车场,由该车场出发走过所有的客户最后回到车场,目标是找到一种最优分配使走过的总距离最小。
这里介绍的简单的问题模型,随着研究的深入每个车场可以有多路线(即有多个快递员),或者和其他限制条件比如带时间窗、周期性的限制条件进行结合产生更多问题的变种,不过问题的难度也会随之上升,这不是本篇文章需要讨论的范围。
接下来的算法中会使用到TS,所有这里进行前驱介绍
因为笔者之前已经写过有关于TS的文章,这里需要详细了解的读者可以移步以下链接
https://blog.csdn.net/wlfyok/article/details/126010225?spm=1001.2014.3001.5501
预分配形成初始种群
while times < T:
使用禁忌搜索进行种群之间的交流替换
更新禁忌表以继续指导搜索
time += 1
步骤解释
预分配:把每个客户分配给距离(欧氏距离)其最近的车场,且添加到末尾,直到完成所有的客户分配。
当不满足搜索次数(终止条件)的时候,对种个体进行持续的搜索
单个路线上每个客户花费的平均距离来衡量路线的好坏,将最坏路线上的最坏客户加入到最好路线中,且插入的位置是进行贪心的搜索。
同时为了防止之前加入当前路线的客户又要被换出,使用禁忌搜索来限制其被换出,每次进行路线的优化之后,就进行对应的紧急表的更新,来指导后续的寻优
因为代码中只考虑到了不同车场之间的交流,没有进行车场的交换和局部寻优
所以我们的改进方案如下:
加入并加强每个车场负责的客户的路线的局部寻优
局部寻优则可以采取一些传统元启发,或者先进的LKH分支等等。
在未进行局部寻优,问题已经能够取得不错的效果,改进是势在必得的
实验代码大家可以去我的GitHub仓库下载点这里
同时我也在csdn上传了资源CSDN下载地址
二维列表的一个单独列表代表属于某个车厂需要走过的城市,且第一个元素代表开始的车厂
然后21603.403068233754是所有路线走过的最小距离和
在p01.txt的测试用例中的一个测试结果如下:
[[360, 214, 222, 230, 238, 295, 303, 311, 319, 37, 29, 21, 5, 3, 13, 316, 308, 300, 292, 14, 6, 22, 30, 38, 7, 263, 221, 229, 4, 12, 20, 28, 39, 31, 23, 15, 36, 215, 223, 231, 239, 34, 26, 18, 10, 2, 1, 25, 33, 17, 9, 290, 298, 306, 24, 237, 279, 11, 19, 27, 35, 213, 8, 0, 16, 32, 314, 271, 255], [361, 41, 49, 335, 356, 45, 53, 61, 69, 77, 359, 351, 343, 340, 73, 65, 57, 50, 58, 66, 74, 68, 76, 79, 71, 63, 55, 78, 70, 62, 60, 52, 44, 42, 330, 338, 346, 354, 72, 64, 56, 48, 40, 43, 51, 59, 67, 75, 348, 332, 46, 54, 47], [363, 138, 130, 122, 121, 129, 137, 145, 182, 174, 175, 183, 199, 154, 146, 191, 190, 153, 198, 181, 123, 126, 124, 127, 135, 132, 148, 125, 131, 155, 133, 150, 142, 134, 139, 147, 141, 149, 157, 112, 104, 96, 88, 80, 85, 83, 91, 99, 107, 115, 117, 109, 101, 110, 102, 118, 93, 94, 86, 87, 95, 103, 119, 111, 116, 108, 100, 92, 81, 84, 82, 90, 98, 89, 97, 105, 113, 158, 143, 114, 106, 159, 151, 140, 156, 189, 197, 152, 144, 128, 120, 136, 173], [365, 235, 219, 211, 205, 203, 200, 208, 227, 260, 252, 201, 202, 204, 206, 207, 212, 220, 228, 236, 234, 226, 218, 210, 209, 217, 225, 233, 250, 258, 266, 274, 232, 224, 216, 276, 268], [367, 287, 284, 270, 278, 305, 297, 289, 281, 282, 272, 264, 256, 273, 265, 249, 241, 240, 247, 244, 242, 257, 248, 245, 246, 243, 251, 259, 267, 275, 195, 187, 179, 171, 165, 163, 160, 167, 161, 177, 193, 185, 188, 196, 180, 172, 164, 178, 186, 194, 170, 162, 166, 168, 169, 176, 184, 192, 304, 288, 280, 296, 313, 262, 254, 253, 286, 285, 291, 299, 315, 307, 312, 277, 269, 261, 283, 293, 294, 310, 302, 301, 309, 317, 352, 344, 336, 328, 321, 322, 325, 355, 347, 339, 331, 341, 349, 357, 333, 350, 358, 342, 326, 324, 327, 334, 323, 320, 329, 337, 345, 353, 318]]
参考文献是
A tabu search heuristic for periodic and multi-depot vehicle routing problems