0、论文背景

差分进化(Differential Evolution)和进化规划(Evolutionary Programming)是进化计算中的两种主要算法。它们已成功地应用于许多真实世界的数值优化问题。社区搜索(Neighborhood Search)是支撑EP的主要策略,目前已经对不同的NS操作符(高斯随机数和柯西随机数)的特征进行了分析。虽然DE可能与EP的进化过程相似,但它缺乏邻域搜索的相关概念。本章提出了基于邻域搜索的NSDE。NSDE中的NS操作符可以显著提高NSDE的搜索步长和种群的多样性,而不依赖于任何关于搜索空间的先验知识 。

Yang Z, Yao X, He J. Making a difference to differential evolution[M]//Advances in metaheuristics for hard optimization. Springer, Berlin, Heidelberg, 2007: 397-414.

1、EP

进化规划(EP)进行的优化可以归纳为两个主要步骤:首先突变当前种群中的解,然后从突变的解和当前的解中选择下一代。

传统进化规划(CEP)的突变过程如下:

其中,是种群大小;,n是种群变量维度。上述也称古典进化规划(CEP)。

将柯西突变代替高斯突变,得到了快速进化规划(FEP):

其中,对于每一个个体的每一维变量,是一个尺度参数t=1的柯西随机变量。使用柯西突变的EP被称为快速进化规划(FEP)。

2、NSDE

有关DE,参见博客:DE,有关柯西分布,参见博客:柯西分布。

DE的流程如下:

有n维向量,NP是种群的大小。

第一步:变异。

一个较大的F值会增加逃离局部最优的概率。然而,它也增加了突变的扰动,从而降低了DE的收敛速度。

第二步:交叉。

第三步:选择。

而本文提出的NSDE,与之前DE唯一不同的地方在于变异这一过程。DE中固定的常量变为了NS操作符(高斯随机数和柯西随机数):

为什么要采用NS操作符代替F呢?简而言之:显著提高NSDE的搜索步长和种群的多样性,而不依赖于任何关于搜索空间的先验知识 。最终达到寻得更好的全局最优值以及加快收敛的目的。

那么高斯随机数和柯西随机数有什么特点呢?

就是各自的概率密度函数。

柯西随机数与高斯随机数最大的不同在于,柯西随机数产生的值范围更广,产生较大值的概率比高斯随机数高;而高斯随机数产生的值范围较窄,相对局部。

所以一般情况下,柯西算子在远离全局最优时表现更好,而高斯算子在一个较好的区域内寻找局部最优时表现更好。而为了结合上述二者的特点,由此提出了上述变异等式。

3、算法的个人实现以及简单实验

DE的实现上述DE有关的博客有提到过,就不展示了。

NSDE代码实现:

function [globalBest, globalBestFitness, FitnessHistory] = NSDE(popsize, maxIteration,dim, LB, UB, CR, 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; % 开始迭代
for time = 1:maxIterationfor i = 1:popsize% 突变r = randperm(popsize, 3);  %在1~pop中随机选择5个数组成一个数组r1 = rand();if r1 > 0.5pd = makedist('tLocationScale','mu',0,'sigma',1,'nu',1);F = random(pd,1,1);%生成1个柯西随机数elseF = normrnd(0.5,0.5);%生成1个高斯随机数endmutantPos = Sol(r(1),:) + F * (Sol(r(2),:) - Sol(r(3),:));% 交叉jj = randi(dim);  % 选择至少一维发生交叉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);% 将突变和交叉后的变量重新评估% 小于原有值就更新if evalNewPos < Fitness(i)Sol(i,:) = crossoverPos;Fitness(i) = evalNewPos;endend[fbest, bestIndex] = min(Fitness);globalBest = Sol(bestIndex,:);globalBestFitness = fbest;% 存储每次迭代的最优值.FitnessHistory(time) = fbest;
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)Rastrigin(x));
[globalBest1, globalBestFitness1, FitnessHistory1] = NSDE(popsize, maxIteration,dim, LB, UB, CR, @(x)Rastrigin(x));
plot(FitnessHistory);
hold on;
plot(FitnessHistory1);
legend('DE','NSDE','Location', 'northeast');

Rastrigin函数的测试结果:

Grtiewank函数的测试结果:

Ackley函数的测试结果:

综上所述,NSDE无论在优化效果上,还是在收敛性上,均远远优于DE。

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

Making a Difference to Differential Evolution相关推荐

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

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

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

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

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

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

  4. 差分进化算法(Differential Evolution,DE)实例详解

    差分进化算法是(differential evolution,DE)是基于群体智能理论的优化算法,是通过群体内个体间的合作与竞争而产生的智能优化搜索算法.对比进化计算,它保留了基于种群的全局搜索策略, ...

  5. Self-adaptive Differential Evolution with Neighborhood Search

    0.论文背景 本文是在SaDE和NSDE的基础上,结合二者的特点,提出了SaNSDE算法. Yang Z, Tang K, Yao X. Self-adaptive differential evol ...

  6. JADE: Adaptive Differential Evolution withOptional External Archive

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

  7. Self-adaptive Differential Evolution Algorithm for Numerical Optimization

    0.论文背景 本文在DE算法的基础上,提出了一种自适应的差分进化算法(SaDE).其中学习策略的选择和两个控制参数F和CR不需要预先指定. Qin A K, Suganthan P N. Self-a ...

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

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

  9. 差分进化算法(Differential Evolution)

    一.差分进化算法的由来 差分进化算法(Differential Evolution,DE)于1997年由Rainer Storn和Kenneth Price在遗传算法等进化思想的基础上提出的,本质是一 ...

最新文章

  1. redis灵魂拷问:19图+11题带你面试通关
  2. 1003. 我要通过!(20)
  3. NeHe OpenGL教程 第四十七课:CG顶点脚本
  4. 用css3写遨游的logo
  5. python opencv Intel Realsense 使用滑动条调整图片的曝光率
  6. .NET微服务架构及API网关
  7. 二、搭建Jupyter Notebook环境
  8. 三十岁以前不必在乎的29件事
  9. idea怎么把代码放到git_在IntelliJ IDEA中同步代码到华为云git仓库 (on windows)
  10. 数据 + 代码,基于 Keras 的烟火检测
  11. 测试用例的优先级概念
  12. android自定义横向时间轴,Android自定义时间轴的实现过程
  13. JSONObject获取的值有时候不是String类型,而有时候又是String类型,怎么办呐
  14. linux下哪个分区工具好,这些Linux分区工具是免费的且好用
  15. python自动发微信朋友圈不带图片_python itchat实现微信自动检测违规涉黄图片
  16. IE associate Fix
  17. 调用微信接口实现微信授权登陆主体内容【code换取openid以及session_key】
  18. 【算法】机器人走迷宫(适用于走迷宫、最短路径算法)-20200412
  19. 用docker安装tomcat并实现目录映射端口映射输入ip地址测试网页连接
  20. 华为认证Datacom考试内容

热门文章

  1. java读取excel的maven_JAVA如何读取Excel数据
  2. python爬虫爬取58同城租房信息(使用动态IP)输出Excel文件
  3. 基于部件关注DenseNet的细粒度车型识别
  4. 用矩形积分近似求解定积分的动画示意图
  5. csgo躲猫猫模式显示服务器已满,CSGO有躲猫猫模式吗 CSGO躲猫猫模式进入方法一览...
  6. 通过JavaScript调用SOAP终结点执行实体消息
  7. Griffon学习笔记1 - HelloWorld
  8. 手机如何双声道录音_手机音量太小怎么办?教你一招就能解决,进来学学吧!...
  9. MySQL/MariaDB数据库
  10. pygame网络游戏_4_1:人物行走_地图设计