《粒子群算法学习笔记》由会员分享,可在线阅读,更多相关《粒子群算法学习笔记(5页珍藏版)》请在金锄头文库上搜索。
1、粒子群优化(PSO)近来,人们把粒子群群作为一种优化技术与其他演化算法进了比较,发现pso算法对各 种优化问题非常有效。鸟群和鱼群的社会行为性激发Eberhart和Kennedy创立了群体智能。PSO算法模拟粒子集合,其中的粒子相互都是N维空间的(N是解向量的维数),用一 个非常简单的的公式集实现群集的行为,即粒子具有一定的自由区搜索N维搜索空间,但 也通过追踪当前具有最佳性能的粒子来限制群集的行为表现。集群中的粒子可看成一个对彖, 它包含向量(与解空间具有相同的维数,可以简单地理解为粒子当前的位置,既位置向量)、 速度(向量中每个元素都有对应的速度,从而形成向量速度)、适应度(当前向量)和一
2、个 表示迄今为止找到的最好位置向量。(如下图)群集中的粒子移动受到两个参数的影响。第一个是该粒子自身最好位置(位置向量), 第二个是群集中任何粒子找到的全局最好位置。每个参数对粒子的影响都是可调的。利用pso算法实现通用函数最大化问题的求解。PSO算法基本流程如下:1、随机产生粒子向屋及其速度向量作为粒子种群(最初这些例子是随机分布的,并随机移 动,但随着算法的执行,群行为渐渐呈现出来,并引导粒子探索多维空间);2、当随机设置粒子时,计算出对应的适应度并作为当前适应度存储下来,同时记录具有最 好适应度的全局最优粒子(这个粒子从一定程度上看是整个群集的中心);3、记录每个粒子的历史最优向量到最有
3、位置;4、设置终止准则,如果找到满意解或达到最犬迭代次数,算法结束,并显示迄今找到的全 局最优解。5、如呆算法未达到其终止准则,更新粒子的速度和位置(给定当前位置和当前速度),重 新计算每个粒子的适应度,检查是否达到终止准则;6、重复这些过程直到达到终止准则。粒子位置更新公式:Xn = xn + vn *At x方向加上其增量 yn = yn + vn *At y方向加上其增量粒子速度更新公式:由上公式可知,速度的改变受到两个相互独立的参数的影响:全局最优粒子(Gxn )和自身最好位置(PBxn)o每一项都有一个加速常数(5和C2)來决定 全局最优解和自身最优解对速度公式的影响。与此同时,为增
4、强可变性,生成两 个服从随机分布的随机数(Ri和R2)应用在这两项中。通过对这两个随机数取 不同的值,可以强化两项中的某一项(全局或者自身)对速度的影响,这样做是 为了有更大的可变性來探测解空间。适应度函数:(适应度代表着对最佳解的接近程度,适应度越高越好)Z =空空*沁_水0Xy适应度定义为粒子当前位置向量的函数算法实现:#include include pso.hinclude ,math.hHtypedef struct double x; double y; vec_t;typedef struct vec_t coord;vec_t velocity; double fitness;
5、vec_t best_coord; double fitness_best; particle_t;位置向量速度向量适应度粒子的描述define MAX_PARTICLES define MAXJTERATIONS10 粒子总数30 迭代次数粒子自身历史最佳位置 最佳适应度partide_t particlesMAX_PARTICLES;种群表示particle_t gbest;全局最好位置double cl = (double)0.3;加速常数 cldouble c2 = (double)O.l;加速常数 c2double dt = (double)0.05;时间间隔double compu
6、te_fitness( vec_t *vec_p )计算适应度double x,y;double fitness;/* Cache the coordinates to simply the function. */x = vec_p-x;y = vec_p-y;/* Bound the location of the particle */ if(x10.0) | | (y10.0) fitness = 0.0;else /* Equation 7.5 */fitness =(sin(x)/x) * (sin(y)/y) * (double)lO.O;return fitness;void
7、update_particle( particle_t *particle_p ) 更新粒子/* Update the particles position (Equation 7.8) */ particle_p-coord.x += (particle_p-velocity.x * dt); particle_p-coord.y += (particle_p-velocity.y * dt);/* Evaluate the particles fitness */ particle_p-fitness = compute_fitness( &particle_p-coord );/* If
8、 the fitness is better than the personal best, then save it. */ if (particle_p-fitness particle_p-fitness_best) particle_p-fitness_best = particle_p-fitness; particle_p-best_coord.x = particle_p-coord.x; particle_p-best_coord.y = particle_p-coord.y;/* If the fitness is better than the global best, t
9、hen save it. */ if (particle_p-fitness_best gbest.fitness) gbest.fitness = particle_p-fitness_best;gbest.coord.x = particle_p-coord.x; gbest.coord.y = particle_p-coord.y;/* Update the velocity vector (Equation 7.9) */ particle_p-velocity.x +=(cl * RANDOM() * (gbest.coord.x - particle_p-coord.x) +(c2
10、 * RANDOM() * (particle_p-best_coord.x - particle_p-coord.x); particle_p-velocity.y +=(cl * RANDOM() * (gbest.coord.y - particle_p-coord.y) +(c2 * RANDOM() * (particle_p-best_coord.y - particle_p-coord.y); return;void init_population( void ) 初始化种群for(i = 0;i MAX_PARTICLES ; i+) particlesi.coord.x =
11、(RANDOM() * 20.0 -10.0); particlesi.coord.y = (RANDOM() * 20.0 -10.0);particlesi.fitness = compute_fitness( &particlesi.coord ); /* Initialize the particles velocity */ particlesi.velocity.x = (RANDOM()/10.0); particlesi.velocity.y = (RANDOM()/10.0);/* Store the current best for this particle */ par
12、ticlesi.best_coord.x = particlesi.coord.x; particlesi.best_coord.y = particlesi.coord.y; particlesi.fitness_best = particlesi.fitness;gbest.fitness = 0.0;return;int main()RANDINITf);init_population();for(i = 0;i MAX_ITE RATIO NS ; i+) for(j = 0;j MAX_PARTICLES ; j+) update_particle( &particlesj);pri
13、ntffCurrent Best: %g %g = %gnH,gbest.coord.x, gbest.coord.y, gbest.fitness);return 0;CurrentBest:-1.116210.493307:7.72655CurrentBest:-1.115440.4927587.72966CurrentBest:-1.11468o.492209r.73277CurrentBest:-1.11391o.491661r.73588CurrentBest:-1.11315-0.491112 :7.73899CurrntBest:-1.11239-0.490564f.7421Cu
14、rrentBest:-1.11162-0.490015r.7452CurrentBest:-1.11086-0.4894677.7483CurrentBest:-1.11009-0.488918?.7514CurrentBest:-1.1Q933-0.488369r.7545CurrentBest:-1.10856-Q.487821 :r.7576CurrentBest:-1.10780 487272 =7.7607CurrentBest:-0.898146 0.599485 :8.19642CurrentBest:0.2182820.156879 =9.88055CurrentBest:0.2182820.156079 =9.88055CurrentBest:-0.02144150.1814689.94444CurrentBest:-0.02144156.1814689.94444CurrentBest:-0.02144150.1814689.94444CurrentBest:-0.02144150.1814G89.94444Curren