粒子群算法

粒子群算法是基于鸟群觅食的行为提出来的,每一个单一个体鸟视为搜索空间的一个粒子,都被视为问题的可能解,每个粒子都有一个由待优化函数决定的适应度函数,通过适应度值迭代更新粒子的位置和速度

粒子速度和位置的维度由问题的未知量决定,例如,求sin(∑i=1 to kxi-4)的最小值,如果k=2,那么速度V和位置X就是二维的,如果k=20,那么V和X都是20维的

设粒子i的历史最优位置为p,种群粒子的历史最优位置为pg,粒子按照下式来更新位置和速度:

v=w*v+c1r1(p-x)+c2r2(pg-x) c1和c2是加速常数,r1和r2是[0,1]之间的随机数

x=x+v

w*x表示粒子有维持自身速度的趋势,c1r1(p-x)表示粒子有向粒子历史最优位置移动的趋势,c2r2(pg-x)表示粒子有想群体最优位置逼近的趋势

算法流程:

1,初始化粒子群体,包括粒子种群数,每个粒子的速度和位置

2,计算各个粒子的适应度值

3,对于每个粒子,用它的适应度值与个体极值比较,如果fit>p,就p=fit

4,比较p和pg如果,p>pg,那么pg=p

5,根据上面的两式更新x和v

6,直到满足条件,否则返回2

下面的例子是由matlab实现的

function pso()
c1=2;
N=50;
D=30;
M=500;
c2=2;
w=0.7;
xx=zeros(1,D);
F=fitnessfunction(xx);
[x,y]=tso(@fitnessfunction,c1,c2,w,N,D,M);
end
%适应度函数
function F=fitnessfunction(x)
F=0;
for i=1:30
    F=F+x(i)^2+x(i)-6;
end
end

function [x,y]=tso(fitness,c1,c2,w,N,D,M)%初始化位置和速度
for i=1:N
    for j=1:D
        x(i,j)=randn;
        v(i,j)=randn;
    end
end%计算粒子的适应度值
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end%找出当前种群最优位置
pg=x(N,:)
for i=1:(N-1)
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end
end%更新速度和位置,相应地,随着迭代的进行,个体极值和全局极致也在变化
for i=1:M
    for j=1:N
        v(j,:)=w*v(j,:)+c1*rand*(y(j,:)-x(j,:))+c2*rand*(pg-x(j,:));
        x(j,:)=x(j,:)+v(j,:);
        if fitness(x(j,:))<p(j)
            p(j)=fitness(x(j,:));
            y(j,:)=x(j,:);
        end
        if p(j)<fitness(pg)
            pg=y(j,:)
        end
    end
end
disp(‘the position is:‘)
x=pg‘
disp(‘the value is‘)
y=fitness(pg)
end
时间: 2025-01-02 09:26:03

粒子群算法的相关文章

粒子群算法 Particle Swarm Optimization, PSO(转贴收藏)

粒子群算法(1)----粒子群算法简介 http://blog.csdn.net/niuyongjie/article/details/1569671 粒子群算法(2)----标准的粒子群算法 http://blog.csdn.net/niuyongjie/article/details/1572814 粒子群算法(3)----标准的粒子群算法(局部版本) http://blog.csdn.net/niuyongjie/article/details/1584946 粒子群算法(4)----粒子

算法(三)粒子群算法之局部粒子

在全局版的标准粒子群算法中,每个粒子的速度的更新是根据两个因素来变化的,这两个因素是:1. 粒子自己历史最优值pi.2.  粒子群体的全局最优值pg.如果改变粒子速度更新公式,让每个粒子的速度的更新根据以下两个因素更新,A. 粒子自己历史最优值pi.B. 粒子邻域内粒子的最优值pnk.其余保持跟全局版的标准粒子群算法一样,这个算法就变为局部版的粒子群算法. 一般一个粒子i 的邻域随着迭代次数的增加而逐渐增加,开始第一次迭代,它的邻域为0,随着迭代次数邻域线性变大,最后邻域扩展到整个粒子群,这时就

文化粒子群算法

文化粒子群算法:主群体运行PSO算法,种群数量N.知识空间也用相同的初始化方法(或其他初始化方法)取0.2*N个初始解,知识空间运行遗传算法(或其他进化算法)进行进化.两个种群同时进化,进化过程中,主群体每隔AcceptStep代,(例如AcceptStep=10),把自己的gbest替换掉知识空间的最差解,而知识空间在主群体每运行InfluenStep代(例如,InfluenceStep=BaseNum +DevNum*(EndStep-CurrentStep)/EndStep)就把自己的最好

C语言实现粒子群算法(PSO)二

上一回说了基本粒子群算法的实现,并且给出了C语言代码.这一篇主要讲解影响粒子群算法的一个重要参数---w.我们已经说过粒子群算法的核心的两个公式为: Vid(k+1)=w*Vid(k)+c1*r1*(Pid(k)-Xid(k))+c2*r2*(Pgd(k)-Xid(k))Xid(k+1) = Xid(k) + Vid(k+1) 标红的w即是本次我们要讨论的参数.之前w是不变的(默认取1),而现在w是变化的,w称之为惯性权重,体现的是粒子继承先前速度的能力. 经验表明:一个较大的惯性权重有利于全局

C语言实现粒子群算法(PSO)一

最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而且有些MATLAB自带了工具箱,当时有些只是利用工具箱求最优解问题,没有自己动手亲自去实现一遍,现在都忘的差不多了.我觉得那样层次实在是很浅,没有真正理解算法的核心思想.本着"纸上得来终觉浅,绝知此事要躬行"的态度,我决定现在重新复习一遍算法,然后手工用C语言重新实现一遍.说做就做,我第一

粒子群算法求解优化问题(MATLAB)

粒子群算法求解函数极值 初始化一个粒子群体随机分布在解空间中.然后每一次迭代,根据每个粒子的历史最优位置和粒子群的最优位置更新每个粒子的位置,直到满足要求为止. clc;clear all; tic; %程序运行计时 E0=0.001; %允许误差 MaxNum=100; %粒子最大迭代次数 narvs=1; %目标函数的自变量个数 particlesize=30; %粒子群规模 c1=2; %每个粒子的个体学习因子,也称为加速常数 c2=2; %每个粒子的社会学习因子,也称为加速常数 w=0.

粒子群算法(1)----粒子群算法简单介绍

一.粒子群算法的历史  粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,CAS中的成员称为主体.比方研究鸟群系统,每一个鸟在这个系统中就称为主体.主体有适应性,它能够与环境及其它的主体进行交流,而且依据交流的过程"学习"或"积累经验"改变自身结构与行为.整个系统的演变或进化包括:新层次的产生(小鸟的出生):分化和多样性的出现(鸟群中的鸟分成很多小的群):新的主题的出现(鸟寻找食物过程中,不断发现新

粒子群算法(1)----粒子群简要

一.历史粒子群算法  从复杂适应系统衍生PSO算法(Complex Adaptive System,CAS).CAS理论于1994年正式提出,CAS中的成员称为主体.比方研究鸟群系统,每一个鸟在这个系统中就称为主体.主体有适应性,它能够与环境及其它的主体进行交流,而且依据交流的过程"学习"或"积累经验"改变自身结构与行为. 整个系统的演变或进化包括:新层次的产生(小鸟的出生):分化和多样性的出现(鸟群中的鸟分成很多小的群):新的主题的出现(鸟寻找食物过程中.不断发现

数学建模方法-粒子群算法

一.引言 哈喽大家好,有一段时间没更新Blog了,最近身体不太舒服哈,今天开始继续更了.言归正传,这次要讲的是"粒子群算法".这个算法是由两个科学家在1995年,根据对鸟类捕食行为的研究所得到启发而想出来的.好的,接下来让我们开始吧. 二.鸟类捕食行为 鸟妈妈有7个鸟宝宝,有一天,鸟妈妈让鸟宝宝们自己去找虫子吃.于是鸟宝宝们开始了大范围的捕食行为.一开始鸟宝宝们不知道哪里可以找得到虫子,于是每个鸟宝宝都朝着不同的方向独自寻找. 但是为了能够更快的找到虫子吃,鸟宝宝们协商好,谁发现了虫子