1.问题描述:

        粒子群优化(Particle Swarm Optimization, PSO),又称微粒群算法,是由J. Kennedy和R. C. Eberhart等于1995年开发的一种演化计算技术,来源于对一个简化社会模型的模拟。其中“群(swarm)”来源于微粒群符合M. M. Millonas在开发应用于人工生命(artificial life)的模型时所提出的群体智能的5个基本原则。“粒子(particle)”是一个折衷的选择,因为既需要将群体中的成员描述为没有质量、没有体积的,同时也需要描述它的速度和加速状态。

      PSO算法最初是为了图形化的模拟鸟群优美而不可预测的运动。而通过对动物社会行为的观察,发现在群体中对信息的社会共享提供一个演化的优势,并以 此作为开发算法的基础。通过加入近邻的速度匹配、并考虑了多维搜索和根据距离的加速,形成了PSO的最初版本。之后引入了惯性权重w来更好的控制开发(exploitation)和探索(exploration),形成了标准版本。

2.部分程序:

function main
% this is particle swarm optimization program
% n:dimension of variable; m:number of particle
% x:m*n matrix; v:m*n matrix
% pbx:m*n matrix; gbx:1*n matrix
% pbf:m*1 matrix; gbf:number
clear all;
clc
tic;
E0=0.001; %permitted error
MaxNum=100; %iteration number of every time
%
n=1;
m=50;
c1=2;
c2=2;
w=1;
vmax=0.5;
rand('state',sum(100*clock));
% random m particle
x=-4+8*rand(m,n);
v=2*rand(m,n);
% compute fitness
for i=1:m
for j=1:n
f(i)=fitness(x(i,j));
end
end
% find individual max and global max
pbx=x;
pbf=f;
[gbf i]=min(pbf);
gbx=pbx(i,:);
% start loop
k=1;
while k<=MaxNum
for i=1:m
for j=1:n
f(i)=fitness(x(i,j));
end
if f(i)<pbf(i)
pbf(i)=f(i);
pbx(i,:)=x(i,:);
end
end
[gbf i]=min(pbf);
gbx=pbx(i,:);
for i=1:m
v(i,:)=w*v(i,:)+c1*rand*(pbx(i,:)-x(i,:))+c2*rand*(gbx-x(i,:));
for j=1:n
if v(i,j)>vmax
v(i,j)=vmax;
elseif v(i,j)<-vmax
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
if abs(gbf)<E0,break,end
k=k+1;
end
% Display the results
disp('the maximum value is');1/gbf-1
disp('and the corresponding coordinate is');gbx
x=-4:0.01:4;
y=1.1*(1-x+2*x.^2).*exp(-x.^2/2);
plot(x,y);
hold on;
plot(gbx,1/gbf-1,'r*');
hold off
toc

3.仿真结论:

粒子群优化_群体智能

D00001