JADE: Adaptive Differential Evolution withOptional External Archive
创始人
2024-02-05 07:44:36
0

0、论文背景

本文在DE的基础上,提出了一种新的差分进化(DE)算法JADE,通过实现一种新的突变策略DE/current-to-pbest,采用可选的外部存档参数的自适应更新,来提高优化性能。上述两种操作使种群多样化,并提高了收敛性能。

Zhang J, Sanderson A C. JADE: adaptive differential evolution with optional external archive[J]. IEEE Transactions on evolutionary computation, 2009, 13(5): 945-958.

 

 1、JADE

JADE是在DE的基础上提出来的,有关DE,参见博客:DE。JADE采用了DE/current-to-pbest的突变策略,F和CR的值采用外部存档的方式动态自适应更新,JADE算法流程图如下所示。

 

1.1 DE/current-to-pbest

DE/current-to-pbest是在DE/current-to-best/1的基础上改进得到的,DE/current-to-best/1:

\mathbf{v}_{i, g}=\mathbf{x}_{i, g}+F_{i} \cdot\left(\mathbf{x}_{\text {best }, g}-\mathbf{x}_{i, g}\right)+F_{i} \cdot\left(\mathbf{x}_{r 1, g}-\mathbf{x}_{r 2, g}\right)

但是它有个问题,会出现收敛过早的情况。为了解决这个问题,为了增加突变后种群的多样性,提出了DE/current-to-pbest:

\mathbf{v}_{i, g}=\mathbf{x}_{i, g}+F_{i}\left(\mathbf{x}_{\text {best }, g}^{p}-\mathbf{x}_{i, g}\right)+F_{i}\left(\mathbf{x}_{r 1, g}-\tilde{\mathbf{x}}_{r 2, g}\right)

其中x_{\text {best, } g}^{p}被随机选择为当前种群中前100p%的个体之一,p∈(0,1],p决定了突变策略的贪婪性,p越大,突变后种群的多样性越高。而\tilde{\mathbf{x}}_{r 2, g}是从P∪A中随机选择的,引入A也是想提高突变后种群的多样性。

A为存档的次等解的集合,P为当前的总体。在迭代过程中,在选择过程中失败的种群将被添加到A中。如果存档大小超过了一定的阈值(NP),那么将从存档中随机删除一些解决方案,以保持A(存档)大小在NP。

1.2 F和CR的自适应

CR采用正太分布随机数,\mu_{C R}的初始值设置为0.5:

C R_{i}=\operatorname{randn}_{i}\left(\mu_{C R}, 0.1\right)

\mu_{C R}的更新为:

\mu_{C R}=(1-c) \cdot \mu_{C R}+c \cdot \operatorname{mean}_{A}\left(S_{C R}\right)

其中c是0和1之间的正数,c控制参数自适应的速率。meanA(·)是通常的算术平均值。S_{CR}是每次选择成功后的种群的CR值集合。

F采用柯西分布随机数,因为与正态分布相比,柯西分布更有利于使突变因子多样化,从而避免了贪婪突变策略中经常发生的过早收敛,\mu _{F}的初始值设置为0.5:

\mu_{F}=(1-c) \cdot \mu_{F}+c \cdot \operatorname{mean}_{L}\left(S_{F}\right)

meanL(·)是Lehmer的平均值:

\operatorname{mean}_{L}\left(S_{F}\right)=\frac{\sum_{F \in S_{F}} F^{2}}{\sum_{F \in S_{F}} F}

Lehmer均值有助于传播更大的突变因子,而F越大,有助于增加种群多样性,防止过早收敛

2、算法的复现和简单实验

有关SaNSDE,请参见博客:SaNSDE。

JADE复现代码:

function [globalBest, globalBestFitness, FitnessHistory] = JADE(popsize, maxIteration,dim, LB, UB, Fun)Sol(popsize, dim) = 0;    % 种群的初始化和计算适应度值
Fitness(popsize) = 0;
for i = 1 : popsizeSol(i, :) = LB + (UB - LB) .* rand(1, dim);Fitness(i) = Fun(Sol(i, :));
end[fbest, bestIndex] = min(Fitness);    % 获得全局最优值以及对应的种群向量
globalBest = Sol(bestIndex, :); 
globalBestFitness = fbest; 
muCR = 0.5;    % 相关变量的初始化
muF = 0.5;
A = [];
p = 0.05;
c = 0.2;for time = 1 : maxIterationSF = [];SCR = [];for i = 1 : popsizeCR = normrnd(muCR, 0.1);    % 正太随机数%pd = makedist('tLocationScale', 'mu', muF, 'sigma', 0.1, 'nu', 1);% F = random(pd, 1, 1);    F = Cauchy_rand(muF, 0.1);    % 柯西随机数[~, sortIndex] = sort(Fitness);    % 随机选择前 popsize * p 对应的 xPBestsortSol = Sol(sortIndex, :);xPBest = sortSol(randi(p * popsize), :);r1 = randi(popsize);while r1 == ir1 = randi(popsize);endSolA = [Sol; A];r2 = randi(size(SolA, 1));while r2 == r1 || r2 == ir2 = randi(size(SolA, 1));endmutantPos = Sol(i, :) + F * (xPBest - Sol(i, :)) + F * (Sol(r1, :) - SolA(r2, :));    % 突变jj = randi(dim);  % 选择至少一维发生交叉for d = 1:dimif rand() < CR || d == jjcrossoverPos(d) = mutantPos(d);elsecrossoverPos(d) = Sol(i,d);endendcrossoverPos(crossoverPos>UB) = UB(crossoverPos>UB);     % 检查是否越界crossoverPos(crossoverPos popsizeA(randi(size(A, 1)), :) = [];    % 保持A的数目不超过popsizeendSCR = [SCR; CR];SF = [SF; F];Sol(i,:) = crossoverPos;Fitness(i) = evalNewPos;endendmuCR = (1 - c) * muCR + c * mean(SCR);muF = (1 - c) * muF + c * (sum(SF .* SF) / sum(SF));[fbest, bestIndex] = min(Fitness);globalBest = Sol(bestIndex,:);globalBestFitness = fbest;FitnessHistory(time) = fbest;    % 存储每次迭代的最优值
end
end
clc;clear;clearvars;
addpath('CEC2008\');
global initial_flag
initial_flag = 0;% 初始化变量维度,种群数,最大迭代次数,搜索区间,F,CR
dim = 30;
popsize = 100;
maxIteration = 1000;
LB = -100 * ones(1, dim);
UB = 100 * ones(1, dim);
F = 1;
CR = 0.9;[globalBest, globalBestFitness, FitnessHistory] = DE(popsize, maxIteration,dim, LB, UB, F, CR,  @(x)benchmark_func(x,1));
[globalBest1, globalBestFitness1, FitnessHistory1] = JADE(popsize, maxIteration,dim, LB, UB, @(x)benchmark_func(x,1));
[globalBest2, globalBestFitness2, FitnessHistory2] = SaNSDE(popsize, maxIteration,dim, LB, UB, @(x)benchmark_func(x,1));
plot(FitnessHistory);
hold on;
plot(FitnessHistory1);
hold on;
plot(FitnessHistory2);
legend('DE','JADE','SaNSDE','Location', 'northeast');

函数1测试结果:

函数2测试结果:

 

函数3测试结果:

 

 如有错误,还望批评改正!

相关内容

热门资讯

写父亲的作文 写父亲的作文(精选60篇)  在日复一日的学习、工作或生活中,大家都不可避免地要接触到作文吧,借助作...
我要自由作文 我要自由作文(4篇)  在平平淡淡的学习、工作、生活中,大家都不可避免地会接触到作文吧,通过作文可以...
难忘的旋律作文800字 难忘的旋律作文800字  "歌曲最重要的是用情感打动人,很多听众和我说他们感觉《懂你》唱给恋人也合适...
玩的作文400字 关于玩的作文400字(通用30篇)  在日常学习、工作抑或是生活中,大家都经常看到作文的身影吧,借助...
随笔作文 随笔作文随笔我不知道梦想是什么颜色,也许它自有自己的颜色,我不知道风往哪里吹,也许它自有自己的方向,...
曾经那个少年作文 曾经那个少年作文(精选22篇)  在现实生活或工作学习中,大家都跟作文打过交道吧,通过作文可以把我们...
垃圾分类的重要性优秀作文40... 垃圾分类的重要性优秀作文400字  我是一个垃圾桶,整天在角落收垃圾,一天到晚都挺着一个“啤酒肚”,...
我最爱看的电视栏目250字作... 我最爱看的电视栏目250字作文我最爱看的电视栏目是少儿频道的《熊出没》。原因:因为这部动画片很好玩,...
爱玩乐器的爸爸作文 爱玩乐器的爸爸作文爱玩乐器的爸爸··· 韩鹦我的爸爸是一个非常喜欢音乐的人,他特别擅长吹、拉、弹各种...
让我再看你一眼作文 让我再看你一眼作文  在日常学习、工作抑或是生活中,许多人都有过写作文的经历,对作文都不陌生吧,借助...
20年后的世界想象作文 20年后的世界想象作文  在日常的学习、工作、生活中,大家对作文都再熟悉不过了吧,写作文可以锻炼我们...
雨优秀作文 【荐】雨优秀作文  在日常学习、工作和生活中,大家都经常看到作文的身影吧,作文根据写作时限的不同可以...
春天作文 关于春天作文(通用15篇)  在日复一日的学习、工作或生活中,大家总少不了接触作文吧,作文是一种言语...
给老师“画像”_我的老师作文... 给老师“画像”_我的老师作文600字  无论是在学校还是在社会中,许多人都有过写作文的经历,对作文都...
我喜欢的水果西瓜作文 我喜欢的水果西瓜作文我喜欢的水果西瓜我最喜欢的水果就是西瓜了。今天正好是星期天,我的奶奶到市场去给我...
秋收的作文600字 秋收的作文600字(精选32篇)  在日常学习、工作或生活中,大家都不可避免地会接触到作文吧,作文是...
蛇作文 蛇作文大家一听到蛇,想蛇全有毒,有些人并不这样认为,因为蛇分为两种,一种是有毒蛇,另一种是无毒蛇。有...
取长补短作文450字 取长补短作文450字  一天,我像往常一样带着小狗花花和小猫京京去宠物食品店买东西。我给小猫京京买了...
走进图书馆作文800字 走进图书馆作文800字(通用7篇)  在日常学习、工作或生活中,大家都接触过作文吧,作文根据写作时限...
感动常在作文 感动常在作文通用15篇  在平时的学习、工作或生活中,大家都写过作文吧,作文是从内部言语向外部言语的...