基于改进粒子群算法(PSO)的旅行商问题(TSP)优化系统
项目介绍
本项目是一个基于改进粒子群算法(Particle Swarm Optimization, PSO)的旅行商问题(Traveling Salesman Problem, TSP)求解系统。TSP是一个典型的组合优化难题,旨在寻找经过所有城市并返回起点的最短路径。
传统的PSO算法主要用于处理连续空间的逻辑计算。本项目通过引入交换子(Swap Operator)和交换序(Swap Sequence)的概念,成功将PSO算法的应用范围扩展到离散的排列组合领域。系统通过模拟粒子在解空间中的搜索行为,利用个体经验和社会经验(全局最优)不断优化城市访问序列,最终获得最优或近优的旅行路线。
---
功能特性
- 离散化路径编码:将城市访问序列直接作为粒子的位置,规避了连续坐标映射的复杂性。
- 交换序更新逻辑:弃用了传统的代数运算,改用交换操作来更新粒子的速度与位置,保持了路径解的合法性。
- 动态概率学习:在速度更新过程中结合了个体学习因子(c1)和全局学习因子(c2),通过随机概率决定是否采纳优秀的交换操作。
- 环境自适应计算:支持自动生成随机城市坐标,并预计算全矩阵距离以提升迭代效率。
- 双重可视化呈现:系统运行完成后,自动生成算法收敛曲线图以及最优路径规划拓扑图。
---
实现逻辑与算法流程
系统在主程序逻辑中严格遵循以下步骤:
- 环境初始化:
* 设置核心参数:包括城市规模(30)、粒子群规模(100)、最大迭代次数(200)。
* 定义惯性权重、个体学习因子以及全局学习因子。
* 随机生成城市坐标系,并构建两两城市间的欧几里得距离矩阵。
- 粒子群初始化:
* 为每个粒子分配一个随机的城市排列序列作为初始路径。
* 初始化粒子速度为空的交换序。
* 计算每个粒子的初始适应度(路径总长度),并确立各粒子的初始个体最优(pBest)和种群的全局最优(gBest)。
- 启发式迭代搜索:
*
计算交换序:对比当前路径与个体最优路径、全局最优路径的差异,生成一系列能将当前状态转化为目标状态的交换算子。
*
速度更新:根据学习因子 $c1$ 和 $c2$ 的概率分布,筛选部分交换算子合并成新的速度向量。
*
位置更新:将合成后的交换序顺序应用到当前城市序列中,产生新的路径。
*
适应度评估:计算新路径长度,采用最小化准则更新个体最优记录。
- 全局最优同步:
* 在每一轮迭代中,对比所有粒子的个体最优值,动态更新全局最优路径和最短长度。
- 结果输出与绘图:
* 在控制台打印最终的最优访问顺序和最短路径长度。
* 利用图形界面绘制收敛历程,观察算法是否趋于稳定。
---
关键函数分析
1. 适应度计算函数 (calculateFitness)
该函数负责累加城市序列中相邻城市间的距离。逻辑中涵盖了闭环特性,即计算完从第1个城市到第n个城市的总距离后,必须加上从最后一个城市返回出发城市的距离,确保路径的完整性。
2. 交换序获取函数 (getSwapSequence)
这是离散PSO的核心。它通过逐位对比当前路径与目标路径(pBest或gBest),当发现元素不一致时,在当前路径中寻找目标元素的位置并执行交换,同时记录下这个交换位置对(交换子)。最终输出一个由多个交换子组成的矩阵。
3. 交换序应用函数 (applySwapSequence)
该函数将存储在速度向量中的交换子依次作用于当前的城市排列。通过一系列有序的元素对调,粒子的位置(路径解)会向更优的方向发生位移。
4. 结果可视化函数 (drawRoute)
负责拓扑图的绘制。它将城市坐标绘制为散点,并用黑色实线连接最优序列中的各个城市。为了区分,起始/回程路段使用红色虚线标注,并自动为每个城市点添加数字编号。
---
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:标准桌面计算机即可,由于采用了距离矩阵预计算优化,内存占用极低。
- 运行说明:直接运行主脚本文件,系统将自动执行并在最后弹出两个分析视图。
---
注意事项
- 系统默认采用随机生成的城市分布,每次运行的结果可能略有不同。
- 参数 $c1$ 和 $c2$ 的设定平衡了算法的探索(Exploration)与开发(Exploitation)能力。
- 当前实现中,速度更新主要受经验启发,惯性权重 $w$ 在逻辑中预留了扩展空间。