简介:
粒子群算法是模拟群体智能所建立起来的一种优化算法。粒子群算法的思想可以用鸟类在一个空间内随机觅食来进行说明:所有的鸟都不知道食物具体在哪里,但是它们知道大概离多远,最简单有效的方法就是搜寻目前离食物最近的鸟的周围区域。
基本思想:
因此,粒子群算法就是把鸟看成一个个粒子,并且拥有它们的位置与速度这两个信息,然后根据自身已经找到的离食物最近的解和参考整个群集中找到的最近的解去改变自己的飞行方向,最后我们会发现,整个集群大致向着一个地方聚集。这个地方就是离食物最近的区域。这就是粒子群算法的思想。
粒子群算法概述:
在粒子群算法中,每个优化问题的潜在解都是搜索空间中的一只鸟,我们称之为粒子。所有的粒子都有一个由被优化的函数决定的适值(fitness value),每个粒子还有一个速度决定它们的飞行方向和一个位置信息。然后粒子就追随当前的最优粒子在解空间中搜索。
粒子群算法首先一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身找到的最优解,这个解称为个体极值pbest;另一个极值是整个种群目前找到的最优解,这个极值是全局极值gbest。另外也可以不用整个种群而是只用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。
算法描述:
我们把用变量pbest来记录个体搜索到的最优解,用gbest来记录整个群体在一次迭代中搜索到的最优解。粒子速度和位置的更新公式如下:
v[i+1] = w * v[i] + c1 * rand() * (pbest[i] - present[i]) + c2 * rand() * (gbest - present[i])
present[i+1] = present[i] + v[i+1]
第一部分为“惯性(inertia)”或“动量(momentum)”部分,反映了粒子的运动“习惯(habit)”,代表粒子有维持自己先前速度的趋势;第二部分为“认知(cognition)”部分,反映了粒子对自身历史经验的记忆(memory)或回忆(remembrance),代表粒子有向自身历史最佳位置逼近的趋势;第三部分为“社会(social)”部分,反映了粒子间协同合作与知识共享的群体历史经验,代表粒子有向群体或邻域历史最佳位置逼近的趋势,
其中v[i]代表第i个粒子的速度,w代表惯性权值,c1和c2表示学习参数,rand()表示在0-1之间的随机数,pbest[i]代表第i个粒子搜索到的最优值,gbest代表整个集群搜索到的最优值,present[i]代表第i个粒子的当前位置。
标准粒子群算法流程:
标准的粒子群算法流程如下:
Step1:初始化粒子群,包括群体规模N,每个粒子的位置 x[i] 和速度 v[i];
Step2:计算每个粒子的适应度值fi;
Step3: 对每个粒子,用它的适应度值 f[i] 和个体极值 pbest[i] 比较,如果 f[i]>pbest[i] ,则用 f[i] 替换掉 pbest[i];
Step4: 对每个粒子,用它的适应度值 f[i] 和全局极值 gbest 比较,如果 f[i]>gbest[i] 则用 f[i] 替 gbest[i];
Step5: 根据公式(2-1),(2-2)更新粒子的速度 v[i] 和位置 x[i] ;
Step6: 如果满足结束条件(误差足够好或到达最大循环次数)退出,否则返回Step2。