粒子群算法 matlab源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 %循环结束

相关文档
最新文档