粒子群算法 matlab源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%相关参数的设置
UB=600; %函数的上界
LB=300; %函数的下界
PopSize=40; %种群的大小
Dim=10; %微粒的维数
c1=2; %学习因子
c2=2; %学习因子
w_start=0.9;%惯性权重的开始值
w_end=0.4;%惯性权重的最后值
Vmax=100;%微粒的最大速度
MaxIter=1500;%最大迭代次数
Iter=0;%初始迭代次数
%初始化群和速度
X=rand(PopSize,Dim)*(UB-LB)+LB;%微粒位置随机初始化V=rand(PopSize,Dim);%微粒速度随机初始化;
%测试函数:Griewank函数
ind=repmat(1:Dim,PopSize,1);
FX=sum(((X.^2)/4000)')'- prod(cos(X./sqrt(ind))')'+1;
%设定当前位置为粒子的最好位置,并记录其最好值PBest=X;
FPBest=FX;
%找到初始微粒群体的最好微粒
[Fgbest,r]=min(FX);
CF=Fgbest;%记录当前全局最优值
Best=X(r,:);%用于保存最优粒子的位置
FBest=Fgbest;
%循环
while(Iter<=MaxIter)
Iter=Iter+1;
%更新惯性权重的值;
w_now=((w_start-w_end)*(MaxIter-Iter)/MaxIter)+w_end;
A=repmat(X(r,:),PopSize,1);
%生成随机数
R1=rand(PopSize,Dim);
R2=rand(PopSize,Dim);
%速度更新
V=w_now*V+c1*R1.*(PBest-X)+c2*R2.*(A-X);
%对进化后速度大于最大速度的微粒进行处理
changeRows=V>Vmax;
VStep(find(changeRows))=Vmax;
%对进化后速度小雨最小速度的微粒进行处理
changeRows=V<-Vmax;
V(find(changeRows))=-Vmax;
%微粒位置进行更新
X=X+1.0*V;
%重新计算新位置的适应度值
ind=repmat(1:Dim,PopSize,1);
FX=sum(((X.^2)/4000)')'- prod(cos(X./sqrt(ind))')'+1;
%更新每个微粒的最好位置
P=FX FPBest(find(P))=FX(find(P));%适应值更换 PBest(find(P),:)=X(find(P),:)%粒子位置更换 [Fgbest,g]=min(FPBest);%保存最好适应值 if Fgbest Best=PBest(b,:);%最好位置为Best end CF=Fgbest;%保留本次适应值准备与下次比较end %循环结束