基于MATLAB的可自定义目标函数自适应遗传算法优化系统
项目介绍
本项目实现了一个基于MATLAB的高度灵活的自适应遗传算法(Adaptive Genetic Algorithm, AGA)框架。该系统旨在通过动态调整演化算子来解决复杂的非线性、多峰值全局优化问题。与传统遗传算法固定概率的策略不同,本项目根据种群中个体的适应度分布情况,利用自适应机制实时调整交叉和变异概率,从而在搜索早期保持种群多样性,并在搜索后期加速收敛,有效平衡了算法的全局探索(Exploration)与局部开发(Exploitation)能力。
功能特性
- 自适应概率调整: 引入Srinivas自适应公式,根据个体目标函数值与种群平均值的关系,动态计算每一对亲代和每一个个体的变异、交叉概率。
- 高度通用的接口: 核心逻辑通过函数句柄(Function Handle)调用目标函数,用户通过一行代码即可更换待优化的数学模型或工程参数。
- 实数编码机制: 采用实数编码而非二进制编码,避免了编解码带来的精度损失,直接在决策变量空间进行算术交叉和变异。
- 精英保留策略: 自动识别并保存当前代的最优解,并强制替换下一代中最差的个体,确保算法的收敛稳定性,防止最优解在遗传迭代中丢失。
- 全方位可视化: 提供实时收敛曲线绘制(最优个体值与种群平均值对比),并针对二维优化问题提供直观的目标函数地形图和最优解空间分布图。
实现逻辑与算法细节
该程序将遗传算法的各核心步骤集成在同一主逻辑中,确保了执行效率和逻辑紧凑性:
- 参数初始化:
设定决策变量的维度、上下界、种群规模(默认100)及演化代数。定义自适应控制比例常数(k1-k4),这些常数决定了交叉与变异概率的上下限,是自适应调节的基础。
- 种群初始化:
在定义的解空间内,通过均匀分布随机生成初始种群个体(实数向量)。
- 适应度评估与转化:
计算所有个体的目标函数值(Cost)。由于项目面向极小值优化,程序通过计算当前种群的最大、最小及平均目标函数值,将原始函数值转化为用于选择依据的适应度得分。
- 选择算子(Selection):
采用轮盘赌选择机制(Roulette Wheel Selection)。个体的低函数值(即高适应度)对应更高的被选概率,通过累积概率分布确定进入下一代的个体。
- 自适应交叉算子(Crossover):
遍历选定的亲代,比较亲代目标函数值与平均值的关系:
* 若亲代中较优者性能好于平均水平,则采用Srinivas改进公式,依据其优良程度线性调节交叉概率,以保护优良基因。
* 若亲代均低于平均水平,则使用高交叉概率以促进新基因的产生。
* 操作方式:采用算术交叉,通过权重因子 alpha 混合亲代基因。
- 自适应变异算子(Mutation):
对种群中的每一个个体进行判断:
* 若个体优于平均值,根据其与最优解的接近程度降低变异概率。
* 若个体较差,则增大变异概率以防止算法陷入局部最优(局部极值点)。
* 操作方式:随机选择一个个体维度,在定义的上下界范围内重新进行空间采样。
- 结果输出与绘图:
计算运行总耗时,记录每一代的最佳解和平均解,并在循环结束后自动生成收敛曲线图。
使用方法
- 修改目标函数: 在程序顶部的参数设置区域,找到定义的函数句柄(obj_func),将其后的数学表达式修改为您需要优化的函数。支持多维向量输入。
- 设置变量范围: 根据问题的实际需求,修改变量维度(dim)、下界(lb)和上界(ub)。
- 调整算法参数: 根据不同问题的复杂程度,可调整种群规模和进化代数。
- 运行程序: 在MATLAB环境中直接运行脚本,控制台将输出最优解和计时信息,并自动弹出收敛过程的可视化窗口。
系统要求
- 软件环境: MATLAB R2016b 或更高版本。
- 工具箱要求: 仅依赖MATLAB基础库,无需额外安装全局优化工具箱。
- 性能建议: 针对多维复杂问题,系统会自动在内存中分配空间进行矩阵运算,建议内存不低于4GB。