粒子群优化算法

粒子群优化代码学习总结
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