0、论文背景

本文在DE算法的基础上,提出了一种自适应的差分进化算法(SaDE)。其中学习策略的选择和两个控制参数F和CR不需要预先指定

Qin A K, Suganthan P N. Self-adaptive differential evolution algorithm for numerical optimization[C]//2005 IEEE congress on evolutionary computation. IEEE, 2005, 2: 1785-1791.

1、SaDE

DE算法相关知识参见博客:DE 。

1.1 learning strategy

这里主要针对突变操作采用了两个策略:

上述两个策略侧重点不一样,其中,策略1通常表现出良好的多样性,而策略2则表现出良好的收敛性, 为了平衡全局搜索和局部搜索,本文采用两种方式组合的方式。

该策略的思路:

  • 首先初始化两个策略被采用的概率,p1 = 0.5,p2 = 0.5,ns1 = 0,ns2 = 0,nf1 = 0,nf2 = 0。
  • rand()函数随机产生一个数,小于p1,采用策略1对该个体进行突变操作;否则,采用策略2。
  • 在选择操作完成后,运用策略1产生的突变个体保留了下来,ns1加1,没有保留下来,nf1加1;运用策略2产生的突变个体保留了下来,ns2加1,没有保留下来,nf2加1。
  • 算法迭代50次后,更新p1和p2;同时重置:ns1 = 0,ns2 = 0,nf1 = 0,nf2 = 0。

1.2 自适应F值

F值设置需要有一个较大的灵活性,因为F值与收敛性有关,F值越大,种群多样性越好;F值越小收敛性越好。在这里F值是采用正态分布随机生成的:

1.3 自适应CR值

良好的CR参数值通常在较小的范围内,因此,我们考虑在一定的生成间隔内积累以往的学习经验,从而动态调整CR值到一个合适的范围。CR值的产生也是采用正态分布随机产生的:

该策略的思路:

  • 首先初始化CRm参数,CRm = 0.5。
  • 然后根据正态分布产生每个个体交叉过程中的CR。
  • 在选择过程完成后,记录成功进入下一代的个体对应的CR值。
  • 在迭代5次之后,在CRm不变的情况下,根据正态分布重新产生每个个体交叉过程中的CR。
  • 在迭代25次之后,更新CRm为所有成功进入下一代后的个体对应的CR值的均值,同时清空所有记录的CR值。

2、算法的实现以及简单实验

DE和NSDE相关实现在博客中有展示:NSDE

function [globalBest, globalBestFitness, FitnessHistory] = SaDE(popsize, maxIteration,dim, LB, UB, Fun)
% 种群的初始化和计算适应度值
Sol(popsize, dim) = 0; % Declare memory.
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;% 策略学习初始化值的设置
p1 = 0.5;
ns1 = 0;
ns2 = 0;
nf1 = 0;
nf2 = 0;
CRm = 0.5;
CRQ = normrnd(CRm,0.1,[popsize,1]);
CRRecord = [];% 开始迭代
for time = 1:maxIterationfor i = 1:popsize% 突变F = normrnd(0.5,0.3);  %正太分布随机数if F < 0F = 0.0001;elseif F > 2F = 2;endif rand() <= p1r = randperm(popsize, 3);   %策略1mutantPos = Sol(r(1),:) + F * (Sol(r(2),:) - Sol(r(3),:));%在1~pop中随机选择3个数组成一个数组tag = 1;elser = randperm(popsize, 2);   %策略2mutantPos = Sol(i,:) + F * (globalBest - Sol(i,:)) + F * (Sol(r(1),:) - Sol(r(2),:));tag = 2;end% 交叉jj = randi(dim);  % 选择至少一维发生交叉CR = CRQ(i,1);for d = 1:dimif rand() < CR || d == jjcrossoverPos(d) = mutantPos(d);elsecrossoverPos(d) = Sol(i,d);endend% 检查是否越界.crossoverPos(crossoverPos>UB) = UB(crossoverPos>UB);crossoverPos(crossoverPos<LB) = LB(crossoverPos<LB);evalNewPos = Fun(crossoverPos);% 将突变和交叉后的变量重新评估% 小于原有值就更新,同时更新ns1,ns2,nf1,nf2if evalNewPos < Fitness(i)Sol(i,:) = crossoverPos;Fitness(i) = evalNewPos;if tag == 1ns1 = ns1 + 1;elseif tag == 2ns2 = ns2 + 1;endCRRecord = [CRRecord;CR];   elseif tag == 1nf1 = nf1 + 1;elseif tag == 2nf2 = nf2 + 1;endendend[fbest, bestIndex] = min(Fitness);globalBest = Sol(bestIndex,:);globalBestFitness = fbest;% 存储每次迭代的最优值.FitnessHistory(time) = fbest;% 策略的学习if mod(time,50) == 0p1 = (ns1 * (ns2 + nf2)) / (ns2 * (ns1 + nf1) + ns1 * (ns2 + nf2));ns1 = 0;ns2 = 0;nf1 = 0;nf2 = 0;end% CR的更新if mod(time,25) == 0CRm = mean(CRRecord);CRRecord = [];endif mod(time,5) == 0CRQ = normrnd(CRm,0.1,[popsize,1]);end
end
end
clear;clc;clearvars;
% 初始化变量维度,种群数,最大迭代次数,搜索区间,F,CR
dim = 20;
popsize = 100;
maxIteration = 1000;
LB = -5.12 * ones(1, dim);
UB = 5.12 * ones(1, dim);
F = 1;
CR = 0.9;
[globalBest, globalBestFitness, FitnessHistory] = DE(popsize, maxIteration,dim, LB, UB, F, CR, @(x)Griewank(x));
[globalBest1, globalBestFitness1, FitnessHistory1] = NSDE(popsize, maxIteration,dim, LB, UB, CR, @(x)Griewank(x));
[globalBest2, globalBestFitness2, FitnessHistory2] = SaDE(popsize, maxIteration,dim, LB, UB, @(x)Griewank(x));
plot(FitnessHistory);
hold on;
plot(FitnessHistory1);
hold on;
plot(FitnessHistory2);
legend('DE','NSDE','SaDE','Location', 'northeast');

Griewank函数测试结果:

Rastrigin函数测试结果:

Ackley 函数测试结果:

可以看出SaDE和NSDE在性能上均比DE有不小的提升,可以看出自适应参数确实在搜索和收敛上有非常大的帮助。

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

Self-adaptive Differential Evolution Algorithm for Numerical Optimization相关推荐

  1. JADE: Adaptive Differential Evolution withOptional External Archive

    0.论文背景 本文在DE的基础上,提出了一种新的差分进化(DE)算法JADE,通过实现一种新的突变策略DE/current-to-pbest,采用可选的外部存档和参数的自适应更新,来提高优化性能.上述 ...

  2. 【学习笔记】Multi-Objective Differential Evolution Algorithm --MODEA

    [学习笔记]Multi-Objective Differential Evolution Algorithm --MODEA 正文 (一)算法关键点 (二).概念定义 算法流程 算法伪代码.算法流程图 ...

  3. 关于差分进化算法(Differential Evolution)

    关于差分进化算法(Differential Evolution) 觉得有用的话,欢迎一起讨论相互学习~ 最近因为论文和审稿等综合因素的影响,决定对DE进行多一些研究,发现原先自己的了解太肤浅了发现了不 ...

  4. Note of Numerical Optimization Ch.3

    目录 Numerical Optimization Ch.3 Line Search Methods Step Length Convergence of Line Search Methods Ra ...

  5. Making a Difference to Differential Evolution

    0.论文背景 差分进化(Differential Evolution)和进化规划(Evolutionary Programming)是进化计算中的两种主要算法.它们已成功地应用于许多真实世界的数值优化 ...

  6. 数值优化(Numerical Optimization)学习系列-文件夹

    概述 数值优化对于最优化问题提供了一种迭代算法思路,通过迭代逐渐接近最优解,分别对无约束最优化问题和带约束最优化问题进行求解. 该系列教程能够參考的资料有 1. <Numerical Optim ...

  7. 支持向量机:Numerical Optimization

     支持向量机:Numerical Optimization by pluskid, on 2010-09-15, in Machine Learning     15 comments 本文是&q ...

  8. 数值优化(Numerical Optimization)学习系列-目录

    概述 数值优化对于最优化问题提供了一种迭代算法思路,通过迭代逐渐接近最优解,分别对无约束最优化问题和带约束最优化问题进行求解. 该系列教程可以参考的资料有 1. <Numerical Optim ...

  9. SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...

最新文章

  1. 转牛人博客 稀疏矩阵定义CSR COO CSC 第一个讲的清晰易懂的人
  2. Delphi.net Chrome
  3. TensorRT C++ 批量推理笔记
  4. 用python画四叶草代码-python turtle工具绘制四叶草的实例分享
  5. 详解nohup和 区别
  6. golang依赖接口,不要依赖具体实现
  7. Mybatis源码本地化构建Demo
  8. 好友伤害_家暴,对一个孩子的伤害到底有多大?
  9. python一款神器:ptpython 安装
  10. oracle 11g 01017,oracle 11G OEM 出现问题 ORA-01017: inv
  11. js实现中文转拼音的两种方法
  12. Win10常用快捷键
  13. delphi android 截屏,Delphi 截图\截屏
  14. 远程查看计算机的mac地址,win8系统下如何获取远程电脑MAC地址
  15. 总结使用Unity 3D优化游戏运行性能的经验
  16. 前端项目发版后用户需要手动刷新页面获取的解决方案
  17. Recursive function
  18. ausu-fx80-efi黑苹果10.15.7
  19. .net core release 发布
  20. opencv+dlib实现给蒙娜丽莎“配”眼镜

热门文章

  1. 扣丁学堂python培训班难吗
  2. 试题 历届试题 错误票据
  3. 后渗透测试神器Empire的详解
  4. api-ms-win-crt-private-l1-1-0.dll找不到的解决方法
  5. Vue观察者模式和发布订阅者模式
  6. 交通标志数据集-整理
  7. 怎样做一个优秀的(懒惰的)系统管理员
  8. wpf 提示找不到资源错误。
  9. IOS如何免费签名+自动续签
  10. 【题库】上海市学校心理咨询师-发展心理学-考点解析 2.9 毕生发展观