粒子群算法(7)------粒子群算法局部版本的实现2011-09-02 csdn博客 niuyongjie最近要写篇与粒子群算法有关的文章,因此不得不实现粒子群算法的局部版本 。粒子群算法局部版本的实现思想已经在粒子群算法(3)----标准的粒子群算法( 局部版本)中已经讲述。主要分为3个函数。第一个函数为粒子群初始化函数 LocalInitSwarm(SwarmSize......AdaptFunc)其主要作用是初始化粒子群的粒子 ,并设定粒子的速度、位置在一定的范围内。本函数所采用的数据结构如下所示 :表ParSwarm记录的是粒子的位置、速度与当前的适应度值,我们用W来表示位 置,用V来代表速度,用F来代表当前的适应度值。在这里我们假设粒子个数为N, 每个粒子的维数为D。
W1,1 | W1,2 | ... | W1,D | V1,1 | V1,2 | ... | V1,D-1 | V1,D | F1 | 第1个粒子 |
W2,1 | W2,2 | ... | W2,D | V2,1 | V2,2 | ... | V2,D-1 | V2,D | F2 | 第2个粒子 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ....... |
WN-1,1 | WN-1,2 | ... | WN-1,D-1 | VN-1,1 | VN-1,2 | ... | VN-1,D-1 | VN-1,D | FN-1 | 第N-1个粒子 |
WN,1 | WN,2 | ... | WN,D | VN,1 | VN,2 | ... | VN,D-1 | VN,D | FN | 第N个粒子 |
表OptSwarm不但要记录自身历史最优解,还需要记录每个粒子邻域( 采用环形邻域)的最优解,以及全部粒子搜索到的全局最优解。因此应该有2*N+1 行,前SwarmSize行记录粒子自己历史最优解,后SwarmSize行记录邻域最优解。用Wg代表全局最优解,W.,1代表每个粒子的历史最优解。粒子群初始化阶段表 OptSwarm的前N行与表ParSwarm中的相同,而Wg的值为表ParSwarm中适应度值的最 大值对应的行。
W1,1 | Wj,2 | ... | Wj,D-1 | Wj,D | 第1个粒子的历史最优解 |
W2,1 | Wk,2 | ... | Wk,D-1 | Wk,D | 第2个粒子的历史最优解 |
... | ... | ... | ... | ... | ... |
W(N-1),1 | Wl,2 | ... | Wl,D-1 | Wl,D | 第N-1个粒子的历史最优解 |
W(N),1 | Wm,2 | ... | Wm,D-1 | Wm,D | 第N个粒子的历史最优解 |
Wl,1 | ... | ... | ... | Wl,D | 第一个粒子的邻域最优解 |
Wl,2 | ... | ... | ... | Wl,D | 第二个粒子的邻域最优解 |
... | ... | ... | ... | ..... | .... |
Wl,N | ... | ... | ... | ... | 第N个粒子的邻域最优解 |
Wg,1 | Wg,2 | ... | Wg,D-1 | Wg,D | 全局粒子的历史最优解 |
根据这样的思想MATLAB代码如下: