粒子群算法(PSO)——Java实现

粒子群算法是计算算法的一种,1995年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。

该算法利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。

试想一下,如果一群鸟在一片区域中寻找食物,所有的鸟都不知道食物在什么地方,但是每一只鸟都知道自己距离食物有多远,也知道这一群鸟中离食物最近的鸟在什么位置,这样每一只鸟都可以改变当前自己的移动方向,逐渐向离食物最近的鸟所在位置靠近,这样通过不断的搜寻,就能找到食物。

这一思想可以运用到数学的优化问题中,比如,要求解 f ( x , y ) = x 3 + 3 x y 2 − 15 x − 12 y f(x,y)=x^3+3xy^2-15x-12y f(x,y)=x3+3xy215x12y 的最大值,我们可以假设有100只鸟,初始时这100只鸟分布在不同的位置,每只鸟的位置可以抽象成自变量x和y,有了随机的x和y的值就可以计算出每只鸟f(x)的值,f(x)的值越大表示鸟离食物越近,同时计算出这100只鸟中离食物最近的位置作为此时的全局最优解,之后,根据每一只鸟当前的位置与全局最优解的位置更新当前的速度与位置,向最优解的位置靠近,这样通过数次迭代,就能得到食物的位置。

更新每只鸟的速度与位置的数学公式为:

v [ i ] = w ∗ v [ i ] + c 1 ∗ r a n d ( ) ∗ ( p b e s t [ i ] − p r e s e n t [ i ] ) + c 2 ∗ r a n d ( ) ∗ ( g b e s t − p r e s e n t [ i ] ) v[i] = w*v[i]+c_1*rand()*(pbest[i]-present[i])+c_2*rand()*(gbest-present[i]) v[i]=wv[i]+c1ra

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值