粒子群算法(PSO)是一种重要的进化算法,各种不同的粒子群算法有是多种之多。R语言是一种被广泛使用的统计语言,本文首先以R语言来实现一个最简单的粒子群算法,然后再举一个例子,说明粒子群算法(PSO)迭代过程。
程序实现主要有三个步骤
步骤一:各种参数初始化;
步骤二:单个粒子历史最优经验
步骤三:所有粒子历史最优经验
程序实现的两个关键点
关键一:在进行单个粒子历史最优位置的时候,我们不需要存储该粒子从开始到目前的所有位置,只需要在每次存储最优的那个位置即可
关键二:注意每一个w和v必须在(wmin,wmax)与(vmin,vmax)之中
################PSO算法实现################
##初始化PSO算法参数
#收敛因子k(类似于惯性系数的作用)
#学习因子初始化k*phi_1,k*phi_2,phi<-phi_1+phi_2
#粒子群位置初始化w,以及wmin,wmax
#粒子群速度初始化v,以及vmin,vmax
k<-0.729
phi_1<-2.05
phi_2<-2.05
#以上参数为参照前人的经验
#初始化函数
inifunc<-function(dim,wmin,wmax,vmin,vmax,n){
G<-rep(NA,2*dim+1)
A<-matrix(runif(n*dim,wmin,wmax),nrow=n,ncol=dim)
B<-matrix(runif(n*dim,vmin,vmax),nrow=n,ncol=dim)
C<-apply(A,1,func)
G<-cbind(A,B,C)[which(C==min(C)),]
return(rbind(cbind(A,B,C),G))
}
##所有粒子历史最优搜索(Gbest)
Gbestfunc<-function(x,dim,n){
C<-x[-(n+1),2*dim+1]
return(rbind(x[-(n+1),],x[which(C==min(C)),]))
}
##PSO 核心 function
PSOAfunc<-function(x,dim,wmin,wmax,vmin,vmax,n){
A<-x[-(n+1),1:dim]
B<-x[-(n+1),(dim+1):(2*dim)]
C<-x[-(n+1),2*dim+1]
for(i in 1:n){
neww<-A[i,]+B[i,]
for(j in 1:dim){
if(neww[j]>wmax || neww[j]
vmax || B[i,k]
vmax || B[i,k]
如有错误,欢迎指正!