⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpso.m

📁 PSO的基本程序和3种经典的改进程序
💻 M
字号:
function returnValue=BPSO()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% default %%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
choice=4;
kd=0.5;maxStep=2000;C1=2;C2=2;PSONUM=100;Dn=100;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%mainMatrix=[Xi,Vi,XiBest,currentFitness,LocalFitnessBest];
% Xi=[1,D],Vi=[D+1,2*D],XiBest=[2*D+1,3*D],currentFitness=3*D+1
% LobalFitnessBest=3*D+2
if(choice==1) margin=600;
elseif(choice==2) margin=30;
elseif(choice==3) margin=100;
elseif(choice==4) margin=5.12;
else margin=100;%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
end
BPSO=zeros(PSONUM,3*Dn+2);
tempMatrixCriewank=zeros(1,Dn);
tempMatrixRosenbrock=zeros(1,Dn-1);
BPSO(:,1:2*Dn)=margin*rands(PSONUM,2*Dn);
BPSO(:,Dn+1:2*Dn)=kd*BPSO(:,Dn+1:2*Dn);
BPSO(:,2*Dn+1:3*Dn)=BPSO(:,1:Dn);
if(choice==1)
    for j=1:PSONUM
        for i=1:Dn
            tempMatrixCriewank(1,i)=cos(BPSO(j,i)/sqrt(i));
        end
        BPSO(j,3*Dn+1)=sum(BPSO(j,1:Dn).^2,2)/4000-prod(tempMatrixCriewank,2)+1;
        BPSO(j,3*Dn+2)=BPSO(j,3*Dn+1);
    end
elseif(choice==2)
    BPSO(:,3*Dn+1)=exp(1)+20-20*exp(-0.2*sqrt(mean(BPSO(:,1:Dn).^2,2)))-exp(mean(cos(BPSO(:,1:Dn)*2*pi),2));
    BPSO(:,3*Dn+2)=BPSO(:,3*Dn+1);
elseif(choice==3)
    for j=1:PSONUM
        for i=1:Dn-1
            tempMatrixRosenbrock(1,i)=100*(BPSO(j,i+1)-BPSO(j,i).^2).^2+(BPSO(j,i)-1).^2;
        end
        BPSO(j,3*Dn+1)=sum(tempMatrixRosenbrock,2);
        BPSO(j,3*Dn+2)=BPSO(j,3*Dn+1);
    end
elseif(choice==4)%^^^^^^^^^^^^^
    BPSO(:,3*Dn+1)=sum(BPSO(:,1:Dn).^2+10-10*cos(BPSO(:,1:Dn)*2*pi),2);
    BPSO(:,3*Dn+2)=BPSO(:,3*Dn+1);
else%^^^^^^^^^^^^^^^^^^^^^^^^^^^
    BPSO(:,3*Dn+1)=0.5-((sin(sqrt(BPSO(:,1).^2+BPSO(:,2).^2))).^2-0.5)./(1+0.001*(BPSO(:,1).^2+BPSO(:,2).^2)).^2;
    BPSO(:,3*Dn+2)=BPSO(:,3*Dn+1);
end
[GlobalBest,GlobalIndex]=min(BPSO(:,3*Dn+2),[],1);
counter=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:maxStep
    for j=1:PSONUM
        %%%%%%%%%%%%%%%%%%%% Update Vi
        for k=1:Dn
            BPSO(j,Dn+k)=(0.9-i/maxStep*0.5)*BPSO(j,Dn+k)+rand*C1*(BPSO(j,2*Dn+k)-BPSO(j,k))+rand*C2*(BPSO(GlobalIndex,2*Dn+k)-BPSO(j,k));
            if(BPSO(j,Dn+k)>kd*margin)
                BPSO(j,Dn+k)=kd*margin;
            elseif(BPSO(j,Dn+k)<-kd*margin)
                BPSO(j,Dn+k)=-kd*margin;
            end
        end
        %%%%%%%%%%%%%%%%%%%% Update tempXi
        BPSO(j,1:Dn)=BPSO(j,1:Dn)+BPSO(j,Dn+1:2*Dn);
        for k=1:Dn
            if(BPSO(j,k)>margin)
                BPSO(j,k)=margin;
            elseif(BPSO(j,k)<-margin)
                BPSO(j,k)=-margin;
            end
        end
        %%%%%%%%%%%%%%%%%%%% Update Fitness
        if(choice==1)
            for k=1:Dn
                tempMatrixCriewank(1,k)=cos(BPSO(j,k)/sqrt(k));
            end
            BPSO(j,3*Dn+1)=sum(BPSO(j,1:Dn).^2,2)/4000-prod(tempMatrixCriewank,2)+1;
        elseif(choice==2)
            BPSO(j,3*Dn+1)=exp(1)+20-20*exp(-0.2*sqrt(mean(BPSO(j,1:Dn).^2,2)))-exp(mean(cos(BPSO(j,1:Dn)*2*pi),2));    
        elseif(choice==3)
            for k=1:Dn-1
                tempMatrixRosenbrock(1,k)=100*(BPSO(j,k+1)-BPSO(j,k).^2).^2+(BPSO(j,k)-1).^2;
            end
            BPSO(j,3*Dn+1)=sum(tempMatrixRosenbrock,2);
        elseif(choice==4)
            BPSO(j,3*Dn+1)=sum(BPSO(j,1:Dn).^2+10-10*cos(BPSO(j,1:Dn)*2*pi),2);
        else%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            BPSO(j,3*Dn+1)=0.5-(sin(sqrt(BPSO(j,1).^2+BPSO(j,2).^2)).^2-0.5)./(1+0.001*(BPSO(j,1).^2+BPSO(j,2).^2)).^2;
        end
        %%%%%%%%%%%%%%%%%%% Update LocalBestFitness and XiBest
        if(BPSO(j,3*Dn+1)<BPSO(j,3*Dn+2))
            BPSO(j,3*Dn+2)=BPSO(j,3*Dn+1);
            BPSO(j,2*Dn+1:3*Dn)=BPSO(j,1:Dn);
        end
    end
    %%%%%%%%%%%%%%%%%%% Update GlobalBest and its Index 
    [GlobalBest,GlobalIndex]=min(BPSO(:,3*Dn+2),[],1);
    globalBestRecordMatrix(i)=GlobalBest;
end
returnValue=globalBestRecordMatrix;
% GlobalBest
% xx=1:maxStep;
% plot(xx,globalBestRecordMatrix);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -