matlab粒子群优化算法举例分析

精品文档

gbest=pbest(j); end

v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:)); x(j,:)=x(j,:)+v(j,:); end

gb(i)=gbest; end plot(gb)

TempStr=sprintf('w= %g ',w); title(TempStr); xlabel('迭代次数'); ylabel('适应值'); %适应度函数

function result=fitness(x,D) sum=0; for i=1:D

sum=sum+x(i)^2; end

result=sum;

%-------------------程序6------------------------- 程序6

对c1?c2?2,对分别取w1?1.2,w2?0随笔其迭代影响 a)%主函数源程序(main.m)

%------基本粒子群算法 (particle swarm optimization) %------名称: 基本粒子群算法 %------初始格式化

clear all; %清除所有变量 clc; %清屏

format long; %将数据显示为长整形科学计数 %------给定初始条条件------------------ N=40; %3初始化群体个数 D=10; %初始化群体维数 T=100; %初始化群体最迭代次数 c1=1.1; %学习因子1

26欢迎下载

精品文档

c2=2; %学习因子2 w1=0.4 %惯性权重1 w2=0.8 %惯性权重2 w3=1.2 %惯性权重3 w4=1.4 %惯性权重4 w5=1.6 %惯性权重5

eps=10^(-6); %设置精度(在已知最小值的时候用)-- %--------初始化种群个体(限定位置和速度)------------ x=zeros(N,D); v=zeros(N,D); for i=1:N for j=1:D

x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end

%------显示群位置---------------------- figure(1) for j=1:D if(rem(D,2)>0)

subplot((D+1)/2,2,j) else

subplot(D/2,2,j) plot(x(:,j),'b*');grid on xlabel('粒子') ylabel('初始位置')

tInfo=strcat('第',char(j+48),'维'); if(j>9)

tInfo=strcat('第',char(floor(j/10)+48),

char(rem(j,10)+48),'维'); end title(tInfo) end

%----显示种群速度----------------- figure(2)

27欢迎下载

精品文档

for j=1:D if(rem(D,2)>0)

subplot((D+1)/2,2,j) else

subplot(D/2,2,j) end

plot(x(:,j),'b*');grid on xlabel('粒子') ylabel('初始速度')

tInfo=strcat('第,char(j+48),'维'); if(j>9)

tInfo=strcat('第',char(floor(j/10)+48), char(rem(j,10)+48),'维); end title(tInfo) end figure(3) subplot(1,2,1)

%------初始化种群个体(在此限定速度和位置)------------ x1=x; v1=v;

%------初始化个体最优位置和最优值--- ------- p1=x1;

pbest1=ones(N,1); for i=1:N

pbest1(i)=fitness(x1(i,:),D); end

%------初始化全局最优位置和最优值--------------- g1=1000*ones(1,D); gbest1=1000; for i=1:N

if(pbest1(i)

28欢迎下载

精品文档

end end

gb1=ones(1,T);

%-----浸入主循环,按照公式依次迭代直到满足精度或者迭代次数--- for i=1:T for j=1:N

if (fitness(x1(j,:),D)

pbest1(j)=fitness(x1(j,:),D); end

if(pbest1(j)

v1(j,:)=w1*v1(j,:)+c1*rand*(p1(j,:)-x1(j,:))+c2*rand*(g1-x1(j,:)); x1(j,:)=x1(j,:)+v1(j,:); end

gb1(i)=gbest1; end plot(gb1)

TempStr=sprintf('w= %g ',w1); title(TempStr); xlabel('迭代次数'); ylabel('适应度值');

figure

subplot(1,2,2)

%-----初始化种群个体(在此限定速度和位置)------------ X3=x V3=v;

%-----初始化种群个体最有位置和 最优解----------- P3=x3;

Pbest3=ones(N,1); for i=1:N

pbest3(i)=fitness(x3(i,:),D);

29欢迎下载

精品文档

end

%-----初始化种全局最有位置和最优解------ g3=1000*ones(1,D); gbest3=1000; for i=1:N

if(pbest3(i)

gb3=ones(1,T);

%------浸入主循环,按照公式依次迭代直到满足精度或者迭代次数--- for i=1:T for j=1:N

if (fitness(x3(j,:),D)

pbest3(j)=fitness(x3(j,:),D); end

if(pbest3(j)

v3(j,:)=w3*v3(j,:)+c1*rand*(p3(j,:)-x3(j,:))+c2*rand*(g3-x3(j,:)); x3(j,:)=x3(j,:)+v3(j,:); end

gb3(i)=gbest3; end plot(gb3)

TempStr=sprintf('w= %g ',w3); title(TempStr); xlabel('迭代次数'); ylabel('适应度值');

figure

subplot(1,2,2)

30欢迎下载

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4