DE–A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces | 您所在的位置:网站首页 › 冰封王座十大经典 › DE–A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces |
0、论文背景
本文提出了一种新的最小化可能的非线性和不可微连续空间函数的启发式方法,即差分进化。 Storn R, Price K. Differential evolution–a simple and efficient heuristic for global optimization over continuous spaces[J]. Journal of global optimization, 1997, 11(4): 341-359. 1、介绍本文主要提出了差分进化,然后与其他全局优化算法进行比较,然后得出差分进化效果更好的结论。本文不做其他算法进行解读,主要解读的是差分进化。 用户通常要求一个实用的最小化技术应该满足五个要求: 能够处理不可微、非线性和多模态代价函数。并行地处理计算密集型成本函数。使用很少的控制变量来控制最小化。这些变量也是稳健的和易于选择的。良好的收敛性。 Differential evolution: 为了满足要求1,将DE设计为一种随机直接搜索方法。DE通过使用一个种群向量来满足要求2,其中种群向量的随机扰动可以独立地完成。DE的自组织方案利用两个随机选择的种群向量的差分向量来扰动一个现有的向量。对每个种群向量都进行了扰动。后续实验表明,DE在收敛性这一方面变现地非常好。 2、Differential evolution差分进化(DE)是一种利用NP个D维参数向量的并行直接搜索方法,G表示迭代次序。 DE通过将两个参数向量之间的加权差值加到第三个向量中来生成新的参数向量。让这个操作被称为突变。 突变向量的参数然后与另一个预定向量的参数混合,即目标向量,以产生所谓的试验向量。参数混合通常被称为“交叉”。如果试验向量产生的成本函数值低于目标向量,则试验向量将在下一代中替换目标向量。这最后一个操作被称为选择。上述操作一共进行NP次。 2.1 突变对于每一个向量: 生成一个突变向量:
r1、r2和r3选择为与i不同;F是[0,2]之间,主要是控制参数向量的突变程度。 还有一种形式: 当种群向量NP的数量足够高时,使用两个差分向量似乎可以提高种群的多样性。 2.2 交叉为了增加突变向量的多样性,引入了交叉的方法。得到试验向量: 试验向量通过如下方式获得: randb(j)是[0,1]之间随机生成的;CR是[0,1]之间的交叉常量;,确保至少从中获得一个参数。 图形的形象表示: 2.3 选择如果向量产生的成本函数值小于,则将设置为;否则,将保留旧值。 整个算法的伪代码流程图: 3、算法的个人复现和简单实验 clear;clc;clearvars; % 初始化变量维度,种群数,最大迭代次数,搜索区间,F,CR dim = 5; popsize = 50; 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)Fun(x)); disp(globalBestFitness); disp(globalBest); plot(FitnessHistory); function y = Fun(x) %d = length(x);%[-30,30] %y = -20*exp(-0.02*sqrt((sum(x.^2))/d)) - exp(sum(cos(2*pi*x))./d)+20+exp(1); y = sum(x.^2);%[-5.12,5.12] end function [globalBest, globalBestFitness, FitnessHistory] = DE(popsize, maxIteration,dim, LB, UB, F, CR, Fun) % 种群的初始化和计算适应度值 Sol(popsize, dim) = 0; % Declare memory. Fitness(popsize) = 0; for i = 1:popsize Sol(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:maxIteration for i = 1:popsize % 突变 %r = randperm(popsize, 3); r = randperm(popsize, 5); %在1~pop中随机选择5个数组成一个数组,使用两个差分变量进行扰动 mutantPos = Sol(r(1),:) + F * (Sol(r(2),:) - Sol(r(3),:)) ... + F * (Sol(r(4),:) - Sol(r(5),:)); % 交叉 jj = randi(dim); % 选择至少一维发生交叉 for d = 1:dim if rand() < CR || d == jj crossoverPos(d) = mutantPos(d); else crossoverPos(d) = Sol(i,d); end end % 检查是否越界. crossoverPos(crossoverPos>UB) = UB(crossoverPos>UB); crossoverPos(crossoverPos |
CopyRight 2018-2019 实验室设备网 版权所有 |