matlab基于普通DE实现基本自适应差分进化算法(SaDE)

  1. 提出背景

由于给定所求的函数条件下,我们无法准确知道求解该函数适于怎样取值的变异算子F和交叉概率CR,由此推出自适应差分进化算法(DE)。

2.实现方法

为了使所用的F与CR尽量符合所求函数的要求,我们设定一个初始的交叉概率最大值CEm,初始值设为0.5,并生成服从正态分布且取值在(0.3,0.5)区间的随机数F。设定一个自适应取值的节点LP,即在迭代次数为LP是进行自适应值的改变。为了结合各个变异策略的优点,我们再次选用同CoDE类似的方法,即选取多个变异策略进行迭代,改变自适应度的同时对选取的几种变异策略的选用概率进行自适应改变。

以下为我们选取的四种变异策略

3.代码实现

close all;
clear all;
clc;
%--------------------初始化各参数值------------------------------------------------------
NP=100;
CRm=0.5;
G=100;
LP=10;
D=2;
a=-5;
b=5;
Aa=1;
A=[];
ikun1=0.25;
ikun2=0.25;
ikun3=0.25;
ikun4=0.25;
c=0;
t=0;
r=0;
l=0;
C=0;
T=0;
R=0;
L=0;
x=rand(NP,D)*(b-a)+a;        %随机生成初始种群
v=zeros(NP,D);
u=zeros(NP,D);
minx=9999;
best=0;
for i=1:NP                %求各个个体的适应度并取出适应度最好的个体的位置
    fit(i)=4*x(i,1)^2-2.1*x(i,1)^4+1/3*x(i,1)^6+x(i,1)*x(i,2)-4*x(i,2)^2+4*x(i,2)^4;
    if fit(i)=b
                u(m,n)=b;
            end
        end
    end
%--------------------重新求适应度,优胜劣汰----------------------
    for i=1:NP
        fit1(i)=4*u(i,1)^2-2.1*u(i,1)^4+1/3*u(i,1)^6+u(i,1)*u(i,2)-4*u(i,2)^2+4*u(i,2)^4;
        if fit1(i)

4.运行结果

matlab基于普通DE实现基本自适应差分进化算法(SaDE)_第1张图片

你可能感兴趣的:(matlab,算法)