基于MATLAB的蚁群算法旅行商问题(TSP)优化求解系统
项目简介
本项目是一个基于MATLAB环境开发的启发式优化系统,利用蚁群算法(Ant Colony Optimization, ACO)求解经典的旅行商问题(TSP)。系统模拟主要通过模拟自然界中蚂蚁在寻找食物过程中释放和感知信息素的生物学行为,构建正反馈机制,在多项式时间内寻找全连通图中所有城市的最短遍历路径。该代码实现完整,包含了从环境构建、算法核心迭代到结果可视化的全过程。
功能特性
- 自动化环境构建:系统能够随机生成指定数量(默认30个)的城市坐标,自动计算城市间的欧氏距离矩阵,并初始化启发式因子(距离的倒数)与信息素矩阵。
- 标准的蚁群算法实现:
* 采用
Ant-Cycle 模型进行信息素更新(即根据路径总长度进行反馈)。
* 实现了基于
轮盘赌(Roulette Wheel Selection) 的概率选择策略。
* 结合了信息素浓度(History)与启发式因子(Visibility)的
双重导向机制。
* 在算法运行过程中实时绘制最优路径的拓扑变化。
* 实时生成收敛曲线,展示最短路径长度与平均路径长度的变化趋势。
* 为了平衡运行效率,绘图功能设计为间隔刷新(默认每5代刷新一次)。
- 灵活的参数配置:支持对蚁群规模、迭代次数、信息素重要度、启发因子重要度、挥发系数等关键参数进行手动调整。
- 完备的结果输出:运行结束后会自动生成最终的静态结果图,并在命令行输出全局最优路径的具体节点访问顺序及总长度。
系统要求
- 软件环境:MATLAB R2016a及以上版本(代码不依赖特殊工具箱,基础版本即可运行)。
- 硬件要求:无特殊要求,普通PC即可流畅运行。
使用方法
- 确保MATLAB当前工作路径包含
main.m 文件。 - 直接运行
main.m 脚本。 - 程序将自动清除环境变量,初始化参数,并开始迭代。
- 观察
Figure 1 窗口中的动态优化过程。 - 在命令行窗口查看定期的进度汇报(每20代输出一次)。
- 运行结束后,查看
Figure 2 的最终结果汇总,以及命令行输出的最终路径序列。
代码实现逻辑详解
本项目核心代码集中在 main.m 文件中,具体实现逻辑如下:
1. 参数与环境初始化
代码首先定义了算法的核心超参数:
- n (城市数量):默认为30。
- m (蚁群规模):默认为50,即每代有50只蚂蚁同时寻路。
- Alpha & Beta:分别控制信息素和启发式因子(距离倒数)在路径选择中的权重。
- Rho:信息素挥发系数,用于避免算法过早收敛于局部最优。
- City 坐标生成:使用
rand 函数在 [0, 100] 范围内随机生成城市二维坐标。 - 矩阵预计算:计算欧氏距离矩阵
D,并预先计算启发式矩阵 Eta = 1 ./ D 以提升运行效率。
2. 路径构建(核心循环)
在每一次迭代中,每只蚂蚁均执行以下步骤:
- 起点选择:随机分配一个城市作为起始点。
- 节点转移:在构建路径时,蚂蚁维护一个
unvisited(未访问城市)列表作为禁忌表。 - 概率计算:根据公式
P = (Tau^Alpha) * (Eta^Beta) 计算转移到所有未访问城市的概率权重。 - 轮盘赌选择:将概率归一化并计算累积概率,通过
rand 随机数确定下一跳城市,体现了探索与利用的平衡。
3. 路径评估
当所有蚂蚁完成一次遍历后:
- 代码计算每只蚂蚁生成的路径总长度(包含从终点回到起点的距离)。
- 提取当前迭代中的最短路径长度
min_len 和对应路线。 - 与历史全局最优
global_best_length 进行比较并更新。
4. 信息素更新机制
采用全局动态更新策略:
- 挥发过程:所有路径上的信息素按照
(1 - Rho) 的比例进行衰减。 - 增强过程:采用 Ant-Cycle 模型,根据蚂蚁走过的路径长度
L,在路径各边上累加 Q / L 的信息素量。这意味着路径越短,留下的信息素越多,后续蚂蚁选择该路径的概率越大。 - 最终通过线性和更新信息素矩阵
Tau。
5. 可视化分析
代码包含详细的绘图逻辑:
- Figure 1 (动态):由两个子图组成。左侧展示城市散点及当前发现的最优连线;右侧展示迭代次数与路径长度(最短和平均)的关系曲线。利用
drawnow 实现动画效果。 - Figure 2 (静态):迭代结束后生成。左侧图不仅绘制了路径,还标注了城市编号,方便用户对照路径序列;右侧为最终的收敛性能图。
参数配置说明
用户可以直接在
main.m 文件的 "1. 参数初始化" 部分修改以下变量以观察不同效果:
n:调整城市规模。m:调整蚂蚁数量(通常建议设置为城市数量的1.5倍左右)。Alpha:增大则算法更倾向于跟随旧迹(快速收敛但易陷入局部最优)。Beta:增大则算法更倾向于选择短边(贪婪搜索)。Rho:挥发过快导致搜索容易停滞,挥发过慢导致收敛时间变长。