基于遗传变异策略的混合粒子群优化算法 (HG-PSO)
项目简介
本项目实现了一种改进的粒子群优化算法(PSO),旨在解决标准 PSO 在处理高维复杂优化问题时容易陷入局部最优解以及收敛精度不足的问题。项目核心在于一种混合策略:在保留标准 PSO 快速收敛优势的基础上,引入了类似于遗传算法(GA)的变异操作。
通过在迭代过程中对粒子位置施加自适应的高斯变异扰动,算法有效地增加了种群的多样性,赋予了粒子跳出局部极值陷阱的能力。代码包含完整的算法对照实验(标准 PSO vs 混合 PSO)、多种标准 Benchmark 测试函数以及可视化分析模块。
功能特性
- 双算法对照运行:代码默认同时运行“标准粒子群算法”和“混合遗传变异粒子群算法”,并在同一环境下对比两者性能。
- 自适应遗传变异策略:在 HG-PSO 中实现了基于概率的粒子变异机制,变异幅度随迭代次数动态衰减,平衡了前期的全局搜索与后期的局部开发能力。
- 多维度测试函数库:内置了 4 种标准的 Benchmark 测试函数(单峰、多峰、高维山谷),用于全面评估算法性能。
- 综合性能评估:自动计算并输出最优适应度值、算法运行耗时以及性能提升百分比。
- 可视化分析:生成双图表界面,包含对数刻度的收敛曲线对比以及最终种群在二维平面的分布投影。
系统要求
- MATLAB R2016a 或更高版本
- 无需任何额外的工具箱(Standard Toolbox Only)
详细实现逻辑与代码分析
本项目的核心逻辑集中在 main.m 文件中,通过模块化函数实现了以下关键流程:
1. 算法初始化与参数配置
代码首先进行环境清理,并设定了通用的优化参数:
- 种群规模:50 个粒子
- 搜索维度:30 维(高维问题模拟)
- 最大迭代次数:1000 次
- 惯性权重:采用线性递减策略(从 0.9 衰减至 0.4),以使得搜索步长随时间收敛。
- 学习因子:c1 和 c2 均设为 1.5。
- 变异参数:设定变异概率为 0.1,初始变异幅度系数为 0.1。
2. 标准 PSO 实现 (RunStandardPSO)
- 实现了经典的粒子群算法逻辑。
- 每次迭代更新粒子的速度和位置。
- 速度限制:将粒子飞行速度限制在搜索空间范围的 20% 以内,防止粒子飞散。
- 边界处理:对越界粒子进行强制边界限制。
- 权重更新:使用线性递减公式动态调整惯性权重。
3. 混合遗传变异 PSO 实现 (RunHybridPSO)
这是本项目的核心改进算法,包含以下具体逻辑:
- 基础更新:保留了标准 PSO 的速度与位置更新公式。
- 自适应变异算子:引入了一个随迭代次数二次方衰减的变异幅度系数。随着迭代进行,变异扰动的强度逐渐减弱,确保算法在后期能精细搜索。
- 高斯变异机制:
* 在每次粒子更新位置后,根据设定的
变异概率 (0.1) 判断该粒子是否发生变异。
* 如果触发变异,算法随机选择当前粒子
10% 的维度。
* 对选中的维度应用
高斯变异(Gaussian Mutation):
新位置 = 原位置 * (1 + 动态步长 * 标准正态分布随机数)。
- 这一机制使得部分粒子能够突然改变飞行轨迹,跳出当前的局部最优区域。
4. 测试函数库 (GetBenchmarkFunction)
代码内置了以下测试函数供选择:
- Sphere:单峰函数,测试基本收敛能力。
- Rastrigin(默认):由于存在大量局部极值,非常适合测试算法跳出局部最优的能力。
- Ackley:具有平坦外部区域和中心孔的多峰函数。
- Rosenbrock:典型的高维山谷主要测试函数。
5. 结果可视化 (PlotResults)
可视化模块生成一个包含两个子图的窗口:
- 左图(收敛曲线):使用对数坐标(Log Scale)绘制适应度随迭代次数的变化。这能清晰地展示出 HG-PSO 在标准 PSO 陷入停滞(平直线)时,是否能继续下降寻找更优解。
- 右图(种群分布):绘制最终迭代结束后所有粒子在前两个维度(Dim 1 vs Dim 2)的散点分布。这直观地展示了种群的聚集程度和最终收敛位置。
使用方法
- 打开 MATLAB 并定位到项目文件夹。
- 直接运行
main.m 函数(或在命令行输入 main)。 - 程序将自动依次执行标准 PSO 和 HG-PSO。
- 观察命令行输出的性能指标对比(最优适应度、耗时、提升比例)。
- 查看弹出的可视化图表进行分析。
修改配置
如果需要测试不同的函数或调整参数,可直接修改代码顶部的“参数设置”区域:
- 修改
funcNum (1-4) 可切换不同的测试函数。 - 修改
params.dim 可改变问题的维度复杂度。 - 修改
params.mutationProb 可调整变异发生的频率。