基于萤火虫算法的非线性约束优化求解器
项目简介
本项目是一个基于MATLAB环境开发的智能优化算法项目,完整实现了
萤火虫算法(Firefly Algorithm, FA),专门用于求解包含等式和不等式约束的高维非线性优化问题。
项目模拟了自然界萤火虫的发光求偶与猎食行为,将“光强”映射为目标函数值,通过“吸引度”与距离的反比关系引导个体向更优解移动。为了处理非线性约束,系统集成了罚函数法(Penalty Function Method),将违反约束的程度转化为适应度惩罚,从而确保算法收敛至可行域内的全局最优解。
主要功能特性
- 标准萤火虫算法实现:包含光强计算、吸引度公式(基于指数衰减)、距离计算及位置更新公式。
- 非线性约束处理:内置罚函数机制(Penalty Function),支持等式约束与不等式约束,通过罚因子将约束违反量加入适应度评估。
- 自适应步长控制:实现了随即步长因子(alpha)的动态衰减机制,平衡搜索初期的全局探索能力与后期的局部开发能力。
- 可视化分析(针对2D问题):
*
收敛曲线:实时绘制适应度值的下降趋势。
*
2D 轨迹/等高线图:在目标函数等高线背景上绘制初始种群、最终种群及全过程搜索轨迹,并标记不可行区域。
*
3D 地貌图:以三维曲面展示目标函数,剔除不可行域,直观展示最优解位置。
- 多维扩展性:算法核心逻辑支持任意维度的决策变量(代码示例默认为2维以便演示可视化)。
算法实现细节与逻辑
本项目在 main 函数中完整构建了优化流程,具体逻辑如下:
1. 参数定义与初始化
- 种群设置:默认设置种群规模为50,最大迭代次数为100。
- 算法参数:
* 初始随机步长
alpha = 0.5,并设置衰减系数
alpha_damp = 0.98。
* 最大吸引度
beta0 = 0.2,光吸收系数
gamma = 1.0。
* 罚因子
penalty_factor = 1e5,用于强行拉回违反约束的个体。
- 问题模型:采用经典的 Rosenbrock 函数(香蕉函数)作为目标函数,并附加圆形约束 ($x_1^2 + x_2^2 leq 2$) 和线性约束 ($x_1 + x_2 > 0.5$)。
2. 适应度评估(核心机制)
代码通过
Evaluate 函数实现了约束处理:
- 计算原始目标函数值(Cost)。
- 计算约束违反程度(Violation):
* 不等式约束取
max(0, g(x)) 的平方和。
* 等式约束取
h(x) 的平方和。
- 构造适应度(Fitness):
Fitness = Cost + penalty_factor * Violation。
* 这种设计使得不满足约束的解拥有极大的适应度值(即亮度极低),从而失去对其他萤火虫的吸引力,且自身倾向于被吸引至可行域。
3. 主循环与位置更新
算法采用双重循环遍历所有萤火虫对 $(i, j)$:
- 亮度比较:仅当萤火虫 $j$ 的适应度优于(小于)$i$ 时,触发移动。
- 移动公式:
* $x_i^{new} = x_i + beta times (x_j - x_i) + alpha times text{随机扰动}$
* 其中 $beta = beta_0 times e^{-gamma r_{ij}^2}$,即距离越远,吸引力呈指数衰减。
- 贪婪更新策略:计算出新位置后,立即评估其适应度。仅当新位置优于旧位置时,才更新萤火虫 $i$ 的状态(这一策略增强了局部搜索的稳定性)。
- 边界限制:每次移动后强制检查并修正变量上下界。
4. 结果分析与可视化
程序运行结束后,通过
VisualizeResults 函数生成图表:
- 在2D等高线图中,通过计算网格点的约束情况,将不可行区域的目标函数值设为 NaN,从而在视觉上清晰划分可行域与禁忌域。
- 输出控制台报告,包括:耗时、最优解坐标、最优成本、约束违反度(理想应接近0)及可行性标志。
关键函数说明
- main(): 主程序入口。负责环境清理、参数初始化、主循环迭代控制以及最终结果的打印。
- CostFunction(x): 定义目标函数。当前实现为 Rosenbrock 函数,具有狭长的抛物线山谷,考验算法收敛能力。
- ConstraintFunction(x): 定义约束条件。返回不等式约束向量 $C$ 和等式约束向量 $Ceq$。
- Evaluate(x, Prob, Params): 评估器。封装了目标计算、约束检查、违反度累加及罚函数应用逻辑,是算法判断解优劣的唯一标准。
- VisualizeResults(...): 绘图引擎。根据维度判断是否绘制2D/3D空间分布图,始终绘制收敛曲线。
使用方法
- 打开 MATLAB 软件。
- 将包含本代码的
.m 文件放置于当前工作目录或路径中。 - 直接运行
main 函数。 - 观察命令窗口输出的迭代日志及最终优化结果。
- 查看弹出的图形窗口,分析萤火虫的聚类行为及收敛轨迹。
系统要求
- 软件:MATLAB R2016a 及以上版本(代码使用基础矩阵运算,无特定工具箱强依赖,但在绘图部分使用了标准图形句柄)。
- 硬件:标准计算配置即可,算法计算量适中。