速成 | 自适应遗传算法及其MATLAB实现

在这里插入图片描述
在这里插入图片描述

尽管遗传算法在诸多领域获得了成功运用,但在解决一些复杂实际问题时依然存在未成熟收敛和收敛速度慢等问题。随着种群的不断进化,个体之间变得高度相似从而导致进化停滞,最终算法收敛于局部最优解,发生了未成熟收敛。因此本文将尝试应用自适应遗传算法提高遗传算法寻优性能。

00 目录

1 改进思路
2 程序目录
3 问题导入
4 MATLAB程序实现
5 展望

01 改进思路

由于交叉概率Pc 和变异概率Pm 很难找到适应不同问题的固定最优值,其取值的大小会直接影响GA 的收敛速度和性能,因此Srinivas 等提出了一种自适应遗传算法(Adaptive Genetic Algorithm,AGA)[ SRINIVAS M,PATNAIK L M. Adaptive probabilities of crossover and mutation in genetic algorithms[J]. IEEE Transactions on Systems,Man,and Cybernetics, 1994,24(4):656-667.],交叉概率和变异概率可随个体适应度值变化,相对于固定的交叉和变异概率具有更好的全局性。具体操作如下:

如果某一代个体的适应度函数大于适应度函数平均水平,则表明该个体性能佳,应该降低交叉与变异概率,尽可能保留该个体的优良基因;反之,需要对其进行加速交叉与变异,将其快速淘汰。提出的交叉概率和变异概率自适应过程为:

自适应交叉率模型:
在这里插入图片描述

自适应变异率模型:
在这里插入图片描述

其中,px1、px2为遗传算法的最大交叉概率和最小交叉概率,py1、py2为遗传算法的最大变异概率和最小变异概率,fmax和faverage为适应度最大值和平均值,fa、fb为个体适应度。

在此基础上,本文增加了保护最优个体与加速淘汰较差个体的操作,取种群适应度前N个个体进行保护,将种群适应度后N个个体用前N个替代进行淘汰,将这popsize-N个个体进行轮盘赌选择、交叉、变异,再继续适应度排序,如此反复。通过这样的操作,能够加速种群的优胜劣汰,同时自适应的交叉变异能够使种群保持全局性。
在这里插入图片描述

02 程序目录

在这里插入图片描述

03 问题导入

3.1 问题描述

采用复杂的二元函数求最值问题
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

可以看出,该函数在取值范围内有大量局部极值,通常的寻优算法很容易陷入局部极值中或在极值间振荡,因此对于检验改进遗传算法的性能是比较合适的。

3.2 实验设计

为显示改进遗传算法较之标准遗传算法的优越性,本文针对该函数,分别对两种算法做仿真对比,并分别独立运行4次观察其进化过程。

04 MATLAB程序实现

该算法主程序框架与SGA相似,这里主要介绍保优、自变异、自交叉的程序。

可关注作者公主号获取相关代码:KAU的云实验台

4.1 保优操作

保优部分在主程序中调用如下:
在这里插入图片描述

其程序的核心部分如下:
在这里插入图片描述

4.2 自变异操作

自变异部分在主程序中调用如下:
在这里插入图片描述

其程序的核心部分如下:

## 4.3 自交叉操作

自交叉部分在主程序中调用如下:在这里插入图片描述

其程序的核心部分如下:
在这里插入图片描述

4.4结果分析

标准遗传算法运行4次的进化过程如下所示,在这里插入图片描述

其中某一次的迭代结束后的最佳种群编码:
在这里插入图片描述

自适应遗传算法运行4次的进化过程如下所示,在这里插入图片描述

其中某一次的迭代结束后的最佳种群编码:
在这里插入图片描述

由图可知改进的GA较之GA得到的最优值更佳,SGA易陷入局部最优导致早熟,也很难跳出局部最优解,而自适应遗传算法能够有更出色的寻优能力,收敛也较快。

05 展望

本文是作者遗传算法改进之四,后续将继续更新有关遗传算法的改进,欢迎关注。

猜你喜欢

转载自blog.csdn.net/sfejojno/article/details/131184133