本科毕设是关于pso算法的,碰到了很多问题,所以想分享一下学习到的一些知识。
pso是用来寻找全局最优值的算法。所以对其公式进行的改造一般是为了避免落入局部最优。gcpso则是考虑到了速度更新公式中,第二三项对寻优结果可能造成的影响或者说弊端。
标准的pso模型在t+1时刻对粒子速度位置更新公式为
word里面的公式复制不过来,直接贴图片了。上标t代表迭代次数。w是惯性权重,即维持之前速度的比例。r是取值【0,1】的随机数。c1和c2分别代表认知和社会参数,即向自己历史最佳位置学习,和向全局历史最佳位置学习。所以公式(1)是速度的更新,分别和现在的速度,自身历史最佳位置还有全局历史最佳位置有关。
根据式(1),试想如果当前更新的粒子恰好属于历史最佳位置,即第二三项中的p和x相等。那么速度将只依赖于wv,因为后两项为0。如果当前粒子的速度特别慢,该粒子位置只会有很小的更新,没有跳出局部最优。所有粒子又会向它汇聚。于是所有的粒子就会在达到历史最优位置之后停滞。这样就导致了粒子群的过早成熟。甚至历史最佳位置不是局部最优点,仅仅是当前粒子群发现的最佳位置。gcpso就是为了解决这个问题。
所以为了避免这种情况,引入对历史最佳粒子的更新公式。(仅对历史最佳粒子更新(在速度更新之前,会对历史最佳位置进行更新))
v(t