matlab粒子群优化算法举例分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例 函数∑==10
12
)(i i x x f 对于适应度函数fitness 对其参数w ,1c ,3c 做出不同方式的比较以测试其对函数结果影响。
当22111==c c ,5.12212==c c ,2.1=w 。
(适应函数∑==10
12)(i i x x f )
程序1
当22111==c c ,5.12212==c c ,2.1=w 。
a)%主函数源程序(main.m )
%------基本粒子群算法 (particle swarm optimization )
%------名称: 基本粒子群算法
%------初始格式化
clear all; %清除所有变量
clc; %清屏
format long; %将数据显示为长整形科学计数
%------给定初始条条件------------------
N=40; %³初始化群体个数
D=10; %初始化群体维数
T=100; %初始化群体最迭代次数
c11=2; %学习因子1
c21=2; %学习因子2
c12=1.5;
c22=1.5;
w=1.2; %惯性权重
eps=10^(-6); %设置精度(在已知最小值的时候用)
%------初始化种群个体(限定位置和速度)------------
x=zeros(N,D); %x 是位置,初始化位置空间(矩阵)
v=zeros(N,D); %v 是速度,初始化速度空间(矩阵)
for i=1:N
for j=1:D
x(i,j)=randn; %随机初始化位置,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)
end
plot(x(:,j),'b*');grid on %’b*’表示颜色是绿的,用*显示在图上xlabel('粒子')
ylabel('初始位置')
tInfo=strcat('第',char(j+48),'维'); %strcat使括号里的东西连成字符串if(j>9)
tInfo=strcat('第',char(floor(j/10)+48)); %floor向负无穷方向取整char(rem(j,10)+48,'维'); %rem 取余
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(v(:,j),'b*');grid on %是不是应该是v(:,j)
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;
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) g1=p1(i,:); gbest1=pbest1(i); end end gb1=ones(1,T); %-----进入主循环,按照公式依次迭代直到满足精度或者迭代次数--- for i=1:T for j=1:N if (fitness(x1(j,:),D) p1(j,:)=x1(j,:); pbest1(j)=fitness(x1(j,:),D); end if(pbest1(j) 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; end plot(gb1) TempStr=sprintf('c1= %g ,c2=%g',c11,c21); title(TempStr); xlabel('迭代次数'); ylabel('适应度值'); %第二个图 subplot(1,2,2) %-----初始化种群个体(在此限定速度和位置)------------ x2=x; v2=v; %-----初始化种群个体最有位置和最优解----------- p2=x2;