基于遗传算法的一元函数寻优仿真系统
项目简介
本项目是一个基于 MATLAB 环境开发的遗传算法(Genetic Algorithm, GA)仿真工具,专门用于解决一元非线性多峰函数的全局最大值寻优问题。系统完整实现了从种群初始化、基因编码、适应度评估到选择、交叉、变异的生物进化全过程。通过直观的动态可视化界面,用户可以实时观察种群在目标函数曲线上的搜索分布以及算法的收敛趋势,非常适合用于演化计算的教学演示、算法分析及工程优化问题的求解。
功能特性
- 一元非线性函数寻优:针对具有多个局部极值的复杂非线性函数(如 $f(x) = x + 10sin(5x) + 7cos(4x)$)能够有效跳出局部最优,寻找全局最大值。
- 完整的遗传算法流程:实现了标准的遗传算法算子,包括二进制编码、轮盘赌选择、单点交叉和基本位变异。
- 高效的矩阵化运算:代码主要逻辑采用 MATLAB 的矩阵运算方式(如向量化解码、掩码变异),保证了算法的执行效率。
- 实时动态可视化:
*
种群分布图:在目标函数曲线上实时绘制当前代种群的散点分布,并用特殊标记突显当前最优个体。
*
收敛曲线图:动态绘制每一代的最优适应度和平均适应度变化曲线,直观展示算法收敛性。
- 鲁棒的适应度处理:内置适应度变换机制,能够处理目标函数值为负数的情况,确保选择操作的稳定性。
系统要求
- MATLAB R2016b 或更高版本
- 无需额外的工具箱(Toolbox),本程序基于原生 MATLAB 函数编写。
使用方法
- 确保 MATLAB 的当前工作路径包含主要的脚本文件。
- 直接运行主函数(即
main 函数)。 - 程序将自动根据预设参数启动进化过程,弹出绘图窗口展示动态寻优过程。
- 运行结束后,控制台将输出全局最优解(X)和目标函数极大值(Y),并在图形窗口中标注最终结果。
代码实现与算法细节
本项目的核心逻辑封装在一个主逻辑流程和四个关键子功能模块中,完全自包含,无外部依赖。
1. 核心参数配置
代码头部预设了算法的关键控制参数(
GA_Params 结构体):
- 种群规模 (PopSize):50,决定了单代搜索的并发能力。
- 染色体长度 (ChromLen):22,决定了自变量的离散化精度(搜索空间的细分粒度)。
- 最大迭代次数 (MaxGen):100,进化的总代数。
- 交叉概率 (Pc):0.7,控制种群信息交换的频率。
- 变异概率 (Pm):0.05,控制引入新基因、维持多样性的频率。
- 搜索范围 (Range):[0, 10],定义了自变量 X 的定义域。
2. 初始化与编码
系统采用
二进制编码方式。初始化阶段生成一个 50行 × 22列 的随机 0-1 矩阵,每一行代表一个个体(染色体),每一列代表一个基因位。
3. 主循环逻辑 (进化过程)
程序通过
for 循环执行
MaxGen 次迭代,每一次迭代包含以下步骤:
调用解码子函数,将二进制矩阵转换为实数域的自变量值。解码使用了线性映射公式,将二进制整数值映射到 [0, 10] 区间内。
* 计算目标函数值作为原始适应度。
*
非负化处理:由于采用轮盘赌选择,适应度必须非负。程序自动检测当前种群的最小适应度值
min_fit,如果存在负值,则通过平移操作(减去最小值并加上一个微小量
1e-4)将所有适应度转换为正数。
记录当前代的全局最大值、对应的自变量值以及种群平均适应度,用于后续分析。如果当前代的最优值超过了历史全局最优,则更新全局最优记录。
利用
set 命令高效更新图形对象的
XData 和
YData,而不是重复创建图形对象,实现了流畅的动画效果。
* 上方子图:显示目标函数曲线、当前种群散点(红色)、当前最优个体(绿色五角星)。
* 下方子图:显示最优适应度(蓝线)和平均适应度(红虚线)的走势。
依次执行选择、交叉、变异三个核心操作,生成下一代种群。
4. 关键算法子函数解析
利用向量化权重向量 $[2^{L-1}, dots, 2^0]$ 将二进制矩阵转换为十进制向量,再按比例缩放至定义的自变量取值范围。公式为:
$x_{real} = Lower + Decimal times frac{Upper - Lower}{2^L - 1}$
- 选择函数 (Selection) - 轮盘赌策略:
计算每个个体的相对适应度概率,构建累积概率分布。通过生成随机数并在累积概率中进行查找(
find),模拟转盘选择过程。适应度越高的个体被选中的概率越大,这保证了优良基因的遗传。
遍历种群,以步长为2选取相邻的一对个体。根据交叉概率
Pc 判断是否进行交叉。如果交叉,则在
[1, L-1] 范围内随机选取一个交叉点,交换两点之后的所有基因片段。
生成一个与种群大小相同的随机掩码矩阵。根据变异概率
Pm,将掩码中对应位置的基因进行翻转(0变1,1变0)。代码使用了
abs(Pop - 1) 的数学技巧来实现高效的位翻转。
结果输出
算法运行结束后,系统会提供以下输出:
- 控制台文本:汇总显示总进化代数、种群规模、找到的全局最优解 X 以及对应的最大函数值 Y。
- 图形标注:在上方子图的目标函数曲线上,通过文本框明确标记出最终计算得到的最优解坐标。