该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
global ParticalNum
%function [BestPosition,bestadapt,bestadaption,t] = PSO(ParticalNum,iterator)
ParticalNum=5;
pbest=zeros(1,ParticalNum); %初始化各项参数,预分配空间
gbest=0;%自己到目前的为止发现的最好位置
pMax=zeros(1,ParticalNum);
gMax=0;
adapt=zeros(1,ParticalNum);
t=1;
samecount=0;
flag=0;
p = zeros(1,ParticalNum);
v = ones(1,ParticalNum);
for i=1:ParticalNum %初始化粒子位置、速度,计算适应值
p(i)=rand(1,1); %初始化粒子群位置
v(i)=0.1; %初始化速度
fi=GetAdaption(p(i)); %计算各粒子的适应值
adapt(i)=fi;
pMax(i)=adapt(i); %第i个粒子的最大峰值信噪比
pbest(i)=p(i); %第i个粒子的最好位置
if pMax(i)>gMax %每个粒子的峰值信噪比与全局最高的峰值信噪比做比较
gbest=pbest(i); %把当前的峰值信噪比作为新的全局最优解
gMax=pMax(i);
end
bestp(1)=gbest;
besta(1)=gMax;
end
while flag==0&t
t=t+1; %迭代次数加1
for i=1:ParticalNum
[speed]=newv(v(i),p(i),pbest(i),gbest); %更新粒子速度
v(i)=speed; %第i个粒子的速度
[position]=newpp(p(i),v(i)); %更新粒子位置
p(i)=position;
fi=GetAdaption(p(i)); %计算各粒子适应值
adapt(i)=fi;
if adapt(i)>pMax(i) %比较适应值
pMax(i)=adapt(i); %更新个体极值
pbest(i)=p(i);
end
if pMax(i)>gMax %比较适应值
gbest=pbest(i); %更新全局极值
gMax=pMax(i);
end
end
bestp(t)=gbest;
besta(t)=gMax;
if bestp(t)==bestp(t-1) %记录相同个体位置次数
samecount=samecount+1;
end
if samecount==5
flag=1; %收敛标志
end
end
BestPosition=gbest;
bestadapt=bestp;
bestadaption=besta;
Error in ==> Mero at 20
for i=1-STRCs:Pheight-STRCe
??? Output argument "Pnew" (and maybe others) not assigned during call to "F:\chengxu\Mero.m>Mero".
Error in ==> GetAdaption at 12
PE=Mero(Panois,STRC,Pwidth,Pheight,STRCs,STRCe); %均衡腐蚀
Error in ==> PSO at 20
fi=GetAdaption(p(i)); %计算各粒子的适应值