粒子群优化算法

粒子群优化算法是模仿生物社会系统而设计的,更确切的说,是由简单个体组成的群体与环境以及个体之间的互动行为,是一种基于群智能方法的进化计算技术。

粒子群算法源于鸟群捕食行为的模拟。一群鸟在一个固定的区域里随机搜索区域里唯一的一块食物,所有的鸟都不知到食物在哪里,但是他们知道自己当前所处的位置离食物还有多远,那么找到食物的最优策略是什么呢?最简单的方法就是搜索离食物最近的鸟的周围区域。

粒子群算法从这种模型中得到启示并用于解决优个问题。在粒子群算法中,每个优化问题的解都是搜索空间中的一只鸟,我们称之为“粒子”。所有的粒子都有一个适应值,这个适应值根据被优化的函数来确定。每个粒子还有一个速度决定它们飞行的方向和距离,这个速度根据它自己的飞行经验和同伴的飞行经验进行动态调整。

粒子群算法初始化为一群随机粒子(随机解),然后通过迭代得到最优解。在每一次迭代过程中,粒子通过两种经验呢来更新自己。自己的飞行经验就是粒子经历过的最好位置(有最好的适应值),即本身所找到的最优解,这个解叫做个体极值。同伴的飞行经验是群体所有粒子经过的最好位置,即整个种群目前找到的最优解,这个解叫做全局极值。另外也可以不用整个群体,而只用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。

利用粒子群算法计算下列函数在区间【-400,400】的最大值:

f(x,y)=0.5+[\frac{sin^{2}\sqrt{x^{2}+y^{2}}-0.5}{1+0.001(x^{2}+y^{2})^{2}}]

clear all;
close all;
n=1500;m=100;
c1=2;c2=2;
vmax=[10,10];
alpha=0.5;
w=1;
x=800*rand(m,2)-400;
v=zeros(m,2);
f1=inline('-0.5+((sin(sqrt(x(:,1).^2+x(:,2).^2))).^2-0.5)./((1+0.01.*(x(:,1).^2+x(:,2).^2)).^2)','x');
p=x;j=1;
[ft,it]=min(f1(x));
pg=x(it,:);
while i<=n
    ftemp=f1(x);
    vt=w*v+c1*rand*(p-x)+c2*rand([pg(1)-x(:,1),pg(2)-x(:,2)]);
    v=[(vt(:,1)<vmax(1)).*vt(:,1)+vt(:,1)+(vt(:,1)>=vmax(1))*vmax(1),(vt(:,2)<vmax(2)).*vt(:,2)+(vt(:,2)>=vmax(2))*vmax(2)];
    x=x+alpha*v;
    iit=find(f1(x)-ftemp<0);
    [ftemp,it]=min(f1(x));
    pgtemp=x(it,:);
    pg=(ft<ftemp)*pg+(ft>ftemp)*pgtemp;
    p(iit,:)=x(iit,:);
    i=i+1;
end
x=pg,f=ftemp
    

运行程序,输出如下:

x = 

    1.0e-008*-0.00854074563935        0.746613355488466

f =

    -1

求得函数最大值为-1.

猜你喜欢

转载自blog.csdn.net/star_of_science/article/details/82720742