粒子群算法matlab以求解函数最优解为例
clear; clc; close all;
N=100; %粒子个数
D=2; %粒子维数
MaxIter=500; %最大迭代次数
C1max=1.8; %权重参数,自适应
C2max=1.8;
C1=1.2;
C2=1.2;
w=0.79;
Wmax=0.8; %对自己速度的记忆
Wmin=0.4;
Xmax=4; Xmin=-4; %自变量的范围
Vmax=1; Vmin=-1; %速度的范围
x=rand(N,D)*(Xmax-Xmin)+Xmin; %初始化N个粒子的D维空间位置
v=rand(N,D)*(Vmax-Vmin)+Vmin; %初始化N个粒子的D维空间速度
p=x;
pbest=ones(N,1);
for i=1:N
pbest(i)=func(p(i,:)); %计算适应度,此处求的优化目标是最小值
end
g=ones(1,D);
gbest=min(pbest); %全局最小值
index=find(pbest==gbest);
g=p(index(1),:); %全局最小位置
gb=ones(1,MaxIter); %记录历史的全局最小
for i=1:MaxIter
for j=1:N
if func(x(j,:))
pbest(j)