一种简单的粒子群算法(PSO)的R语言实现

    粒子群算法(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]
     
     
    
    
   
   

    如有错误,欢迎指正!






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值