粒子群优化算法的实现
介绍
粒子群优化算法 (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
结论
粒子群是一种基于鸟类和鱼类在社会环境中自然行为的优化算法。
广告
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP