前言
粒子群算法实现起来并不是很难,算法思想可以参加我上一篇博文,不多说了。好了,Matlab版的粒子群走起。
1 定义变量
粒子群算法有很多参数,做实验的时候会纠结在参数问题上,这里就随机设定了。有时候,参数好坏,是成败关键。没有修过Matlab语言的朋友不用担心,之后会把C或Java版的也总结一下。知识嘛,多多益善。Let's go !
根据公式,需要c1 c2 r1 r2 w M
代码如下:
2 初始化种群
这里是随机生成在不同维度上的粒子,就是说在D个方向上撒上M个粒子。
代码如下:
3 计算粒子适应度
通过调用适应度函数,计算适应度值。在此处,初始化个体的适应度值p(i)和全局最优的适应度值gbest。
代码如下:
4 更新个体最优值
将适应度函数计算的结果和目前的个体适应度值相比较,将适应度值较小的位置保存下来。
代码如下:
5 更新全局最优值
上面已经将全局最优位置初始化,只需要将它和目前个体的最优位置相比较即可,位置代入适应度函数,取最小的值对应的位置,保存该位置即可。
代码如下:
6 更新粒子的速度和位置
根据公式来写即可,对于不同的粒子群算法这个地方会需要改动。
代码如下:
7 适应度函数
适应度函数最好另外建一个Script文件,把它放进去。适应度函数可以根据要研究的问题做相应的改动,下面列出一个函数,仅供测试。
代码如下:
8 完整代码
到目前,应该有两个m文件,一个是适应度函数的,一个是粒子群的。不过,还需要在粒子群的文件中加入一些代码,主要是调整代码顺序,迭代次数和精度问题,具体参见代码即可。
完整代码如下:
9 实验结果
如图: