admin 发表于 2022-5-20 15:25:08

DE算法matlab实现(附带测试函数代码)

%根据文章《Differential Evolution Algorithm With Strategy Adaptation for Global Numerical Optimization》的算法
clc;clear;close all
%clear
maxGen=500;%最大迭代次数
Gen=1;%进化代数,或者当前迭代代数
Xmax=30;%搜索上界,可以根据需要改为向量形式
Xmin=-30;%搜索下界
Dim=20;%个体维数
NP=100;%population size,种群规模
F=0.5;%scaling factor 缩放因子
CR=0.3;%crossover rate 交叉概率
index=3;%测试方程索引,不同值对应不同的测试函数
mutationStrategy=3;%变异策略
crossStrategy=1;%交叉策略

%% 初始化
X=(Xmax-Xmin)*rand(NP,Dim)+Xmin; %X行代表个体i,列代表个体i的维度j

%% 迭代循环
for Gen=1:maxGen
    for i=1:NP
      fitnessX(i)=testFun(X(i,:),index);%测试函数求值,fitnessX表示X的适应值
    end
    =min(fitnessX);
    bestX=X(indexbestX,:);%bestX表示最优值对应的位置
% 变异
    V=mutation(X,bestX,F,mutationStrategy);%调用变异函数
   
% 交叉
    U=crossover(X,V,CR,crossStrategy);%调用交叉函数
% 选择
    for i=1:NP
      fitnessU(i)=testFun(U(i,:),index);
      if fitnessU(i)<=fitnessX(i)
            X(i,:)=U(i,:);
            fitnessX(i)=fitnessU(i);
            if fitnessU(i)<fitnessbestX
                bestX=U(i,:);
                fitnessbestX=fitnessU(i);
            end
      end
    end
% 最优值记录
    fprintf('%d      %f\n',Gen,fitnessbestX);%输出当代最优解
    bestfitness(Gen)=fitnessbestX;
    optValue=num2str(fitnessbestX);
    Location=num2str(bestX);
    disp(strcat('the optimal value','=',optValue));
    disp(strcat('the best location','=',Location));
end
% 绘图
plot(bestfitness);
xlabel('Gen');
ylabel('bestfitness');




页: [1]
查看完整版本: DE算法matlab实现(附带测试函数代码)