粒子群算法(7)------粒子群算法局部版本的实现

来源:互联网 发布:门户网站现状 大数据 编辑:程序博客网 时间:2024/05/17 03:10

最近要写篇与粒子群算法有关的文章,因此不得不实现粒子群算法的局部版本。粒子群算法局部版本的实现思想已经在粒子群算法(3)----标准的粒子群算法(局部版本)中已经讲述。主要分为3个函数。第一个函数为粒子群初始化函数LocalInitSwarm(SwarmSize......AdaptFunc)其主要作用是初始化粒子群的粒子,并设定粒子的速度、位置在一定的范围内。本函数所采用的数据结构如下所示:

 

表ParSwarm记录的是粒子的位置、速度与当前的适应度值,我们用W来表示位置,用V来代表速度,用F来代表当前的适应度值。在这里我们假设粒子个数为N,每个粒子的维数为D。

 

W1,1W1,2...W1,DV1,1V1,2...V1,D-1V1,DF1第1个粒子W2,1W2,2...W2,DV2,1V2,2...V2,D-1V2,DF2第2个粒子.....................................WN-1,1WN-1,2...WN-1,D-1VN-1,1VN-1,2...VN-1,D-1VN-1,DFN-1第N-1个粒子WN,1WN,2...WN,DVN,1VN,2...VN,D-1VN,DFN第N个粒子

 

表OptSwarm不但要记录自身历史最优解,还需要记录每个粒子邻域(采用环形邻域)的最优解,以及全部粒子搜索到的全局最优解。因此应该有2*N+1行,前SwarmSize行记录粒子自己历史最优解,后SwarmSize行记录邻域最优解。用Wg代表全局最优解,W.,1代表每个粒子的历史最优解。粒子群初始化阶段表OptSwarm的前N行与表ParSwarm中

的相同,而Wg的值为表ParSwarm中适应度值的最大值对应的行。

 

W1,1Wj,2...Wj,D-1Wj,D第1个粒子的历史最优解W2,1Wk,2...Wk,D-1Wk,D第2个粒子的历史最优解..................W(N-1),1Wl,2...Wl,D-1Wl,D第N-1个粒子的历史最优解W(N),1Wm,2...Wm,D-1Wm,D

第N个粒子的历史最优解

Wl,1.........Wl,D第一个粒子的邻域最优解Wl,2.........Wl,D第二个粒子的邻域最优解.....................Wl,N............第N个粒子的邻域最优解Wg,1Wg,2...Wg,D-1Wg,D全局粒子的历史最优解

 

根据这样的思想MATLAB代码如下:

 

下面的函数LocalPsoProcessByCircle实现了局部版粒子群算法的单步更新位置速度的功能,其中把速度的范围限制在每维范围的0.5倍。这个跟以前的版本有些区别,经过试验效果还可以

 

 

 

这两个函数给出以后,需要一个函数来把这两个函数组装起来,以此实现一个完整的粒子群算法,这个函数就是LocalPsoProcessByCircle

 

 

这里给出一个使用的例子代码,并分别解释各参数的含义:

 

在上面的代码中函数LocalPsoProcessByCircle中的qun代表粒子群的规模为20个,lizi代表每个粒子的维数为10,Scope是粒子的每一维的范围,同时也是速度的范围的二倍,@localinitswarm是初始化函数的句柄,@localsteppsobycircle是单步更新的函数句柄,@Rastrigin是适应度评价函数的句柄,1000代表真个算法循环1000次终止,其他参数参见说明文档。

原创粉丝点击