# PSO **Repository Path**: zhang_ywen/PSO ## Basic Information - **Project Name**: PSO - **Description**: 粒子群算法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-18 - **Last Updated**: 2021-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PSO 粒子群算法 一、粒子群算法的概念   粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.   PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。 自然界中的鸟类生物作为一个种群,通过与种群内部生物个体之间的相互竞争与交流进行协作的这种社会智能行为称为所谓的群体社会智能。我们可以将鸟类生物的这种竞争与社会智能行为广泛的应用于某些科学或者现实社会问题的研究与解决中。例如,在觅食的过程中,种群中的生物个体之间有一种信息交换,每只种群的鸟都是可以根据其伙伴的生活或者觅食行为信息知道它们的经历,然后通过这种的协作与信息交流可以更快的寻找得到种群中不可能被预知的食物或者离散分布的鸟类食物。 粒子群梯度优化法的算法主要特点是基于诸如kennedy和kaeberhard从而在人类和其他鸟群之间寻找人类食物的各种自然现象使他获得了基于粒子群的优化灵感,于是1995年后他提出了一种新的基于粒子群梯度优化(particleswarmoptimization,简称pso)的优化算法。在pso中,我们基本就可以把一个关于鸟群的问题抽象地把它看成一些可自由移动的点,这些可自由移动的点可以看成没有任何受其他的因素所直接影响的可自由移动点,而这个鸟群问题的最佳解决方法就是寻找食物,这些可自由移动点的位置与寻找食物(解)的速度之间距离是不定的,有可能远也就是有可能近,所以在这种可远也可近的问题优化状态下的这个时候我们可以充分理解鸟群成为一个可能的问题最优解,而因为鸟群在探寻某种食物的过程中会不断的改变其食物所在的个体位置与移动速度,然后通过群间竞争迭代的搜索和与其他个体的协作,使得一群鸟逐渐的汇聚成群后不断通过其方向、位置的变化来为鸟群寻找到相应的食物,即可以得到鸟群的问题最优值,是一种基于鸟群的pswarmintelligence的鸟群优化问题解决方法,所以理解鸟群对于寻找某种食物的问题优化过程就是在鸟群中寻找这个问题最优解的一个过程。 3.2.2粒子群算法基本原理 在粒子群优化中,每个粒子都有自己的速度。如果他们以自己的速度在特定的空间移动,他们将记录并更新他们搜索过的最佳位置。我们简称之为个体最优。同时,这些粒子还将共享组中所有其他粒子经过的最佳位置。这里我们可以简称为个体最优,如何判断全局最优或群体最优的位置? 显然适应度函数值是由适应度函数决定的,因此我们将测量和计算粒子使用的适应度函数。确定所有粒子是否完成了它们自己的运动和记录,如果完成了,则继续下一个迭代。最后,整个小组的行动将朝着更好的食物来源飞去。速度、目前所处的地点、和过往中最优的地点是群体中的每个粒子都所含括三个重要属性。当我们用第p代为研究对象时,则对n维搜索空间中(在本文要研究的背包问题中,即项目总数)的第i个粒子将进行如下的表示: 粒子当前位置: 粒子当前速度: 粒子个体最优: ; 其中为一个满足迭代到k代满足适应度的函数,为f(x)最大值时的 粒子群体最优: ; 其中:为满足迭代到K代满足适应度函数f(x)最大值时的 首先,根据第k代粒子的原始位置,再经过评价每个粒子的适应度值,确定在第k+l代粒子的群体最优和个体最优,然后按如下公式分别得到各个粒子的速度及位置: 其中,w:可以表示粒子在区间移动的惯性加速系数k=1,2.maxiter:表示迭代的惯性加速次数;r1,r2:为粒子在区间[0,1]上的随机数,由于此随机数均匀的分布所以此随机数可以用来维持粒子群体的多样性;ci,c2:就是粒子的加速系数,也因此可以说是学习的因子。maxiter为最大的迭代次数;i=1,2,,n:表示粒子个体的排序,即第一群中有i个粒子个体;n:可以表示在一个粒子群内的粒子总个数;j=1,2,.,n:从粒子数学的角度上可以明确说是粒子的维数(因为如本文所述是在粒子的背包问题中,维数就是一个物品的总粒子个数){(n)o} 如下为一个标准粒子群算法的具体步骤: 1.群体的初始化:主要初始化种群的初始的位置和速度; 2.适应度函数用于计算组中每个粒子的适应度; 3.根据适应度函数f(x)的值来对当前个体最优和群体最优进行更换; 4.根据粒子的位置与速度两公式来计算并更新每一个粒子的速度、位置; 5.如果程序满足上述结束的条件,则根据输出找到的近似最优程序的解以及输出对应的适应 度值,终止程序;否则,转向2 如下是粒子群算法流程图: