PSO算法简介

粒子群优化算法(Particle Swarm Optimization,简称PSO), 是1995年Eberhart博士和Kennedy博士一起提出的,它是源于对鸟群捕食行为的研究。粒子群优化算法的基本核心是利用群体中的个体对信息的共享从而使得整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的最优解。

当然这是一种比较正式的说法,对于我们这些数模小白来说肯定希望有一种更加直观形象的解释。

我们不妨假设自己是一只身处鸟群中的鸟,现在要跟随头领去森林里找食物,我们每一只鸟都知道自己离食物的距离,却又不知道食物在哪个方向,

所以,我们在森林里漫无目地的飞着,每隔一段时间,大家会在微信群里共享一次各自与食物的距离。然后鸟A发现自己与食物的距离是5公里,而群里鸟Z距离食物最近,只有50米的距离。鸟A当机立断,在群里说:“我要去那看看!”然后一呼百应,鸟B、鸟C等都往鸟Z方向飞去,在鸟Z的周围寻找食物。

就这样,本来大家都在沿着自己的方向飞,现在都要向鸟Z的位置靠拢,所以大家需要修改自己的飞行速度和方向。但是,当所有鸟儿准备调整自己的飞行轨迹时,鸟H突然想到:虽然现在鸟Z离食物只有50米,但是自己曾经路过点P,那个位置离食物只有40米,所以它不知道自己是应该往点P方向还是往鸟Z的位置飞去。鸟H就把自己的纠结发到了微信群里,然后大家一致决定,还是两者平衡一下,对两个位置进行矢量相加,所以大家共同商量出了速度更新公式

其中,c1和c2被称为社会学习因子和个体学习因子。在速度更新公式之后,鸟儿自然也就知道位置更新公式。

纸上得来终觉浅,绝知此事要躬行。

下面,我们从一个例子来看粒子群算法的具体应用。

已知:

求y的最小值。

首先,我们要确定鸟群在哪片森林里寻找食物,也就是我们在优化问题中所说的可行域,在这里,我们取可行域为

因为鸟群在觅食环节之处可以认为其在森林中是随机分布的,因此我们在初始时刻将50个粒子随机撒入可行域中,然后计算其目标函数值,所有粒子向着目标函数值最小的点移动,我们可以简单画一个算法的基本流程。

PSO算法简介_第1张图片 PSO算法简介_第2张图片

第一步,我们设定粒子规模为50个,社会学习因子和个体学习因子为2,最大迭代次数为800。

第二步,在可行域内随机给定粒子位置。

PSO算法简介_第3张图片 PSO算法简介_第4张图片

第三步,计算目标函数值,并进行速度和位置更新。

PSO算法简介_第5张图片
PSO算法简介_第6张图片

当粒子满足终止条件时,跳出循环输出最优解,在迭代过程中,目标函数是这样变化的

PSO算法简介_第7张图片 PSO算法简介_第8张图片

算法在迭代30次后跳出循环,输出最优解为[0.0202,0.0426],此时目标函数值为

因为我们选用的例子为二次型规划,显然最优解为[0,0],最优值为0。

最后,我们用一个三维动画来展示一下粒子群算法的寻优过程。

PSO算法简介_第9张图片
PSO算法简介_第10张图片

你可能感兴趣的:(算法)