粒子群优化算法
粒子群优化代码学习总结
1.粒子群更新的规则:
需要更新速度以及位置
速度更新公式:
v(i) = v(i)w+c1rand*(pbest(i)-x(i))+c2*rand(gbest(i)-x(i))
速度更新公式由三部分组成:之前的速度影响v(i)*w,个体最优影响(pbest(i)-x(i))和全局最优的影响(gbest(i)-x(i))
则位置更新公式为:
x(i)=x(i)+v(i)
其中,i指的是种群中的第i个粒子
x(i):粒子i的位置,刚开始应该给粒子随机初始化位置
v(i):粒子i的速度,刚开始应该给粒子随机初始化速度
c1是粒子个体的学习因子,c2是粒子的群体学习因子,表示个体最优和群体最优的影响,w为惯性因子,代表了历史成绩的影响
pbest和gbest分别代表粒子个体最优位置和群体最优位置
- 1
需要提前设置的参数有:粒子群个数,迭代次数,个体学习因子c1和群体学习因子c2以及衡量历史速度影响的惯性因子w
- 2
确定一个粒子的运动状态是利用位置和速度描述,所以应该初始化这两个参数:粒子的速度和位置
- 3
每次搜寻的结果(函数值)即为粒子适应度,粒子是有记忆的,因此每个粒子的个体历史最优位置和群体的历史最优位置应该记录;粒子的自适应度也应该随机初始化
- 4
一开始粒子的个体最有位置为粒子当前的位置,群体的最优位置一般设置为原点
- 5
空间维数:粒子搜索的空间维数为自变量的个数;
- 6
位置限制:限制粒子搜索的空间,也就是自变量的取值范围,相当于优化问题中的约束;
- 7
速度限制:过快的飞行速度可能使粒子跳过最优位置,过慢的飞行速度会使收敛速度变慢,所以应该设置飞行速度的上下限;
- 8
位置和速度的初始化即在位置和速度限制范围内随机生成一个N*d的矩阵;
matlab 代码:
%迭代次数
iter=50;
%粒子群个数
n=5;
%变量个数
d=1;
%%%初始化
c1=2;%自我学习因子
c2=2;%种群学习因子
ite=100;%迭代次数
w=0.5;%惯性权重
vmax=1;%粒子最大速度
vmin=-1;%最小速度
xmax=10;%约束条件
xmin=-10;
x=-10+20*rand(n,d);%随机初始化粒子位置
v=-1+2*rand(n,d);%随机初始化粒子速度
%计算自适应度
%计算适应度
fit=zeros(n,d);
for j=1:n
fit(j)=g(x(j,:));
end
pbest=x;%初始化个体最佳是当前的位置
[bestfit,bestindex]=min(fit);%初始化全局最佳
gbest=x(bestindex,:);
fitpbest=fit;%个体最佳适应度值
fitgbest=bestfit;%整体最佳自适应值
for i=1:iter
for j =1:n
v(j,:) = v(j,:) + c1*rand*(pbest(j,:) - x(j,:)) + c2*rand*(gbest - x(j,:));
v(j,find(v(j,:)>vmax)) = vmax;
v(j,find(v(j,:)<vmin)) = vmin;
x(j,:)=x(j,:)+v(j,:);
x(j,find(x(j,:)>xmax)) = xmax;
x(j,find(x(j,:)<xmin)) = xmin;
fit(j)=g(x(j,:));
if fit(j)<fitpbest(j)%更新个体自适应度和全局自适应度
pbest(j,:)=x(j,:);
fitpbest(j)=fit(j);
end
%更新群体最优适应度
if fit(j)<fitgbest
gbest=x(j,:);
fitgbest=fit(j);
end
end
fitness(i)=fitgbest
end
function f=g(x)
f=x^2+3*x;
end