LabVIEW论坛
直播中

面向晨曦LV

7年用户 135经验值
擅长:LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW LabVIEW EDA/IC设计 LabVIEW LabVIEW LabVIEW LabVIEW
私信 关注
[文章]

LabVIEW粒子群优化(PSO)算法实现

常常听到这个算法那个算法的,今天就介绍一下粒子群优化算法的案例。实际效果图如下:
1.png

PSO算法网上有很多关于matlab实现的方式及原理讲解,有些是生动的,有些是形象的,但感觉都有点过的看不懂,这里我就大白话说过程,没有生动的鸟类比喻,没有具体的行列式表达,就按照正常思维走。(大神级别的请绕路哈!我是菜鸡,别和我互啄。。。thanks)
假设有个2元(x和y)方程求极值Z,首先想到的是群解法,X定Y变一直到XY穷尽了,这样的组合共有x*y个方式。算一遍机器都难受。这群货引入了随机数“碰运气”,找到没次下的极值,然后这个过程重复许多次,在这许多次中得到最值和最值的解。具体想法见下段:
开始的时候我想给随机50组解,那么解就是50*2(稍微带点行列式好讲些)。适应度函数与适应度值从名字看就懵逼了,其实就是将每组解(X和Y)带到你想求极值的函数表达式中去得到的值,这个过程他们叫适应度函数与最后的值叫适应度值,简单的就是范围内随机的数值求解过程得到50个Z。有点意思的是将Z的最大值叫做全局最优解gbest(全局,globe),对饮的解值XY。这是第一代,一代一代怎么理解呢?第一代只知道指定范围,所以就只能随机,下一代的数值就将上一代的值认为随机数,跟迭代一样吧。速度和位置更新公式,先更新速度后更新位置。速度想成一步跨多大,这个有你本来一步的距离、你和自己最值的距离、你和全局最值的距离三个限制着,所以前面都有权重系数之类(就是防止步子迈大了扯的疼)。位置更新就好理解了就当前位置加个一步之隔。说的再多不如实际例子。 2.png

1、初始化。pop[][]和V[][]行列,内部填充不同的随机数,如果对于确定函数中每个参数都有范围应该重新对每个参数范围重新设定后并列成二维数组。pop[][]每行经过函数后产生的一列数组叫解数组的初始化(适应度函数)将这一列的最大值求出来作为全局最大值初始值,该最大值对应的解数组记为gbest[],pbeast[][]初始值和pop[][]相同,在后面迭代中,同一行的解值约大就将该解值对应的个元素更新到该数组中。
2、进入迭代循环中,第一次是在外界都初始化并赋值给移位寄存器保存。开始下一代时先进行速度再更新粒子并判断该粒子在不在范围内,不在的话强制到范围内,这就存在一个问题,不同元素如果范围不相同,还需要另外加一个不同元素判定时的范围情况。更新后同样进行求救,将该次解值与上次比较,更优则将该解值与解对应的各个元素更新到群体极值和群体极值位置中去。不不断更新制止迭代完或者达到一定条件(这里未体现)t退出。

3、将全局最优值对应的解元素重复输出后形成p行d列数组,重新求解每行(每次重复)的最值,在最值中求最值及最值对应的解元素,减少开始以随机数形成的解元素而导致的误差。同样最外边是不同的W结果
附带例子及自己理解的过程分析


回帖(3)

2019-7-7 20:28:28
不明觉厉
举报

richthoffen

2019-7-8 18:28:34
不是太懂
举报

汪刚刚

2019-7-17 23:06:49
算法都有目的吧,这个的目的看不太明白
举报

更多回帖

发帖
×
20
完善资料,
赚取积分