粒子群优化算法及其参数设置(程序部分)(共33页).doc
精选优质文档-倾情为你奉上附录程序1当,。a)%主函数源程序(main.m)%-基本粒子群算法 (particle swarm optimization)%-名称: 基本粒子群算法%-初始格式化clear all; %清除所有变量clc; %清屏format long; %将数据显示为长整形科学计数%-给定初始条条件-N=40; %³初始化群体个数D=10; %初始化群体维数T=100; %初始化群体最迭代次数c11=2; %学习因子1c21=2; %学习因子2c12=1.5;c22=1.5;w=1.2; %惯性权重eps=10(-6); %设置精度(在已知最小值的时候用)%-初始化种群个体(限定位置和速度)-x=zeros(N,D);v=zeros(N,D); % zeros(m,n)产生m×n的全0for i=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 endend%-显示群位置-figure(1)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(2)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)endfigure(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)<gbest1) g1=p1(i,:); gbest1=pbest1(i); endendgb1=ones(1,T);%-浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-for i=1:T for j=1:N if (fitness(x1(j,:),D)<pbest1(j) p1(j,:)=x1(j,:); pbest1(j)=fitness(x1(j,:),D); end if(pbest1(j)<gbest1) g1=p1(j,:); gbest1=pbest1(j); end v1(j,:)=w*v1(j,:)+c11*rand*(p1(j,:)-x1(j,:)+c21*rand*(g1-x1(j,:); x1(j,:)=x1(j,:)+v1(j,:); end gb1(i)=gbest1;endplot(gb1)TempStr=sprintf('c1= %g ,c2=%g',c11,c21);title(TempStr);xlabel('迭代次数');ylabel('适应度值');%第二个图subplot(1,2,2)%-初始化种群个体(在此限定速度和位置)-x2=x;v2=v;%-初始化种群个体最有位置和 最优解-p2=x2;pbest2=ones(N,1);for i=1:N pbest2(i)=fitness(x2(i,:),D);end%-初始化种全局最有位置和 最优解-g2=1000*ones(1,D);gbest2=1000;for i=1:N if(pbest2(i)<gbest2) g2=p2(i,:); gbest2=pbest2(i); endendgb2=ones(1,T);%-浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-for i=1:T for j=1:N if (fitness(x2(j,:),D)<pbest2(j) p2(j,:)=x2(j,:); pbest2(j)=fitness(x2(j,:),D); end if(pbest2(j)<gbest2) g2=p2(j,:); gbest2=pbest2(j); end v2(j,:)=w*v2(j,:)+c12*rand*(p2(j,:)-x2(j,:)+c22*rand*(g2-x2(j,:); x2(j,:)=x2(j,:)+v2(j,:); end gb2(i)=gbest2;endplot(gb2)TempStr=sprintf('c1= %g ,c2=%g',c12,c22);title(TempStr);xlabel('迭代次数');ylabel('适应度值');b)适应度函数%适应度函数(fitness.m)function result=fitness(x,D)sum=0;for i=1:D sum=sum+x(i)2;endresult=sum;程序2当于对比a)%主函数源程序(main.m)%-基本粒子群算法 (particle swarm optimization)%-名称: 基本粒子群算法%-初始格式化clear all; %清除所有变量 clc; %清屏format long; %将数据显示为长整形科学计数%-给定初始条条件-N=40; %³初始化群体个数D=10; %初始化群体维数T=100; %初始化群体最迭代次数c11=2; %学习因子1c21=2; %学习因子2c12=0;c22=2;w=1.2; %惯性权重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; %随机初始化速度 endend%-显示群位置-figure(1)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(2)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)endfigure(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)<gbest1) g1=p1(i,:); gbest1=pbest1(i); endendgb1=ones(1,T);%-浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-for i=1:T for j=1:N if (fitness(x1(j,:),D)<pbest1(j) p1(j,:)=x1(j,:); pbest1(j)=fitness(x1(j,:),D); end if(pbest1(j)<gbest1) g1=p1(j,:); gbest1=pbest1(j); endv1(j,:)=w*v1(j,:)+c11*rand*(p1(j,:)-x1(j,:)+c21*rand*(g1-x1(j,:); x1(j,:)=x1(j,:)+v1(j,:); end gb1(i)=gbest1;endplot(gb1)TempStr=sprintf('c1= %g ,c2=%g',c11,c21);title(TempStr);xlabel('迭代次数');ylabel('适应度值');%第二个图subplot(1,2,2)%-初始化种群个体(在此限定速度和位置)-x2=x;v2=v;%-初始化种群个体最有位置和 最优解-p2=x2;pbest2=ones(N,1);for i=1:N pbest2(i)=fitness(x2(i,:),D);end%-初始化种全局最有位置和 最优解-g2=1000*ones(1,D);gbest2=1000;for i=1:N if(pbest2(i)<gbest2) g2=p2(i,:); gbest2=pbest2(i); endendgb2=ones(1,T);%-浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-for i=1:T for j=1:N if (fitness(x2(j,:),D)<pbest2(j) p2(j,:)=x2(j,:); pbest2(j)=fitness(x2(j,:),D); end if(pbest2(j)<gbest2) g2=p2(j,:); gbest2=pbest2(j); endv2(j,:)=w*v2(j,:)+c12*rand*(p2(j,:)-x2(j,:)+c22*rand*(g2-x2(j,:); x2(j,:)=x2(j,:)+v2(j,:); end gb2(i)=gbest2;endplot(gb2)TempStr=sprintf('c1= %g ,c2=%g',c12,c22);title(TempStr);xlabel('迭代次数');ylabel('适应度值');b)适应度函数%适应度函数(fitness.m)function result=fitness(x,D)sum=0;for i=1:D sum=sum+x(i)2;endresult=sum;程序3当于对比a)%主函数源程序(main.m)%-基本粒子群算法 (particle swarm optimization)%-名称: 基本粒子群算法%-初始格式化clear all; %清除所有变量 clc; %清屏format long; %将数据显示为长整形科学计数%-给定初始条条件-N=40; %³初始化群体个数D=10; %初始化群体维数T=100; %初始化群体最迭代次数c11=2; %学习因子1c21=2; %学习因子2c12=2;c22=0;w=1.2; %惯性权重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; %随机初始化速度 endend%-显示群位置-figure(1)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(2)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)endfigure(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)<gbest1) g1=p1(i,:); gbest1=pbest1(i); endendgb1=ones(1,T);%-浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-for i=1:T for j=1:N if (fitness(x1(j,:),D)<pbest1(j) p1(j,:)=x1(j,:); pbest1(j)=fitness(x1(j,:),D); end if(pbest1(j)<gbest1) g1=p1(j,:); gbest1=pbest1(j); end v1(j,:)=w*v1(j,:)+c11*rand*(p1(j,:)-x1(j,:)+c21*rand*(g1-x1(j,:); x1(j,:)=x1(j,:)+v1(j,:); end gb1(i)=gbest1;endplot(gb1)TempStr=sprintf('c1= %g ,c2=%g',c11,c21);title(TempStr);xlabel('迭代次数');ylabel('适应度值');%第二个图subplot(1,2,2)%-初始化种群个体(在此限定速度和位置)-x2=x;v2=v;%-初始化种群个体最有位置和 最优解-p2=x2;pbest2=ones(N,1);for i=1:N pbest2(i)=fitness(x2(i,:),D);end%-初始化种全局最有位置和 最优解-g2=1000*ones(1,D);gbest2=1000;for i=1:N if(pbest2(i)<gbest2) g2=p2(i,:); gbest2=pbest2(i); endendgb2=ones(1,T);%-浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-for i=1:T for j=1:N if (fitness(x2(j,:),D)<pbest2(j) p2(j,:)=x2(j,:); pbest2(j)=fitness(x2(j,:),D); end if(pbest2(j)<gbest2) g2=p2(j,:); gbest2=pbest2(j); endv2(j,:)=w*v2(j,:)+c12*rand*(p2(j,:)-x2(j,:)+c22*rand*(g2-x2(j,:); x2(j,:)=x2(j,:)+v2(j,:); end gb2(i)=gbest2;endplot(gb2)TempStr=sprintf('c1= %g ,c2=%g',c12,c22);title(TempStr);xlabel('迭代次数');ylabel('适应度值');b)适应度函数%适应度函数(fitness.m)function result=fitness(x,D)sum=0;for i=1:D sum=sum+x(i)2;endresult=sum;程序4对,分别对其取值,测试函数。a)%主函数源程序(main.m)%-基本粒子群算法 (particle swarm optimization)%-名称: 基本粒子群算法%-初始格式化clear all; %清除所有变量 clc; %清屏format long; %将数据显示为长整形科学计数%-给定初始条条件-N=40; %³初始化群体个数D=10; %初始化群体维数T=100; %初始化群体最迭代次数c1=1.1; %学习因子1c2=2; %学习因子2w1=1.2; %惯性权重w2=1.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; %随机初始化速度 endend%-显示群位置-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)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)<gbest1) g1=p1(i,:); gbest1=pbest1(i); endendgb1=ones(1,T);%-浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-for i=1:T for j=1:N if (fitness(x1(j,:),D)<pbest1(j) p1(j,:)=x1(j,:); pbest1(j)=fitness(x1(j,:),D); end if(pbest1(j)<gbest1) g1=p1(j,:); gbest1=pbest1(j); endv1(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;endplot(gb1)TempStr=sprintf('w= %g ',w1);title(TempStr);xlabel('迭代次数');ylabel('适应度值');subplot(1,2,2)%-初始化种群个体(在此限定速度和位置)-x2=x;v2=v;%-初始化种群个体最有位置和 最优解-p2=x2;pbest2=ones(N,1);for i=1:N pbest2(i)=fitness(x2(i,:),D);end%-初始化种全局最有位置和 最优解-g2=1000*ones(1,D);gbest2=1000;for i=1:N if(pbest2(i)<gbest2) g2=p2(i,:); gbest2=pbest2(i); endendgb2=ones(1,T);%-浸入主循环,按照公式依次迭代直到满足精度或者迭代次数-for i=1:T for j=1:N if (fitness(x2(j,:),D)<pbest2(j) p2(j,:)=x2(j,:); pbest2(j)=fitness(x2(j,:),D); end if(pbest2(j)<gbest2) g2=p2(j,:); gbest2=pbest2(j); end v2(j,:)=w2*v2(j,:)+c1*rand*(p2(j,:)-x2(j,:)+c2*rand*(g2-x2(j,:); x2(j,:)=x2(j,:)+v2(j,:); end gb2(i)=gbest2;endplot(gb2)TempStr=sprintf('w= %g ',w2);title(TempStr);xlabel('迭代次数');ylabel('适应度值');b)适应度函数%适应度函数(fitness.m)function result=fitness(x,D)sum=0;for i=1:D sum=sum+x(i)2;endresult=sum;程序5 对,对分别取,随笔其迭代影响a)%主函数源程序(main.m)%-基本粒子群算法 (particle swarm optimization)%-名称: 基本粒子群算法%-初始格式化clear all; %清除所有变量 clc; %清屏format long; %将数据显示为长整形科学计数%-给定初始条条件-N=40; %³初始化群体个数D=10; %初始化群体维数T=100; %初始化群体最迭代次数c1=1.1; %学习因子1c2=2; %学习因子2w1=1.2; %惯性权重w2=0; %惯性权重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; %随机初始化速度 endend%-显示群位置-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)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