粒子群优化算法的实现
介绍
粒子群优化算法 (PSO) 是一种受自然启发的算法,基于鸟群或鱼群的社会行为,是一种基于种群的搜索算法。它模拟了鸟类飞行模式、队形和群体行为。
粒子群优化算法
在 PSO 算法中,每个个体都被视为高维搜索空间中的一个粒子。受人们社会和心理行为的启发,人们倾向于模仿他人的成功,在特定的搜索空间中对粒子进行类似的改变。特定粒子在一个特定群体中的变化方式,取决于粒子从其邻居那里获得的知识。换句话说,我们可以说粒子在搜索空间中的行为受群体中其他粒子的活动影响。因此,PSO 是一种共生行为。因此,由于这种社会倾向和行为,粒子会在概率上倾向于返回到先前成功的搜索空间。
示例
让我们看看下面粒子群优化算法的实现。
## Particle Swarm from __future__ import division import random import math def cost_func(y): tot=0 for i in range(len(y)): tot+=y[i]**2 return tot class Part: def __init__(self,x0): self.pos_i=[] self.vel_i=[] self.position_best_i=[] self.error_best_i=-1 self.error_i=-1 for i in range(0,n_dim): self.vel_i.append(random.uniform(-1,1)) self.pos_i.append(x0[i]) def eval(self,cFunction): self.error_i=cFunction(self.pos_i) if self.error_i < self.error_best_i or self.error_best_i==-1: self.position_best_i=self.pos_i self.error_best_i=self.error_i def upd_vel(self,position_best_g): w=0.5 c1=1 c2=2 for i in range(0,n_dim): r1=random.random() r2=random.random() vel_cognitive=c1*r1*(self.position_best_i[i]-self.pos_i[i]) vel_social=c2*r2*(position_best_g[i]-self.pos_i[i]) self.vel_i[i]=w*self.vel_i[i]+vel_cognitive+vel_social def upd_pos(self,bnds): for i in range(0,n_dim): self.pos_i[i]=self.pos_i[i]+self.vel_i[i] if self.pos_i[i]>bnds[i][1]: self.pos_i[i]=bnds[i][1] if self.pos_i[i] < bnds[i][0]: self.pos_i[i]=bnds[i][0] class ParticleSwarmOpt(): def __init__(self,cFunction,x0,bnds,number_particles,maxiter): global n_dim n_dim=len(x0) err_best_g=-1 position_best_g=[] swm=[] for i in range(0,number_particles): swm.append(Part(x0)) i=0 while i < maxiter: for j in range(0,number_particles): swm[j].eval(cFunction) if swm[j].error_i < err_best_g or err_best_g == -1: position_best_g=list(swm[j].pos_i) err_best_g=float(swm[j].error_i) for j in range(0,number_particles): swm[j].upd_vel(position_best_g) swm[j].upd_pos(bnds) i+=1 print('Result:') print("Best g : " ,position_best_g) print("Best error g: ", err_best_g) init=[5,5] b =[(-1,10),(-20,20)] ParticleSwarmOpt(cost_func,init,b,number_particles=15,maxiter=50)
输出
Result: Best g: [-7.414272934827646e-06, 3.1121531435141664e-06] Best error g: 6.465694034080286e-11
结论
粒子群是一种基于鸟类和鱼类在社会环境中自然行为的优化算法。
广告