基于粒子群算法 (PSO) 的旅行商问题 (TSP) 求解系统
项目介绍
本项目是一个基于改进型粒子群优化算法(Particle Swarm Optimization, PSO)的计算框架,专门用于解决经典的组合优化问题——旅行商问题(TSP)。在TSP问题中,目标是寻找一条遍历所有既定城市且每个城市仅访问一次的最短闭合路径。由于TSP属于NP-hard问题,其解空间随城市数量增加而呈阶乘式增长,本项目通过引入“交换算子”与“交换序列”的离散优化逻辑,成功将传统用于连续空间的PSO算法应用于离散的路径排列问题。
功能特性
- 离散化PSO算子:弃用了传统的连续位移更新公式,采用基于路径交换的逻辑,使算法能够直接在城市序列的置换空间中进行搜索。
- 自动化建模:系统根据输入的城市坐标自动生成全连接的欧式距离邻接矩阵,无需手动输入距离数据。
- 动态可视化:在算法迭代过程中,系统每隔固定代数动态实时刷新当前最优路径图,直观展示算法由乱序逐渐收敛至有序的过程。
- 双重学习机制:粒子通过与个体历史最优解和群体全局最优解的对比,生成差异化的交换路径,平衡了局部搜索与全局开发的能力。
- 结果全产出:任务完成后,系统自动输出最优访问序列、最小总距离,并绘制完整的算法收敛曲线图。
使用方法
- 环境配置:准备好安装有MATLAB环境的计算机。
- 数据准备:在主函数脚本的起始位置通过坐标矩阵定义城市位置,每一行代表一个城市的X、Y坐标。
- 参数调节:根据问题规模调整种群大小(n_pop)、最大迭代步数(max_iter)以及学习因子(c1、c2)。
- 启动计算:运行脚本,系统将开启图形化窗口并开始执行迭代寻优。
- 获取结果:迭代结束后,在命令行窗口查看最优序列,并分析最后生成的路径分布图与收敛曲线。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 硬件资源:能够运行MATLAB的基础计算机配置。
实现逻辑说明本系统的核心逻辑严格遵循以下流程:
- 参数与数据初始化:定义了31个特定坐标的城市,设定种群规模为100,最大迭代次数为500次。惯性、个体学习和社会学习因子分别设为0.8、0.6和0.6。
- 构建距离矩阵:利用双重循环计算城市间的欧几里得距离,构建一个N×N的邻接矩阵,为后续快速计算路径全长提供支持。
- 种群初始化:每个粒子被赋予一个1到N的随机排列作为初始路径,并记录初始时刻的个体最优位置和全局最优位置。
- 迭代循环更新:
- 差异识别:计算当前粒子城市序列与目标序列(个体最优和全局最优)之间的差异,生成由一系列索引对组成的交换序列。
- 概率过滤:根据学习因子(c1, c2),以随机概率决定是否保留某些交换行为,这模拟了粒子向优良解靠近的随机性。
- 路径演变:通过依次执行过滤后的交换对,粒子实现位置更新。
- 评价与更新:重新计算新路径的总长度,若优于历史记录,则更新个体和群体最优。
- 结果呈现:循环结束后,系统总结最短距离并呈现最终优化的路径拓扑结构。
关键算法与函数功能分析
- 路径长度计算功能:该功能通过读取距离邻接矩阵,累加路径序列中相邻城市间的距离,并最终加上回溯至起点的距离,实现对路径优劣的量化评价。
- 交换序列获取功能:这是离散化PSO的核心。它对比两个排列,识别出将一个序列转换为另一个序列所必须进行的元素交换操作,生成一组交换索引对。
- 交换算子概率过滤功能:该功能负责实现PSO的“学习”特性。它接收交换序列并根据预设的期望概率(如0.6),随机剔除部分交换操作,从而控制粒子向目标靠近的步长。
- 路径应用交换功能:执行具体的元素位置变更操作。它按照交换序列中的指令,依次调换路径数组中指定位置的城市编号,完成粒子在解空间中的位移。
- 动态可视化绘图功能:利用MATLAB的绘图指令,将城市坐标描绘为散点,并根据当前最优序列绘制闭合折线,配合文本标注城市编号,辅以实时更新的标题信息,实现过程的直观把控。
- 收敛特性记录:在主循环中实时记录每一代的最优适应度值,最终通过绘图展示算法在搜索过程中的收敛速度与稳定性。