00 目录
1 改进思路
2 程序目录
3 问题导入
4 MATLAB程序实现
5 展望
01 改进思路
君主策略的遗传算法是在标准遗传算法的基础上针对选择和交叉进行改进,标准遗传算法的流程及其改进流程如下图所示。在选择和交叉操作时采用“君主策略”,即在对群体根据适应度值高低进行排序的基础上,取种群中最优个体设定为君主,再从种群中选择偶数项的个体作为母体与君主个体进行交叉,每次交叉产生两个新的个体。在交叉过后,对新产生的群体进行变异操作产生子群体,再计算其适应度值,然后和父群体合并,并且根据适应度值进行排序,取前sizepop个个体为新群体,进行下一次遗传操作。
02 程序目录
03 问题导入
3.1 问题描述
采用复杂的二元函数求最值问题
可以看出,该函数在取值范围内有大量局部极值,通常的寻优算法很容易陷入局部极值中或在极值间振荡,因此对于检验改进遗传算法的性能是比较合适的。
3.2 实验设计
为显示改进遗传算法较之标准遗传算法的优越性,本文针对该函数,分别对两种算法做仿真对比,并分别独立运行4次观察其进化过程。对于SGA部分,在作者往期的博客中已经做了详细叙述(SGA详述),对于改进的GA部分,主要介绍君主策略部分。
04 MATLAB程序实现
4.1 君主策略
君主策略部分在主程序中调用如下:
Emper_Select_Cross程序中的核心部分如下:
4.3 改进遗传算法主程序核心
4.4 结果分析
标准遗传算法运行4次的进化过程如下所示,
改进遗传算法运行4次的进化过程如图所示。
由图可知改进的GA较之GA得到的最优值更佳,收敛速度快,性能更好。但作者运行多次后也发现君主策略的GA运行结果并不稳定,有时表现也不佳,但绝大多数次数表现优于GA。
05 展望
本文是作者遗传算法改进之三,后续将继续更新有关遗传算法的改进,欢迎关注。若需获取源码,可在评论区发你的邮箱或者私信我,我看到了会发你。