动态环境自适应粒子群优化算法系统 (DPSO-MPB)
项目介绍
本项目是一个基于 MATLAB 开发的动态环境优化系统,旨在解决目标函数随时间变化的寻优问题。系统采用了自适应粒子群算法(DPSO),并集成了多峰移动基准问题(Moving Peaks Benchmark, MPB)作为测试环境。
该算法通过引入环境变化检测、记忆库机制、多种群协同进化以及基于量子行为的随机扰动策略,解决了传统静态优化算法在环境改变后无法及时响应或陷入过时局部最优解的问题。项目具备完善的实时可视化功能,能够直观展示地貌变化、粒子追踪过程以及误差收敛曲线。
功能特性
- 动态环境模拟 (MPB): 内置标准的 Moving Peaks Benchmark,支持多峰地貌的峰值高度、宽度和中心位置随时间随机变化,模拟复杂的非平稳环境。
- 环境变化检测机制: 采用双重检测策略,结合固定迭代周期的环境变更与基于全局最优解重评的实时感知机制(哨兵检测),确保算法能敏锐捕捉适应度地形的改变。
- 动态响应与重初始化: 一旦检测到环境变化,系统自动触发响应:
*
重置评估: 重新计算所有粒子的适应度并重置个体最优(PBest),防止旧环境记忆误导。
*
混合重分布策略: 对各子群中适应度最差的部分粒子(默认为20%)进行强制重置,一部分利用记忆库中的历史优良解进行微扰恢复,另一部分进行全域随机分布,以兼顾开发与探索。
- 多种群协同进化: 种群被划分为多个子群并行搜索,通过各自独立的局部寻优与全局最优信息的共享,维持种群多样性。
- 记忆库机制: 一个有限容量的记忆库用于存储历史时刻表现最优的解,当环境发生周期性或循环变化时,能够快速唤醒“休眠”的优良解。
- 随机扰动策略: 在速度更新公式中引入小概率的量子/高斯随机扰动,防止粒子在局部极值点过早收敛。
- 实时可视化分析: 包含双面板绘图,左侧展示动态等高线地貌与粒子群分布,右侧实时绘制真实理论最优值与算法搜索最优值的追踪曲线及误差变化。
系统要求
- MATLAB R2016b 或更高版本
- 无需额外工具箱(代码仅使用基础 MATLAB 函数)
使用方法
- 参数配置: 在代码开头的“参数设置”部分可以调整种群规模、迭代次数、环境变化频率、峰的数量以及记忆库大小等关键参数。
- 运行程序:直接执行主脚本。
- 结果解读:
*
图形窗口: 观察左图中的粒子是否能跟随移动的红色高亮区域(峰值);观察右图中红线(搜索值)是否紧贴虚线(理论最优值)。
*
控制台输出: 程序运行结束后,将输出环境变化总次数、平均离线误差(Offline Error)、最终最佳适应度及坐标。
详细功能实现逻辑
该系统主要由初始化、主循环迭代、环境交互与响应三大部分组成,具体逻辑如下:
1. 算法初始化
系统首先构建 MPB 环境,生成指定数量的峰,并随机设定其位置、高度和宽度。接着初始化多个子群,分配粒子的位置和初速度。同时建立一个固定大小的记忆库结构,用于后续存储环境变化前的全局最优解。
2. 动态环境检测
在每一次迭代开始时,系统执行两步检测:
- 机制模拟: 根据设定的
EnvChangeFreq(环境变化频率),判断当前迭代步是否触发 MPB 环境更新。 - 哨兵检测: 重新评估上一代记录的全局最优位置在当前环境下的适应度。如果新评估值与记录值差异超过阈值,判定环境发生了非预期改变/漂移。
3. 环境响应策略 (核心机制)
当
EnvChanged 标志被触发时,算法执行以下操作:
- 记忆存储: 将环境变化前一刻的全局最优解存入记忆库,若库满则替换适应度最低的记录。
- 信息重置: 强制将全局最优适应度设为负无穷,并重新计算所有粒子在变动后环境中的当前适应度。同时,将粒子的个体历史最优(PBest)重置为当前位置,由当前位置开始新一轮搜索。
- 粒子重构: 对每个子群中适应度排名靠后(最差)的
RecalcRatio 比例的粒子进行重置:
*
记忆唤醒: 优先从记忆库中提取历史解,并叠加微小的高斯噪声作为新位置。
*
随机注入: 若记忆库不足,则在搜索空间内随机生成新位置(模拟量子云/布朗运动),由于其速度被清零,这相当于向种群注入了纯粹的探索能力。
4. 进化迭代
在常规状态下,粒子遵循改进的 PSO 公式更新:
- 速度更新: 包含惯性部分、自我认知部分(指向 PBest)和社会认知部分(指向子群 GBest)。
- 量子扰动: 为了增强跳出局部的能力,每个粒子有 5% 的概率在更新速度后叠加一个基于
QuantumCloudRadius 的随机扰动向量。 - 位置限制: 严格限制粒子不能飞出预设的搜索边界。
- 协同更新: 每个子群独立更新其最优解,并同步更新整个系统的全局最优解。
5. 性能评估与可视化
- 误差计算: 每一代通过辅助函数获取当前 MPB 环境的理论绝对最大值,计算当前全局最优解与理论值的差值(Current Error),并累积为离线误差。
- 动态绘图: 每隔一定迭代步数(或环境变化时)刷新画布,通过网格计算生成等高线图,并标记理论最优路径轨迹。
关键算法与函数分析
主程序流程
算法主体采用
While 循环结构,严格控制最大迭代次数。内部逻辑高度模块化,清晰地分割了“环境监测”、“策略响应”和“标准进化”这三个阶段。
InitMPB / UpdateMPB (环境构建与更新)
这两个函数负责动态基准问题的数学模型。
- InitMPB: 初始化峰的中心坐标、高度和宽度。
- UpdateMPB: 实现环境的动态特性。所有峰的中心按照随机向量移动,并在触碰边界时反弹;高度和宽度也会叠加随机扰动,从而改变搜索空间的拓扑结构。
GetFitness (适应度计算)
实现了 MPB 的标准数学公式。对于空间中的任意一点,其适应度是由所有峰函数计算结果的最大值决定的。峰函数定义为 $H / (1 + W cdot d^2)$,呈现为一系列高高低低的山峰形状。
UpdateMemory (记忆更新)
采用“优胜劣汰”策略维护记忆库。当新的全局最优解出现且优于记忆库中最差的记录时,执行替换操作。这确保了记忆库始终保留历史上最具价值的搜索信息。
VisualizeSystem (可视化)
负责将抽象的数据转化为直观的图形。使用了
contourf绘制地貌,并实时更新粒子散点图和性能曲线图。为保证运行效率,绘图频率进行了降采样处理。