粒子群算法

  • 格式:doc
  • 大小:28.00 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

粒子群算法

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