AADGA - 自适应梯阶小生境遗传算法项目介绍
本项目旨在解决复杂多峰数学函数的全局优化问题。在多峰景观中,传统遗传算法往往容易收敛至单个局部最优解,而忽略了其他同样具有重要参考价值的峰值。本程序通过集成自适应策略与小生境共享机制,能够在一个演化周期内同时定位并保留多个全局及局部最优解,有效防止了算法的早期收敛和遗传漂变现象。
功能特性
- 多峰并行搜索:利用小生境共享技术,个体能够分布式地在参数空间的不同波峰处聚集,实现对多个极值的同步探索。
- 自适应概率调节:交叉概率与变异概率并非固定,而是根据个体适应度和当前种群状态动态调整,平衡了算法的探索与开发能力。
- 梯阶变异步长:引入随进化代数增加而呈平方关系缩减的变异步长控制机制,确保前期在大范围搜索,后期在小邻域精确定位。
- 自动优解识别:内置后处理聚类逻辑,能够从最终种群中自动提取并筛选出相互独立的优秀解集。
- 结果可视化:提供直观的进化曲线图和多峰函数热力图,清晰展示种群聚集过程及物理定位。
使用方法
- 环境配置:确保 MATLAB 环境中已安装基础工具箱(涉及统计与可视化功能)。
- 执行程序:在 MATLAB 命令行窗口中直接运行主函数程序即可开始演化计算。
- 参数自定义:用户可根据具体需求修改程序开头的参数设置部分,如调整种群规模、共享半径或迭代次数。
- 结果查看:程序执行完毕后将自动弹出两个图形窗口,分别展示收敛轨迹和解的分布情况,并在控制台输出运行时间与识别出的解。
系统要求
- MATLAB R2016a 或更高版本。
- 建议配备 Statistics and Machine Learning Toolbox(用于距离矩阵计算)。
实现逻辑说明
本程序的执行核心遵循以下逻辑流程:
- 初始环境构建:
程序首先定义了搜索空间(-10 到 10 的二维平面),并设置了包含种群规模(100)、最大代数(200)以及演化相关的控制参数。
- 适应度转换机制:
由于目标函数 Shubert 函数是求极小值,程序将原始函数值映射为正向适应度。映射逻辑采用当前代最大值减去个体值,并加入微波偏置,确保所有适应度为正以便后续的选择操作。
- 小生境共享实现:
这是本算法的核心。程序通过计算种群中两两个体间的欧氏距离,构建距离矩阵。根据共享半径 SigmaShare 和形状参数 Alpha 计算每个个体的共享函数值。最终通过原始适应度除以共享函数之和,实现对过载区域个体的惩罚,从而促使种群向未充分搜索的区域扩散。
- 轮盘赌选择:
基于调整后的共享适应度进行比例选择,保证了适应度高且稀有的个体有更大概率进入下一代。
- 算子自适应调整:
程序根据每代中个体的适应度与平均适应度的对比情况,动态计算交叉率和变异率。对于优于平均水平的个体,采用较低的变率以保留优良基因;对于差于平均水平的个体,则采用较高的变率以加速其进化。
- 梯阶变异搜索:
变异操作结合了当前的进化代数。变异步长随代数增加而减小(基于 (1 - gen/MaxGen)^2 ),这被称为梯阶演化策略。变异方向在维度空间内随机生成,确保搜索的全面性。
- 优解聚类与识别:
在演化结束后,程序设定了一个 5% 的适应度门槛来筛选优秀个体。随后,通过距离判别逻辑对这些个体进行聚类:如果两个优秀解之间的距离小于共享半径的一半,则视为同一个波峰的解,最终只保留独立的多个最优解。
关键算法与实现细节分析
- 目标函数:采用经典的多峰测试函数 Shubert 函数,该函数在定义的区域内存在数百个局部极值和多个并列的全局极值,是检验小生境算法性能的理想工具。
- 共享函数公式:程序采用幂函数形式的分享函数(1 - (d/Sigma)^Alpha),这使得小生境内的抑制力随距离增加而平滑衰减。
- 边界保护:每一代演化结束后,程序都会执行强制边界检查,确保所有个体位置始终保持在定义的 Lb 和 Ub 范围内,防止算法发散。
- 绘图逻辑:利用 imagesc 生成背景热图,配合 contour 等高线图,真实还原了复杂的函数地形,并用不同颜色和形状区分普通个体与最终识别出的识别优解。