基于MATLAB的萤火虫算法通用优化仿真系统
项目简介
本项目是一个基于MATLAB环境开发的元启发式群智能优化系统,完整实现了标准萤火虫算法(Firefly Algorithm, FA)。该系统模拟了自然界中萤火虫利用荧光吸引配偶或猎物的生物学行为,通过个体间的亮度差异产生吸引力,从而引导种群向搜索空间中的更优解移动。项目代码结构清晰,集成了核心算法逻辑、多基准测试函数接口以及可视化分析工具,适用于解决各类单目标连续函数优化问题。
功能特性
- 标准萤火虫算法实现:包含光强计算、吸引度衰减、位置移动及随机扰动等核心机制。
- 多测试函数集成:内置了Sphere、Rosenbrock、Rastrigin、Ackley四种经典基准测试函数,支持通过工厂模式快速切换。
- 自适应步长控制:引入了模拟退火思想,通过衰减系数动态调整步长因子,平衡算法的全局探索与局部开发能力。
- 高维优化支持:默认针对30维的高维问题进行优化,且代码支持任意维度的扩展。
- 可视化分析:
*
收敛曲线:对数坐标显示适应度下降趋势。
*
搜索景观图:通过降维投影绘制3D函数景观及最终种群分布位置。
系统要求
- MATLAB R2016a 及以上版本(代码主要使用基础数学函数及绘图功能,无特定工具箱强依赖)。
使用方法
- 打开MATLAB软件,定位到项目所在目录。
- 直接运行主程序脚本。
- 程序将自动执行优化过程,在命令行窗口实时输出每10代的迭代进度及最优适应度值。
- 运行结束后,系统将打印最终的优化结果(包括搜索到的最优值、坐标及运行时间),并弹出图形窗口展示收敛曲线和搜索空间分布。
如何自定义配置:
- 切换测试函数:修改主程序中配置部分的
FunName 变量(可选:'Sphere', 'Rosenbrock', 'Rastrigin', 'Ackley')。 - 调整算法参数:修改
Para 结构体中的数值,如种群规模 n、最大迭代次数 MaxGen 或光吸收系数 gamma。
代码实现与算法逻辑分析
本项目的所有功能逻辑均封装在一个单一的脚本文件中,主要包含以下几个核心模块:
1. 参数配置与问题定义
程序首先定义了算法的关键超参数:
- 种群规模 (n):设定为30只萤火虫。
- 最大迭代次数 (MaxGen):设定为100代。
- 随机化参数 (alpha):初始步长因子,控制随机游走范围。
- 衰减系数 (damp):设定为0.98,用于在迭代过程中逐渐减小alpha值,使算法后期趋于稳定。
- 吸引度参数:包含最大吸引度 (beta0) 和光吸收系数 (gamma),决定了光强随距离衰减的程度。
同时,代码通过辅助函数获取目标函数的句柄、维度(默认为30维)以及搜索空间的上下界(lb, ub),并对边界进行了向量化处理以适配高维计算。
2. 种群初始化
算法使用均匀分布随机数在搜索空间范围内生成初始种群位置。初始化后,立即计算每只萤火虫的目标函数值作为其初始光强(Lightn)。在最小化问题中,函数值越小表示亮度越高。程序会在此阶段记录初始的全局最优解。
3. 核心优化循环
这是算法的主体部分,通过双重循环遍历每两只萤火虫(i 和 j):
- 决策机制:仅当萤火虫 j 的亮度高于(适应度值优于)萤火虫 i 时,i 才会向 j 移动。
- 距离计算:采用欧氏距离计算两只萤火虫在多维空间中的距离。
- 吸引度模型:根据公式
beta = beta0 * exp(-gamma * r^2) 计算吸引力,距离越远吸引力呈指数级衰减。 - 位置更新:萤火虫 i 的新位置由三部分组成:
1.
当前位置。
2.
吸引移动项:向较亮萤火虫 j 靠近的分量,受 beta 系数加权。
3.
随机扰动项:引入随机向量并乘以动态步长 alpha 和搜索空间尺度,增加种群多样性,防止早熟收敛。
- 边界控制:更新后的位置会被强制约束在定义好的上下界 [lb, ub] 之间。
- 贪婪更新策略:位置移动后,计算新位置的适应度值。代码采用了贪婪策略,只有当新位置的适应度值优于当前值时,才更新该萤火虫的亮度记录。
在每一代循环结束后,程序会更新全局最优解,并利用衰减系数
damp 缩小步长
alpha,同时记录当代的最佳适应度用于后续绘图。
4. 辅助功能模块
为了保持主流程简洁,代码通过两个内部函数实现了特定功能:
- 函数工厂 (GetFunctionDetails):通过 switch-case 结构管理不同的测试函数。每个分支返回对应的函数句柄、维度及搜索边界。包括单峰函数(Sphere, Rosenbrock)和多峰函数(Rastrigin, Ackley)。
- 景观绘图 (PlotLandscape):为了在二维屏幕上展示高维数据,该函数固定了第3维及之后的维度数据,仅变化前两个维度生成网格数据,绘制出3D地形图(Meshc)。同时,将最终种群位置和全局最优解投影到该三维图上,直观展示聚类效果。
5. 结果可视化
程序最后会生成一个包含两个子图的窗口:
- 子图1:绘制半对数收敛曲线,展示最优适应度随迭代次数的变化,用于评估收敛速度。
- 子图2:绘制搜索空间景观及种群分布,红色五角星标记找到的全局最优位置,黑色点代表最终的萤火虫个体分布。