一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
1 粒子群算法
首先讲个小故事,说一说通俗理解:
一群分散的鸟儿在随机地飞行觅食,它们不知道食物所在的具体位置,在觅食过程中,每只小鸟都会记录自己飞行位置。突然,其中某一只小鸟A发现好多玉米,于是就喊:“快来,我这里有好多食物!”,然而,其他小鸟都只发现了零零星星的几个玉米粒。于是,每个小鸟在飞行的时候就有了一个指导的方向(往小鸟A的位置飞),但是,每个小鸟都有不忍心放弃当前努力搜寻过的位置(小鸟们心想:我这里刚才也找到点玉米粒,再继续找找说不定比你还要多)。因此,它们最终决定结合自身的经验和整个群体的经验,调整自己的飞行速度和所在位置,不断地寻找更加接近食物的位置,最终使得群体聚集到食物位置。
2 粒子群特征:
- 不与同伴相撞
- 与同伴保持特定距离
- 协同:遇到障碍物自动分开,过了障碍物后又自动聚合 其思想结合了群体最优、历史最优、随机扰动因子。
3 更新公式
粒子群速度更新公式和位移更新公式如下:
- 其中c1和c2为加速系数,代表了粒子向自身极值pbest和全局极值gbest推进的加速权值,通常都等于2.0。
- χ为压缩因子,限制粒子的飞行速度,保证算法有效收敛。
4 应用举例:
对于函数:
请使用粒子群优化算法解决该问题。
步骤1:产生初始种群,计算适应度
假设粒子群大小为3,在搜索空间中(即保证)随机初始化每个解的速度和位置,计算适应函数值,并且得到每个粒子的历史最优位置和群体的全局最优位置。
因为为三个粒子中最优的,因此当前全局最优粒子()选为,那接下来其他粒子就要往这个方向移动啦!
步骤2:更新速度和位移
根据历史自身的最优位置()和全局的最优位置(),更新每个粒子的速度和位置。
计算,对于这样的非法解(因为)超过了解空间范围,进行合法性调整。
步骤3:评估粒子的适应度函数值。
计算每个新粒子的适应度,更新历史最优位置和全局最优位置。
若某个粒子优于该粒子的历史最优解,则更新;若差于该粒子的历史最优解,则不改变。
然后选出当前全局最优解()
步骤4:判断是否满足结束条件
如果满足结束条件,则输出全局最优结果并结束程序,否则,转向步骤2继续。