C语言实现粒子群算法

C语言实现粒子群算法

一、粒子群算法介绍

  粒子群算法是一种进化算法,其思想来源是模仿自然界中的鸟类觅食。

  假设有50只鸟随机出现在一个位置,并且他们有随机的初始速度,假设单位时间内初始速度不变,单位时间后,他们会到达一个新的位置,并且会判断自己这个位置的好坏程度(可以理解成离食物的远近),其他的鸟儿下一次选择速度的时候会学习在好坏程度上的自己的历史最优位置和所有鸟的历史最优位置,调整自己的速度,然后重复上述过程,直到轮次结束。

  我们可以用这种思想来寻找全局最优解,假设我们要找一个二维函数f(x,y)的最小值,(x,y)∈D,我们可以先生成50个粒子,他们有随机的初始二维坐标,然后随机生成50个粒子的初始速度,然后经过单位时间后,50个粒子到达了新的位置,计算他们在这个位置的函数值,然后把自己的值放到局部最优里,把所有值中最小的值对应的粒子的信息(位置,坐标,值)放到全局最优数组里。

  接下来的每一轮行为都是相似的,利用循环完成:根据到上一轮以前的全局最优和自己的历史最优和自己上一轮的速度调整自己的速度,然后再求值,再放到局部最优数组的第t个位置里,然后对局部最优数组求最小值放到局部最优数组的第t个位置,然后求此轮全局的最小值,然后比较过往的全局最小值和此轮全局最小值,取较小者放到全局最小值数组的第t个位置中。

  最后,当t大于循环轮次的时候,跳出循环,输出全局最小值数组中的第t-1个位置。

  负责速度更新的式子可以这样写。
vi(t)⃗=αvi(t−1)⃗+β(jubui⃗(t−1)−ri⃗(t−1))+γ(quanju⃗(t−1)−ri⃗(t−1)) \vec{v_{i}(t)}=\alpha\vec{v_{i}(t-1)}+\beta(\vec{jubu_{i}}(t-1)-\vec{r_{i}}(t-1))+\gamma(\vec{quanju}(t-1)-\vec{r_{i}}(t-1)) vi(t) =αvi(t1) +β(jubui (t1)ri

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值