多目标蚁群算法(MOACO)求解旅行商问题项目说明
项目介绍
本项目实现了一个基于改进多目标蚁群算法(MOACO)的旅行商问题(TSP)求解器。与传统只关注路径最短的TSP不同,本项目同时优化三个互斥或相关的目标:路径总长度、运输成本以及配送时间。算法通过模拟蚂蚁的寻径行为,并结合帕累托(Pareto)最优理论,旨在搜索并维护一组非支配解(Optimal Solutions),为决策者提供多样化的路径选择方案。
功能特性
- 多目标并行优化:同时处理距离、成本、时间三个维度的优化目标,而非简单的加权求和。
- Pareto外部存档机制:建立外部存档(Archive)用于实时存储搜索过程中发现的所有非支配解,并具备自动去重与容量管理功能。
- 启发式信息融合:综合考虑多个目标的倒数作为启发式因子,引导蚂蚁向综合性能较优的方向搜索。
- 全局信息素更新重构:改变了传统仅靠单路径更新的方式,利用整个Pareto存档中的精英解共同更新信息素浓度,加速算法收敛。
- 多维度可视化展示:程序自动生成包括3D帕累托前沿分布、收敛曲线、最优路径轨迹及目标数值对比在内的四项可视化结果。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:通用办公电脑配置即可,计算量随城市数量与蚂蚁规模动态变化。
使用方法
- 将算法代码保存为后缀名为 .m 的文件。
- 在MATLAB命令行窗口中直接运行该函数。
- 程序将开始迭代并在命令行实时打印迭代进度及当前找到的非支配解数量。
- 迭代完成后,程序将自动弹出可视化窗口展示优化结果。
核心功能实现逻辑
1. 环境与参数初始化
程序首先定义了基本规模(30个城市、50只蚂蚁、100次迭代)。城市坐标在100x100的二维空间内随机生成。基于这些坐标,程序构建了三个关键矩阵:
- 距离矩阵:严格的欧几里得距离。
- 成本矩阵:在距离基础上引入0.8至1.2倍的随机波动,模拟路况、收费等因素。
- 时间矩阵:在距离基础上引入0.5至1.5倍的随机波动,模拟交通拥堵或配送效率差异。
2. 路径构建与选择机制
每只蚂蚁在每一代都会构建一条完整的闭环路径。选择下一个城市的概率由信息素($tau$)和启发式信息($eta$)共同决定。
- 状态转移:采用轮盘赌算法,通过公式 $P propto tau^alpha cdot eta^beta$ 计算概率。
- 启发式策略:启发式信息取三个目标值倒数的平均值,确保蚂蚁在运动初期就能感知到综合最优的方向。
3. 多目标评估与Pareto更新
这是算法的核心步骤。每代蚂蚁完成路径搜索后,程序会将其解与现有的外部存档合并进行非支配排序:
- 支配判定:如果解A的所有目标值都不大于解B,且至少有一个目标值严格小于解B,则称A支配B。
- 存档维护:剔除所有被支配的解,仅保留非支配解;同时进行数值去重。
- 容量控制:当非支配解数量超过上限时,程序会按照第一目标(距离)进行排序并执行均匀采样截断,以保持解集的分布多样性。
4. 动态信息素更新
为了引导后续种群,算法执行全局更新。首先进行信息素挥发,防止算法陷入局部最优;随后,遍历外部存档中的所有最优解,根据解的综合质量(各目标之和的倒数)向其经过的路径释放等量的信息素。
关键函数与实现细节
路径价值计算函数
通过遍历生成的路径序列索引,在对应的目标矩阵(距离、成本、时间)中累加各项数值,并最后闭合回到起始点,确保评估的是完整环路。
Pareto存档更新算法
实现了一套完整的非支配筛选逻辑。该函数接收当前种群与历史存档的并集,通过双重循环比对各个个体的三个目标向量。在执行容量溢出处理时,未采用复杂的拥挤距离算法,而是采用了基于排序的线性采样,这在保证计算效率的同时,有效维持了前沿的延伸性。
可视化逻辑
- 3D 散点图:以三个目标为轴,直观展示Pareto前沿的形状与分布范围。
- 收敛图:追踪迭代过程中存档内最小距离的变化趋势,反映算法的搜索效率。
- 路径图:提取解集中距离最短的代表性个体,在二维坐标系中重绘其物理轨迹。
- 柱状图:抽样对比不同Pareto解在各维度上的数值差异,体现多目标决策的权衡(Trade-off)。