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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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,:))

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)=fitness(x(i,:));

y(i,:)=x(i,:);

end

if p(i)

pg=y(i,:);

end

r1=rand();

if r1

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);

相关文档
最新文档