引言
差分进化算法(Differential Evolution,简称DE)是一种全局优化算法,由Storn和Price于1995年首次提出。它主要用于求解实数优化问题,属于演化算法的一种。DE算法以其结构简单、容易实现、收敛快速和鲁棒性强等特点,在多个领域得到了广泛应用。
算法流程
初始化种群:确定差分进化算法控制参数,如种群大小NP、缩放因子F与杂交概率CR,并随机产生初始种群。
变异:从种群中随机选取两个个体的差向量作为第三个个体的随机变化源,将差向量加权后按照一定的规则与第三个个体求和而产生变异个体。
交叉:变异个体与某个预先决定的目标个体进行参数混合,生成试验个体。
选择:比较试验个体和当前个体的适应度,选择适应度更好的个体作为下一代种群的成员。
迭代:通过反复迭代上述过程,直至满足终止条件(如达到最大迭代次数或适应度达到预定阈值),最终得到问题的近似最优解。
参考文献
Matlab代码下载
微信搜索并关注-优化算法侠(英文名:Swarm-Opti),或扫描下方二维码关注,以算法名字搜索历史文章即可下载。
%% DE
% %% Please follow Wechat Swarm-Opti
function [fbest,Xbest,history] = DE(N,T,lb, ub,dim, func)
% control parameters
F = 0.4;
CR = 0.5;
X = rand(N, dim) .* (ub - lb) + lb;
for i = 1:N
fit(i) = func(X(i,:));
end
t = 1;
while t <= T
for i = 1:N
A=randperm(N);
A(A==i)=[];
a=A(1);
b=A(2);
c=A(3);
% Mutation
V(i,:) = X(a,:) + F * (X(b,:)-X(c,:));
V(i,:) = min(ub,V(i,:));
V(i,:) = max(lb,V(i,:));
% Cross
j0 = randi([1,dim]);
for j = 1:dim
if j==j0 || rand <= CR
Xnew(i,j)=V(j);
else
Xnew(i,j)=X(j);
end
end
Xnew(i,:) = min(ub,Xnew(i,:));
Xnew(i,:) = max(lb,Xnew(i,:));
end
% Slection
for i = 1:N
fit_new = func(Xnew(i,:));
if fit_new < fit(i)
fit(i) = fit_new;
X(i,:) = Xnew(i,:);
end
end
[fbest,best_index] = min(fit);
Xbest = X(best_index,:);
history(t) = fbest;
t = t + 1;
end
end
点击链接跳转:
375种群优化算法免费下载-matlab
https://mp.weixin.qq.com/s/AsFTBmaZ8UOgES9TQuL0Kg?token=1339859150&lang=zh_CN
求解cec测试函数-matlab
cec2022测试函使用教程及matlab代码免费下载
绘制cec2017/018/2019/2020/2021/2022函数的三维图像教程,SO EASY!