冠军算法-JADE(具有可选外部存档的差分进化算法)-公式原理详解与性能测评 附Matlab代码

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~

目录

原理简介

一、变异策略 DE/current-to-pbest

二、交叉(Crossover)

三、选择(Selection)

四、自适应参数更新

算法伪代码

性能测评

部分代码展示

完整代码获取


今天给大家带来一期CEC冠军算法介绍!冠军算法一般指国际进化计算大会(CEC)中的Top算法(一般为前三),计算机领域也经常成为SOTA算法。通常来说,这些算法通常也是差分进化算法的变体,因为差分进化算法的性能属于非常经典的进化算法,有很强的进化能力。

我们要介绍的算法,JADE由Jingqiao Zhang于2009年发表于SCI一区顶刊《IEEE TRANSACTIONS ON EVOLUTIONARY COMPUTATION》上!它通过引入外部档案库和自适应地更新控制参数,实现了DE/current-to-pbest的变异策略,提高了优化性能。而可选的存档操作利用历史数据提供了前进方向的信息。

本期代码在CEC2017上进行测试,函数格式均已调整成经典的6输入3输出格式,如果大家需要替换成自己的对比算法非常方便!

您只需做的工作:一键运行main文件即可出图!非常适合新手小白!

原理简介

一、变异策略 DE/current-to-pbest

JADE 定义了“DE/current-to-pbest”如下(无外部存档时):

其中:𝐱𝑝_𝑏𝑒𝑠𝑡,𝑔从当前种群按目标函数值排序后排在前100𝑝%的精英解中随机选出,𝐱𝑟1,𝑔和𝐱𝑟2,𝑔分别从当前种群随机选出,且与𝐱𝑖,𝑔不同;𝐹𝑖为第𝑖个个体对应的变异因子。

如果启用了外部存档 𝐴,则有:

其中𝐱˜𝑟2,𝑔从(𝑃 ∪𝐴)中随机选取,𝑃为当前种群,𝐴为外部存档(存储上代被淘汰的个体,容量通常限制在𝑁𝑃以内)。

二、交叉(Crossover)

采用二进制交叉(binomial crossover)生成子代向量 𝐮𝑖,𝑔:

其中𝑗𝑟𝑎𝑛𝑑是在[1,𝐷]随机选出的整型索引,𝐶𝑅𝑖为交叉概率。

三、选择(Selection)

在第𝑔代,若子代𝐮𝑖,𝑔的适应度优于父代𝐱𝑖,𝑔,则令𝐱𝑖,𝑔+1 =𝐮𝑖,𝑔;否则保持父代不变。若启 用了存档,则把被淘汰的父代𝐱𝑖,𝑔放入存档𝐴。

四、自适应参数更新

JADE中,每个个体𝑖的𝐹𝑖和𝐶𝑅𝑖都是从某一分布中随机生成的,并在迭代中持续“学习”成功参数。设𝜇𝐹和𝜇𝐶𝑅分别是这两种分布的中心,初始都为0.5。

对交叉概率 𝐶𝑅𝑖:

生成后若超出 [0,1] 则截断。收集本代中所有成功(即子代优于父代)的 𝐶𝑅𝑖 于 集合 𝑆𝐶𝑅,在代末更新:

其中 0<𝑐<1 为学习率,mean(⋅) 表示算术平均值。

对变异因子 𝐹𝑖:

分布为截断柯西分布,若 𝐹𝑖≤0 则重采样,若 𝐹𝑖≥1 则可截断为 1。收集所有 成功的 𝐹𝑖 于集合 𝑆𝐹,在代末更新:

其中 meanL(⋅) 为 Lehmer 均值:

通过以上机制,JADE 可以在保证利用精英解方向信息的同时,保留足够多样性,结合外部存档还能进一步获取更多差分向量以防止早熟收敛,整体表现出较好的全局搜索效率与可靠性。

算法伪代码

为了使大家更好地理解,这边给出作者算法的伪代码,非常清晰!

如果实在看不懂,不用担心,可以看下源代码,再结合上文公式理解就一目了然了!

性能测评

为了方便大家对比与理解,我们采用29个CEC2017函数,设置种群数量为30,迭代次数为500,和原始且经典的差分进化算法进行对比!这边展示其中5个测试函数的图,其余几十个个测试函数大家可以自行切换尝试!

可以看到,这个算法在DE算法的基础上有很大的改进,大部分函数上均优于DE算法,表明其寻优能力非常强!大家应用到各类预测、优化问题中也是一个不错的选择~

部分代码展示

%%  清除环境变量
clear
clc
close all
addpath(genpath(pwd));

%%  参数设置
pop_size = 30;                                % 种群规模
max_iter = 500;                               % 最大迭代次数
Function_name = 'F1';                         % CEC2017测试函数: F1,F3-F30(F2被删除,勿选)
[lb, ub, dim, fobj] = CEC2017(Function_name); % 加载所选基准函数的详细信息

%%  运行各算法
[JADE_Best_score,~,JADE_curve] = JADE(pop_size,max_iter,lb,ub,dim,fobj);
[DE_Best_score,~,DE_curve] = DE(pop_size,max_iter,lb,ub,dim,fobj);

%%  显示结果
display(['JADE在函数' [num2str(Function_name)],'上的最优值', num2str(JADE_Best_score)]);
display(['DE在函数' [num2str(Function_name)],'上的最优值', num2str(DE_Best_score)]);

%% 画图
figure1 = figure('Color',[1 1 1]);
G1=subplot(1,2,1,'Parent',figure1);

完整代码获取

如果需要以上完整代码,只需点击下方小卡片,再后台回复关键字,不区分大小写:

JADE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值