初探粒子群算法

在这个学期,有接触过机器学习的一些基本思想,也尝试着弄个手写识别的Demo,虽然算法不是很高级,但也从中了解到机器学习是怎么一回事,其实也就是那么一回事,最重要的是想清楚机器学习有什么用。

这个暑假,偶然的发现了粒子算法这个新鲜的名词,百度了一波,是这么一回事:【粒子群算法(Particle Swarm Optimization,简称PSO),或称粒子群优化,是属于人工智能算法,公元1995年由肯尼迪(Kennedy)与埃伯哈特(Eberhart)(1995)两位学者所提出,这两位学者借由观察鸟类族群觅食的讯息传递所得到的一个启发,粒子群算法的理论基础是以单一粒子来做为鸟类族群之中的单一个体,于算法中赋予该粒子(个体)拥有记忆性,并能够透过与粒子群体中的其他粒子之间的互动而寻求到最适解。因此在粒子群算法的基础理论可以理解,任一个体(粒子)皆可用有自身移动过程中所产生的记忆与经验,当个体移动的同时,能依造自身的经验与记忆来学习调整自身的移动方向,由于在粒子群算法中,多个粒子是同时移动的,且同时以自身经验与其他粒子所提供的经验进行比对找寻最适当的解,并使自己处于最适解中,该粒子群算法的特性使得粒子不单单受自身演化的影响,同时会对群体间的演化拥有学习性、记忆性,并使粒子本身达到最佳调整。】 但我们看到这样的解释的时候,也许会不知其所云,有的人就会自己吓自己,觉得这东西深不可测,但其实也就是那么回事。我们要懂得提取关键信息,然后用我们自己的语言去定义它。

我们姑且拿蚂蚁比作粒子,我们都知道蚂蚁是没有领袖的,也就是没有人指挥他们应该去哪里找食物的,他们也不知道食物在哪里,只能自己去找,那蚂蚁是怎么去找的呢?科学家也真是通过研究蚂蚁的这种觅食行为提出了群体智能的概念。

如果只有一只蚂蚁出去找食物,那么凭它一个人的力量,只能找到巢附近很小范围的食物, 效率很低。但当蚂蚁的数量多到一定的程度后,并且蚂蚁之间能通讯,大家就能分头去找,但有一只蚂蚁找到后就会通知其他的蚂蚁,其余的蚂蚁就跟随着找到的蚂蚁一起去寻找,这样效率就提高了不少了。

这种算法是怎么实现的呢?

1. 随机初始化粒子群体的位置和速度。通常是在允许的范围内随机产生的,每个粒子的 pbest 坐标设置为其当前位置 ,且计算出其相应的个体极值(即个体的适应度值) ,而全局极值(即全局的适应度值) 就是个体极值中最好的 ,记录该最好值的粒子序号 ,并将 gbest 设置为该最好粒子的当前位置。
2. 计算每个粒子的适应值。
3. 对每个粒子 ,将其适应值与个体极值进行比较 ,如果较优 ,则更新当前的个体极值。
4. 对每个粒子 ,将其适应值与全局极值进行比较 ,如果较优 ,则更新当前的全局极值。
5. 根据式(1) 、(2) ,更新每个粒子的位置和飞行速度。
6. 如未达到预先设定的停止准则(通常设置为最大迭代次数) ,则返回步骤 2 ,若达到则停止计算。
PSO 算法可用伪代码表示如下 :
初始化粒子群 ;
DO
  For 每个粒子
    计算其适应度 ;
  If (适应度优于粒子历史最佳值)
    用 Xi 更新历史最佳个体 Pi ;
  End
  选取当前粒子群中最佳粒子 ;
  If (当前最佳粒子优于群历史最佳粒子)
    用当前群最佳粒子更新 Pg ;
  For 每个粒子
    按式(1) 更新粒子速度 ;
    按式(2) 更新粒子位置 ;
  End
While 最大迭代数未达到或最小误差未达到。

通俗点的理解就是在一群粒子间,每个粒子有自己的最优状态(包括位置、速度…),整个群体也有一个最优的状态,但这个整体的最优状态是根据群里内的粒子状态的改变而不断的改变的,所以当群体中粒子状态的迭代更新,整体的最优状态也会更新,就会有最优的状态出现。

以上就是自己对群体智能的一点理解,可能大部分都是在胡扯…如果您发现什么不对的地方,欢迎留言。。

你可能感兴趣的:(小智随想录,粒子群算法)