当前位置:文档之家› 混合粒子群算法:基于杂交的算法

混合粒子群算法:基于杂交的算法

混合粒子群算法:基于杂交的算法
1. 算法原理
借鉴遗传算法中杂交的概念,在每次迭代中,根据杂交率选取指定数量的粒子放入杂交
池内,池内的粒子随机两两杂交,产生同样数目的子代粒子( child),并用子代粒子代替亲代粒子(pare nt )。

子代位置由父代位置进行交叉得到:
child (x) = p.pare nt|(x) (l-p).pare nt2(x)

child (x) =(1_ p).parent((x) p. parent2(x)
其中,P是o到1之间的随机数。

子代的速度由下式计算:
child(v)= pa訥(V)parant2(v)|parant i(v)
| parant/v) + parant2(v)|

child(v)=冋眦⑼ parant2(v)|parant2(v)
| para nt i(v) + para nt2(v)|
2. 算法步骤
基于自然选择的粒子群算法的基本步骤如下:
(1)随机初始化种群中各微粒的位置和速度;
(2)评价每个微粒的适应度,将当前各微子的位置和适应值存储在各微子的pbest中,
将所有的pbest中适应最优个体的位置和适应值存储在gbest中;
(3)更新每个微粒的速度和位置;
(4)对每个微粒,将其适应值与其经历过的最好位置作比较,如果较好,则将其作为当
前的最好位置;
(5)比较当前所有pbest和gbest的值,更新gbest ;
(6)根据杂交概率选取指定数量的粒子放入杂交池中,池中的粒子随机两两杂交产生同样数目
的子代粒子,子代的位置和速度计算公式如下:
child (x)二p.parent|(x) (1 _ p).parent2(x)
child (v^ parant1(v)叩呢⑼ |parant1(v)。

保持pbest 和gbest不变;
| paran h(v) + para nt2(v)|
(7)若满足停止条件(通常为预设的运算精度或迭代次数) ,搜索停止,输出结果,否则
返回(3)继续搜索。

3.算法MATLAB实现
在MATLAB中编程实现的基于杂交的粒子群算法优化函数为:BreedPSO。

功能:用基于杂交的粒子群算法求解无约束优化问题。

调用格式:[xm, fv]二PSO( fitness, N,o),c2,w, Pc, Sp, M , D)
其中,fitness :待优化的目标函数;
N :粒子数目;
G:学习因子1 ;
C2:学习因子2;
W :惯性权重;
Pc :杂交概率;
Sp :杂交池的大小比例;
M :最大迭代次数;
D :自变量的个数;
xm:目标函数取最小值时的自变量值;
fv :目标函数的最小值。

基本粒子群算法的MATLAB代码如下:
fun ctio n [xm,fv]=BreedPSO(fitiness,N,c1,c2,w,Pc,Sp,M,D)
% fitn ess :待优化的目标函数;
% N:粒子数目;
% cl:学习因子1;
% c2:学习因子2;
% w:惯性权重;
% Pc杂交概率;
% Sp杂交池的大小比例;
% M:最大迭代次数;
% D:自变量的个数;
% xm:目标函数取最小值时的自变量值;
% fv:目标函数的最小值。

format long; for i=1:N
for j=1:D
x(i,j)=ra nd n;%随机初始化位置
v(i,j)=ra ndn; %随机初始化速度
end
end
for i=1:N p(i)=fitness(x(i,:));
y(i,:)=x(i,:);
end
pg=x(N,:); %pg 为全局最优
for i=1:(N-1)
if fitness(x(i,:))<fitness(pg)
pg=x(i,:);
end
end
for t=1:M
for i=1:N %速度、位移更新
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
x(i,:)=x(i,:)+v(i,:);
if fitness(x(i,:))<p(i)
p(i)=fitness(x(i,:));
y(i,:)=x(i,:);
end
if p(i)<fitness(pg)
pg=y(i,:);
end
r1=rand();
if r1<Pc %杂交概率
numPool=round(Sp*N); %杂交池大小
PoolX=x(1:numPool,:); %杂交池中粒子的位置PoolVX=v(1:numPool,:); %
杂交池中粒子的速度for i=1:numPool
seed1=floor(rand()*(numPool-1))+1; seed2=floor(rand()*(numPool-
1))+1; pb=rand();
%子代位置计算childx1(i,:)=pb*PoolX(seed1,:)+(1-
pb)*PoolX(seed2,:);
%子代速度计算
childv1(i,:)=(PoolVX(seed1,:)+PoolVX(seed2,:))*norm(PoolVX(seed1,:))/norm(PoolVX(seed1,:)
+PoolVX(seed2,:));
end
x(1:numPool,:)=childx1; %子代的位置替换父代的位置
v(1:numPool,:)=childv1; %子代的速度替代父代的速度
end end end
xm=pg'; fv=fitness(pg);

基于杂交的粒子群算法应用实例。

求下面函数的最小值
取粒子数目为40,学习因子都取2,惯性权重取0.7,杂交概率取0.9,杂交池大小比例 取0.2,迭代步数取10000。

解:
首先建立目标函数文件 fitness.m .
fun cti on F=fit ness(x)
F=0;
for i=1:5
F=F+1/(i+(x(i)-1)A 2);
end
F=1/(0.01+F);
在MATLAB 命令窗口中输入:
>> [xm,fv]=BreedPSO(@fit ness,40,2,2,0.7,0.9,0.2,10000,5)
所得结果为:
xm =
0.999999998142068
1.000000018187727
1.000000018663603
0.999999985688029
1.000000009915268
fv =
0.436046511627907
从结果可以看出,基于杂交的粒子群求得的结果精度是非常高的。

f(x)
0.01+Z 一 i J i +。

相关主题