基于鲸鱼迁徙算法(Whale Migration Algorithm,WMA)的大规模多旅行商问题(Large-Scale Multi-Traveling Salesman Problem,LS-MTSP)求解研究主要涉及两个方面:大规模单仓库多旅行商问题(LS-SDMTSP) 和 大规模多仓库多旅行商问题(LS-MDMTSP)。以下是详细介绍:
1. 鲸鱼迁徙算法(WMA)
- 算法简介:WMA是一种新颖的生物启发式元启发式优化方法,灵感来源于座头鲸的协作迁徙行为。通过模拟座头鲸的迁徙和捕食行为,实现了在优化过程中的高效搜索和优化能力。
- 核心机制: 领导者-追随者动态:通过领导者和追随者的协作,实现全局搜索和局部搜索的平衡。 自适应迁徙策略:根据问题的复杂性和搜索空间的特性动态调整搜索策略,避免局部最优,快速收敛到全局最优解。
- 参考文献: Ghasemi, M., Deriche, M., Trojovský, P., et al. (2025). An efficient bio-inspired algorithm based on humpback whale migration for constrained engineering optimization. Results in Engineering.
2. 大规模单仓库多旅行商问题(LS-SDMTSP)
- 问题定义: 基本场景:存在一个单一仓库,所有旅行商均从该仓库出发,并最终返回仓库。地理空间中散布着大量客户节点,每名旅行商需要从仓库出发,依次访问一定数量的客户节点,再返回仓库。 目标:确保所有客户节点至少被一名旅行商访问,并最小化所有旅行商的总行程距离。
- 求解方法: 算法流程: 部分MATLAB代码及结果:matlab复制figurebar(path_length)ylabel('路径长度')set(gca,'xtick',1:1:m);set(gca,'XTickLabel',salemans)title(Name)saveas(gca,[Name '-length.jpg']);figuresemilogy(CurveLine,'LineWidth',2);xlabel('迭代次数')ylabel('总路径长度')legend('')title(Name)saveas(gca,[Name '-curve.jpg']);%% 显示结果fprintf('数据集:%s\n',Name)for j=1:length(saleman_path) Kd=saleman_path{j}; fprintf('算法得到的路径%d:\n',j) fprintf('具体路径信息:%d',Kd(1)) for i=2:length(Kd) fprintf(' > %d',Kd(i)); end fprintf(' 路径长度%f\n',path_length(j))endfprintf('算法求解得到的总路径长度:%f\n',sum(path_length));
- 初始化:生成初始鲸鱼种群,每只鲸鱼代表一个可能的旅行商路径解。
- 适应度计算:计算每只鲸鱼的适应度值,即旅行商路径的总距离。
- 领导者和追随者更新:根据适应度值选择领导者鲸鱼,其他鲸鱼根据领导者的位置和自身经验进行位置更新。
- 路径优化:对每只鲸鱼代表的旅行商路径进行局部优化,如2-opt交换等。
- 迭代终止条件判断:判断是否达到预设的迭代终止条件,如最大迭代次数或适应度值收敛阈值。
- 数据集示例:以数据集 tsp225 为例,算法求解得到的总路径长度为 6882.000000。
3. 大规模多仓库多旅行商问题(LS-MDMTSP)
- 问题定义: 基本场景:存在多个仓库(起点/终点)和大量分散的客户节点,多支旅行商队伍分别从不同仓库出发,访问指定客户后返回原仓库。 目标:在满足所有客户被访问且仅被访问一次的约束下,最小化整体成本(如总行驶距离、时间、车辆使用成本等)或均衡各旅行商的工作量。
- 核心要素: 多仓库:每个仓库作为旅行商的出发地和终点。 多旅行商:多支队伍协同完成任务。 客户节点:所有客户必须被访问且仅被访问一次。 闭合路径约束:每个旅行商的路径必须从仓库出发,经过若干客户节点后返回原仓库。
- 求解方法: 算法流程:与LS-SDMTSP类似,包括初始化、适应度计算、领导者和追随者更新、路径优化、迭代终止条件判断等步骤。 部分MATLAB代码及结果:matlab复制figurebar(path_length)ylabel('路径长度')set(gca,'xtick',1:1:m);set(gca,'XTickLabel',salemans)title(Name)saveas(gca,[Name '-length.jpg']);figuresemilogy(CurveLine,'LineWidth',2);xlabel('迭代次数')ylabel('总路径长度')legend('')title(Name)saveas(gca,[Name '-curve.jpg']);%% 显示结果fprintf('数据集:%s\n',Name)for j=1:length(saleman_path) Kd=saleman_path{j}; fprintf('算法得到的路径%d:\n',j) fprintf('具体路径信息:%d',Kd(1)) for i=2:length(Kd) fprintf(' > %d',Kd(i)); end fprintf(' 路径长度%f\n',path_length(j))endfprintf('算法求解得到的总路径长度:%f\n',sum(path_length));
- 数据集示例:以数据集 tsp225 为例,算法求解得到的总路径长度为 5878.000000。






参考代码:
https://mbd.pub/o/bread/mbd-aJWTmJxs
https://mbd.pub/o/bread/mbd-aJWTmJpx
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删