《粒子群算法学习笔记.docx》由会员分享,可在线阅读,更多相关《粒子群算法学习笔记.docx(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、粒子群优化(PSO)近来,人们把粒子群群作为一种优化技术与其他演化算法进了比较,发觉pso算法对各 种优化问题特别有效。鸟群和鱼群的社会行为性激发Eberhart和Kennedy创立了群体智能。PSO算法模拟粒子集合,其中的粒子相互都是N维空间的(N是解向量的维数),用一 个特别简洁的的公式集实现群集的行为,即粒子具有肯定的自由区搜寻N维搜寻空间,但 也通过追踪当前具有最佳性能的粒子来限制群集的行为表现。集群中的粒子可看成一个对象, 它包含向量(与解空间具有相同的维数,可以简洁地理解为粒子当前的位置,既位置向量)、 速度(向量中每个元素都有对应的速度,从而形成向量速度)、适应度(当前向量)和一
2、个 表示迄今为止找到的最好位置向量。(如下图)粒子:位置向量(x, y);速度向量(x, y); 适应度(x, y);最好位置(x, y);群集中的粒子移动受到两个参数的影响。第一个是该粒子自身最好位置(位置向量), 其次个是群集中任何粒子找到的全局最好位置。每个参数对粒子的影响都是可调的。采用pso算法实现通用函数最大化问题的求解。PSO算法基本流程如下:1、随机产生粒子向量及其速度向量作为粒子种群(最初这些例子是随机分布的,并随机移 动,但随着算法的执行,群行为慢慢呈现出来,并引导粒子探究多维空间);2、当随机设置粒子时,计算出对应的适应度并作为当前适应度存储下来,同时纪录具有最 好适应度
3、的全局最优粒子(这个粒子从肯定程度上看是整个群集的中心);3、纪录每个粒子的历史最优向量到最有位置;4、设置终止准则,假如找到满足解或达到最大迭代次数,算法结束,并显示迄今找到的全 局最优解。5、假如算法未达到其终止准则,更新粒子的速度和位置(给定当前位置和当前速度),重 新计算每个粒子的适应度,检查是否达到终止准则;6、重复这些过程直到达到终止准则。粒子位置更新公式:Xn = Xn + Vn* Atyn = yn + 丫口 * AtX方向加上其增量y方向加上其增量粒子速度更新公式:VnVn+ G*Ri*(GXnPXn) + (C2 * R2 * (PBxnPXn)由上公式可知,速度的转变受到
4、两个相互独立的参数的影响:全局最优粒子(Gxn )和自身最好位置(PBxn)o每一项都有一个加速常数(J和C2)来打算 全局最优解和自身最优解对速度公式的影响。与此同时,为增加可变性,生成两 个听从随机分布的随机数(和R2)应用在这两项中。通过对这两个随机数取 不同的值,可以强化两项中的某一项(全局或者自身)对速度的影响,这样做是 为了有更大的可变性来探测解空间。适应度函数:(适应度代表着对最佳解的接近程度,适应度越高越好)Z = _ *0xy适应度定义为粒子当前位置向量的函数算法实现:#include #include pso.hinclude math.h typedef struct d
5、ouble x;double y; vec_t;typedef struct vec_t coord;位置向量vec_t velocity;速度向量double fitness;适应度vec_t best_coord;粒子自身历史最佳位置double fitness_best; 最佳适应度 particle_t; 粒子的描述粒子总数迭代次数种群表示#define MAX_PARTICLES10#define MAX ITERATIONS 30particle_t particlesMAX_PARTICLES;particle_t gbest;particle_t gbest;全局最好位置dou
6、ble cl = (double)0.3;double c2 = (double)O.l;double dt = (double)0.05;double cl = (double)0.3;double c2 = (double)O.l;double dt = (double)0.05;加速常数cl加速常数c2时间间隔double compute_fitness( vec_t *vec_p )计算适应度1 -double x,y;double fitness;/* Cache the coordinates to simply the function. */ x = vec_p-x;y = v
7、ec_p-y;/* Bound the location of the particle */if (x 10.0) | |(y 10.0) fitness = 0.0;else /* Equation 7.5 */ fitness =(sin(x)/x) * (sin(y)/y) * (double)lO.O;return fitness;)void update_particle( particle_t *particle_p ) 更新粒子( /* Update the particles position (Equation 7.8) */ particle_p-coord.x += (
8、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 the fitness is better than the personal best, then save it. */ if (particle_p-fitness particle_p-fitness_best) particle
9、_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, then save it. */ if (particle_p-fitness_best gbest.fitness) gbest.fitness = particle_p-fitness_best;gbest.coord.x = particl
10、e_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 * RANDOM() * (particle_p-best_coord.x - particle_p-coord.x); particle_p-velocity.y +=(cl * RANDOM() * (gbest.coord.y - part
11、icle_p-coord.y) +(c2 * RANDOM() * (particle_p-best_coord.y - particle_p-coord.y); return;)void init_population( void ) 初始化种群(int i;for (i = 0 ; i MAX_PARTICLES ; i+) particlesi.coord.x = (RANDOM() * 20.0 -10.0);particlesi.coord.y = (RANDOM() * 20.0 -10.0);particlesi.fitness = compute_fitness( &parti
12、clesi.coord );/* Initialize the particles velocity */particlesi.velocity.x = (RANDOM()/10.0);particlesi.velocity.y = (RANDOM()/10.0);/* Store the current best for this particle */particlesi.best_coord.x = particlesi.coord.x;particlesi.best_coord.y = particlesi.coord.y;particlesi.fitness_best = parti
13、clesi.fitness;)gbest.fitness = 0.0;return;)int main()(int i, j;RANDINIT();init_population();for (i = 0 ; i MAX_ITERATIONS ; i+) for (j = 0 ; j MAX_PARTICLES ; j+) update_particle( &particlesj);printf(Current Best: %g %g = %gn, gbest.coord.x, gbest.coord.y, gbest.fitness);)return 0; Current Current C
14、urrent Current Current Current Current Current Current Current Current Current Current Current CurrentBest Best Best Best Best Best Best Best Best Best Best Best Best Best Best-1.11621 -0.493307 = 7.72655-1.11544 -0.492758 = 7.72966-1.11468 -0.492209 = 7.73277-1 .11391-1.11315-1.11239-1.11162-1.1108
15、6-1.11009-1.10933-1.10856-0.491661-0.491112-0.490564-O.49O015-0.489467-0.488918-0.488369-0.4878217.735887.738997.74217.7452=7.7483=7.7514=7.7545=7.7576-1.1078 -0.487272 = 7.7607 -0.898146 0.599485 = 8.19642 0.218282 0.156079 = 9.88055 0.218282 0.156079 = 9.88055Current Current Current Current Curren
16、t Current Current Current CurrentBest Best Best Best Best Best Best Best BestPress anu kou-0.O214415-0.Q214415-0.O214415-0.0214415-0.0214415-0.0214415-0.O214415-0.0214415-O.0214415-0.181468-0.181468-0.181468-0.181468-0.181468-0.181468-0.181468-0.181468-0.181468to continue.9.944449.944449.944449.944449.944449.944449.944449.944449.94444