所有博文已迁移至个人网站:https://www.ravenxrz.ink,请勿再留言评论
新链接:https://www.ravenxrz.ink/archives/302ae4cb.html
人们在决策过程中常常会综合两种重要的信息:第一种是他们自己的经验,第二种是其他人的经验。
同样的道理,群鸟在觅食过程中,每只鸟的初始状态都是出于随机位置,且飞翔的方向也是随机的。但是随着时间的推移这些初始处于随机位置的鸟类通过群内相互学习、信息共享和个体不断积累觅食的经验,自发组织积聚成一个群落。每只鸟能够记住自己找到的最好的位置,称之为局部最优。此外,还能够记住群鸟中所有个体索恩能够找到的最好位置,称为全局最优,整个鸟群的觅食中心都是去向全局最优移动的,这在生物学中称为“同步效应”。
在群鸟觅食模型中,每个个体都可以被看成是一个例子,鸟群则被看成一个粒子群。设在一个 D D D维的目标空间里,有 m m m个粒子组成的群里,其中第 i i i个粒子的位置表示为 X i X_i Xi,即第 i i i个粒子在 D D D维搜索空间的位置是 X i Xi Xi。换言之,每个粒子的位置就是一个潜在解,将 X i Xi Xi带入目标函数就可以计算出其适应值,根据适应值的大小衡量其优劣,粒子个体经历过的最好位置记为 P i Pi Pi,整个群体所有粒子经历过的最好位置记为 P g Pg Pg。粒子 i i i的速度记为 V i Vi Vi。
粒子群算法采用下列公式对粒子所在的位置不断更新(单位时间为1):
v i = w ∗ v i + c 1 ∗ r 1 ∗ ( p i − x i ) + c 2 ∗ r 2 ∗ ( p g − x i ) x i = x i + a ∗ v i vi = w*vi+c1*r1*(pi-xi)+c2*r2*(pg-xi) xi = xi+a*vi vi=w∗vi+c1∗r1∗(pi−xi)+c2∗r2∗(pg−xi)xi=xi+a∗vi
迭代终止条件根据具体问题设定,一般为达到预定迭代次数或者粒子群目前为止搜索到最有位置满足目标函数的最小容许误差。
原则上 P S O PSO PSO适应于非约束的优化问题。近年来,一些学者将其推广到约束优化问题,其关键在于如何处理好约束。基于 P S O PSO PSO算法约束优化工作主要分为两类。
但是目前有关运用 P S O PSO PSO算法来处理多约束优化问题的理论还不成熟。
参数1 粒子数
粒子数一般取值 20 − 40 20-40 20−40,实验表明,对于大多数 30 30 30个粒子就够用了。粒子数量越多没搜索范围越大,越容易找到全局最优解,但是程序运行时间越长。
参数2惯性因子
惯性因子 w w w对于粒子群算法的收敛性起到很大作用, w w w值越大,粒子飞翔幅度越大,容易错失局部寻优能力,而全局搜索能力越强;反之,则局部能力越强,全局弱。这里需要注意一个误区:认为惯性因子越大则继承当前飞翔速度也就越大,所以应该是较小程度地离开原先的寻优轨道。错误理解的原因是, w w w越大,粒子飞翔的速度和位置更新的幅度也就越大,因此偏离原先原先寻优轨道的程度也就越大。(和中学的学习的加速度对速度理解类似??)
通常的做法是在迭代开始时讲惯性因子设置得较大,然后在迭代过程中逐步减小。 w w w的取值是 [ 01 ] [0 1] [01],如果 w w w取定值,那么建议取 0.6 − 0.75 0.6-0.75 0.6−0.75.
参数3加速常熟 c 1 c1 c1和 c 2 c2 c2
一般情况下 c 1 c1 c1= c 2 c2 c2= 2 2 2. 0 0 0。目前对于加速常数 c 1 c1 c1和 c 2 c2 c2的确切取值,学术界有较大的分歧。
其中:
参数4最大飞翔速度 V m a x Vmax Vmax
粒子群算法是通过调整每一次迭代时每一个粒子在每一维上移动一定的距离进行的,速度的改变是随机的,而不希望不收控制的粒子搜索轨道被扩展到问题空间越来越广阔的距离,并达到无穷。如果要粒子进行有效的搜索,就必须对参数 V m a x Vmax Vmax进行限制。参数 V m a x Vmax Vmax有利于防止搜索范围毫无意义的发散。关于 V m a x Vmax Vmax的确定,需要有一定的先验。为了跳出局部最优,需要较大的寻优补偿,而在接近最优值时,采用更小的步长会更好。如果 V m a x Vmax Vmax不变,通常设置为没维变化范围的 10 10 10% − 20 -20 −20%
clc;
clear;
close all;
tic; %程序运行计时
E0=0.001; %允许误差
MaxNum=100; %粒子最大迭代次数
narvs=1; %目标函数的自变量个数
particlesize=30; %粒子群规模
c1=2; %每个粒子的个体学习因子,也称为加速常数
c2=2; %每个粒子的社会学习因子,也称为加速常数
w=0.6; %惯性因子
vmax=0.8; %粒子的最大飞翔速度
x=-5+10*rand(particlesize,narvs); %粒子所在的位置
v=2*rand(particlesize,narvs); %粒子的飞翔速度
fitness = @(x)(1/(1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2))));%定义适应度函数
f = zeros(1,particlesize); % 预分配
for i=1:particlesize
for j=1:narvs
f(i)=fitness(x(i,j));
end
end
personalbest_x=x;
personalbest_faval=f;
[globalbest_faval,i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
k=1;
while k<=MaxNum
for i=1:particlesize
for j=1:narvs
f(i)=fitness(x(i,j));
end
if f(i)vmax
v(i,j)=vmax;
elseif v(i,j)<-vmax
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
if abs(globalbest_faval)
程序输出结果:
the maximum value=5.1985
the corresponding coordinate=-1.1617
时间已过 0.250482 秒。
>>