首页 > 编程知识 正文

粒子群算法流程图,粒子群算法初始化

时间:2023-05-04 23:48:26 阅读:107835 作者:124

1粒子群PSO算法概述1.1维基粒子群算法(Particle Swarm Optimization,简称PSO )或粒子群优化是一种人工智能算法。 1995年肯尼迪(Kennedy )和黄鳝(Eberhart ) 1995 )两位学者提出,这两位学者是通过观察鸟类群体觅食信息的传递而得到的启示之一。 粒子群算法的理论基础是将单个粒子作为鸟类群体中的单个个体,在算法中赋予该粒子(个体)记忆性,通过与粒子群体中其他粒子的相互作用求得最优解。 因此,粒子群算法的基础理论表明,任何物体(粒子)都可以利用自身移动过程中产生的记忆和经验,在个体移动的同时,根据自身经验和记忆学习调整自身的移动方向。 因为粒子群算法中,多个粒子同时移动,同时以自身的经验对照其他粒子提供的经验寻找最优解,使自身成为最优解。 根据该粒子群算法的特性,粒子不仅受到自身进化的影响,而且对群体间的进化具有学习性、记忆性,能够对粒子本身进行优化调整。

1.2个简单行为规范 冲突避免群体在一定空间内移动,个体有自己的移动意愿,但不得影响其他个体的移动。 避免冲突和争执。

速度匹配:个体必须与中心移动速度相适应,无论方向、距离、速度都要相互配合。

群体中心:个体向群体中心移动,对准群体中心向目标前进。

1.3基本理论公式PSO是基于群鸟觅食而提出的,是一个最优决策过程,类似于人的决策过程,往往基于两个重要信息:它们的经验和自身的经验。

因此,在一只群鸟觅食的过程中,一个D维空间中,m只鸟组成群体,第I只鸟的位置表示如下

当将该位置代入目标函数时,可求出适应值,并且由3358www.Sina.com/确定位置的好坏。 适应值越小,该位置越好,各鸟经历过的最佳位置为

适应值的大小取的适应值最小的最好位置是

第I只鸟的速度是

整个鸟群

其中I=1,2,m表示第I个粒子(鸟)的d=1,2,d表示第d维; w称为惯性因子而不是负。r1和r2是在[ 0,1 ]范围内变换的随机数。称为约束因子,其目的是控制速度的权重。

1.4参数的选择1 .粒子数m

一般为20~40,特殊难题需要100-200个粒子。 粒子数越多,搜索范围越广,越容易找到全局最优解,算法运行时间也越长。

2 .惯性常数w

惯性因子w对粒子群算法的收敛性有很大的影响。 w可以取[ 0,1 ]区间的随机数,如果w一定,建议取0.6~0.75区间的值。

3 .加速常数c1和c2

加速常数c1和c2是调整自己的经验和社会经验在该运动中所起作用的权重。 一般设为c1=c2=2;

4 .最大飞行速度

粒子的最大飞行速度通常不超过最大速度的10%-20%。

2算法流程2.1具体步骤1 .初始化粒子群(速度和位置)、惯性因子、加速常数、最大重叠次数和算法结束的最小误差。

2 .评价各粒子初始适应值。

3 .将初始适应值作为各粒子的最佳值,将与各适应值对应的位置作为各粒子的最佳位置。

4 .将粒子中最佳匹配值作为全局最佳匹配值,将与各匹配值对应的位置作为粒子的全局最佳位置。

5 .用上式更新粒子速度

6 .限位处理飞行速度,不超过最大飞行速度

7 .用上式更新粒子位置

8 .比较各粒子的适应值是否好于历史的最佳值,如果是,则进行替换。

9 .计算粒子的全局最优适应值是否比历史最优值好,如果是,则进行替换。

10 .重复5-9,直到满足设定的最小误差或达到最大重叠次数。

11 .输出最佳粒子的全局最佳值和相应位置,以及每个粒子的局部最佳值和相应位置。

2.2伪代码foreach particle _ _ initializeparticleenddo _ _ foreach particle _ _ _ calculatefitnessvitness ebestfiness in history _ _ _ _ _ _ _ _ setcurrentvalueasthenewpbest _ _ end _ _ choosetheparticlewiththh _ _ foreach

pdate particle position according equation (b)____EndWhile maximum iterations or minimum error criteria is not attained 3 具体实现

建议采用MATLAB和Python,又相关的函数或库。

3.1 MATLAB

句法规则
x = particleswarm(fun,nvars)
x = particleswarm(fun,nvars,lb,ub)
x = particleswarm(fun,nvars,lb,ub,options)
x = particleswarm(problem)
[x,fval,exitflag,output] = particleswarm(___)

描述
x = particleswarm(fun,nvars)试图找到一个x达到局部最小值的向量fun。nvars是的尺寸(设计变量的数量)fun。
注意
传递额外参数(优化工具箱)介绍了如有必要,如何将额外参数传递给目标函数。

x = particleswarm(fun,nvars,lb,ub)定义了一组在设计变量下界和上界的,x,使得溶液中的范围内发现lb ≤ x ≤ ub。

x = particleswarm(fun,nvars,lb,ub,options)最小化,默认优化参数替换为中的值options。设置lb = [],ub = []如果没有界限。

x = particleswarm(problem)查找的最小值problem,其中problem为结构。

[x,fval,exitflag,output] = particleswarm(___),对于上述任何输入参数,返回:
标量fval,是目标函数值fun(x)
一个exitflag描述退出条件的值
output包含有关优化过程信息的结构

3.2 Python

我们使用常用的 scikit-opt库,可在GitHub上进行下载。
具体例子如下
1.准备待优化的目标函数

def demo_func(x): x1, x2, x3 = x return x1 ** 2 + (x2 - 0.05) ** 2 + x3 ** 2

2.实施PSO算法,并打印结果

from sko.PSO import PSOpso = PSO(func=demo_func, dim=3)fitness = pso.fit()print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y) 4 扩展

一般我们可以使用粒子群算法和神经网络一起用,或者使用k-means聚类和粒子群算法一起用等等。具体相关研究以及参考可查看相关论文。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。