概念
1、是基于群体智能理论的优化算法,通过群体内个体间的合作与竞争而产生的智能优化搜索算法。相比较于进化计算,保留了基于种群的全局搜索策略,采用实数编码,降低了进化计算的复杂性。
差分算法是一种随机的启发式、自组织最小化算法。
2、查分算法的特点:
(1)结构简单、容易使用;
(2)性能优越;
(3)自适应性;
(4)具有内在的并行性,可协同搜索;
(5)算法通用;
3、操作程序:
初始化——变异——交叉——选择——边界条件处理
4、特点
相对于遗传算法,增加边界条件处理;
其变异向量的产生是差分的形式:
v(:,m) = x(:,r1)+F*(x(:,r2)-x(:,r3));
在交叉过程中,其的实验向量变化为:
r = randi([1,D],1,1);
for n = 1:D
cr = rand(1);
if(cr <= CR||n == r)
u(n,:)=v(n,:);
else
u(n,:)=x(n,:);
end
end
其中,D为维度,CR为其的交叉算子,范围为[0,1];
在选择过程中,实验向量只与一个个体相比较:
for m = 1:NP %计算每个种群的适应度
Ob1(m) = func1(u(:,m));
end
for m = 1:NP
if Ob1(m)<Ob(m)
x(:,m) = u(:,m);
end
end
for m = 1:NP
Ob(m) = func1(x(:,m));
end
5、改进的差分计算
分为两种:自适应差分计算与离散型差分计算,变异过程不同。
自适应差分计算为:
lamada = exp(1-G/(G+1-gen));
F = F0*2^(lamada);
离散型差分计算为:
v(:,m) = floor[x(:,r1)+F*(x(:,r2)-x(:,r3))]
实例
计算函数最小值:
clear all;
close all;
clc
NP=50;
D=10;
G=200;
F0=0.4;
CR=0.1;
yz=10^-6;
Xs=20;
Xx=-20;
%% 赋初值
x = zeros(D,NP);
v = zeros(D,NP);
u = zeros(D,NP);
x = rand(D,NP)*(Xs-Xx)+Xx;
for m = 1:NP
Ob(m) = func1(x(:,m));
end
tarce(1) = min(Ob);
%% 差分进化
for gen = 1:G
%%%%变异%%%%
lamada = exp(1-G/(G+1-gen));
F = F0*2^(lamada);
for m = 1:NP
r1 = randi([1,NP],1,1);
while (r1==m)
r1= randi([1,NP],1,1);
end
r2 = randi([1,NP],1,1);
while (r2==m)||(r2 == r1)
r2= randi([1,NP],1,1);
end
r3 = randi([1,NP],1,1);
while (r3==m)||(r3 == r1)||(r3==r2)
r3= randi([1,NP],1,1);
end
v(:,m) = x(:,r1)+F*(x(:,r2)-x(:,r3));
end
%%%%变异%%%%
r = randi([1,D],1,1);
for n = 1:D
cr = rand(1);
if(cr <= CR||n == r)
u(n,:)=v(n,:);
else
u(n,:)=x(n,:);
end
end
%%%%边界条件处理%%%%
for n = 1:D
for m = 1:NP
if(u(n,m)<Xx)||(u(n,m)>Xs)
u(n,m) = rand*(Xs-Xx)+Xx;
end
end
end
%%%%选择%%%%%
for m = 1:NP %计算每个种群的适应度
Ob1(m) = func1(u(:,m));
end
for m = 1:NP
if Ob1(m)<Ob(m)
x(:,m) = u(:,m);
end
end
for m = 1:NP
Ob(m) = func1(x(:,m));
end
trace(gen+1) = min(Ob);
if(min(Ob))<yz
break
end
end
[SortOb,Index] = sort(Ob);
x = x(:,Index);
X = x(:,1);
Y = min(Ob);
figure
plot(trace)