粒子群算法
- 格式:doc
- 大小:28.00 KB
- 文档页数:3
粒子群算法
function Gbest = findap(amax,pmax,H,V)
e = 0.01;%精度
generation = 1;
maxGeneration = 30;%最大种群代数
dimsize = 2;%初始粒子维数
popsize = 10; %初始种群个数
wcmax=0.9;
wcmin=0.1;
c1=2;
c2=2;
speedmax=100;
pop =initpop(popsize,dimsize,amax,pmax);
[objvalue,Pbest,Gbest,ggBest] = calobjvalue(pop,popsize,H,V,dimsize);
while ggBest < e
[Pbest,Gbest] = regulate(pop,H,V,Pbest,Gbest);
pop = renew(pop,Pbest,Gbest,popsize,dimsize,wcmax,wcmin,generation,maxgeneration,c1,c 2,speedmax,amax,pmax);
[objvalue,Pbest,Gbest,ggBest] = calobjvalue(pop,popsize,H,V,dimsize);
generation=generation+1;
if generation > maxGeneration
break;
end
end
end
%----初始化种群---%
function pop =initpop(popsize,dimsize,xmin,xmax)
pop =unifrnd(xmin,xmax,popsize,2*dimsize);
end
%----计算粒子的适应度和确定群体的Pbest和Gbest
function [objvalue,Pbest,Gbest,ggBest] = calobjvalue (pop,popsize,H,V,dimsize) for i= 1:popsize
%Vfit = GetVolume(pop(i,1),pop(i,2),H);
L = length(V);
objvaluetemp = 0;
for j = 1 : L-1
Vfit(j) = win(pop(i,1),pop(i,2),H(j));
Vfit(j+1) = win(pop(i,1),pop(i,2),H(j+1));
objvaluetemp = objvaluetemp +(((Vfit(j+1)-Vfit(j))-V(j))/V(j))^2;
end
objvalue(i,1) =sqrt(objvaluetemp);
end
Pbest= pop(:,1:dimsize);
[ggBest,xindex] = min(objvalue);
xtemp =pop(xindex,1:dimsize);
Gbest = xtemp;
end
%----粒子速度和位置的更新----%
function pop = renew(pop,Pbest,Gbest,popsize,dimsize,wcmax,wcmin,generation,maxgeneration,c1,c 2,speedmax,xmax,xmin)
for t=1:popsize
for dimIndex= 1: dimsize
w = wcmax-(wcmax-wcmin)*(generation/maxgeneration) ;
sub1 = Pbest( t, dimIndex) -pop( t, dimIndex) ;
sub2 = Gbest(1, dimIndex) -pop( t, dimIndex) ;
tempV =w*pop (t,dimszie+dimIndex) +c1* unifrnd (0, 1) * sub1 + c2* unifrnd (0, 1) * sub2;
if tempV > speedmax
pop(t,dimszie+dimIndex) =speedmax;
elseif tempV < ( -speedmax)
pop(t,dimsize+dimIndex) = -speedmax;
else
pop(t,dimszie+dimIndex) =tempV;
end
tempposition= pop (t,dimIndex) +pop (t,dimsize+dimIndex);
if tempposition > xmax
pop( t, dimIndex) = xmax;
elseif tempposition pop(t,dimIndex) =xmin; else pop( t, dimIndex) = tempposition; end end end end %------粒子Pbest和Gbest的更新 function [pBest,gBest] =regulate(pop,H,V,pBest,gBest) for i =1:popsize L = length(V); objtemp = 0; for j = 1 : L-1 Vfit1(j) = win(pop(i,1),pop(i,2),H(j)); Vfit1(j+1) = win(pop(i,1),pop(i,2),H(j+1)); objtemp = objtemp +(((Vfit1(j+1)-Vfit1(j))-V(j))./V(j))^2; end