欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言实现具体的粒子群优化算法

程序员文章站 2024-02-27 23:08:21
...
data=read.csv("Audata.csv",header = F)#读取电脑中的数据

train = sample(dim(data)[1], dim(data)[1]/1.5)#随机抽样,取2/3的数据
trainxy=data[train,]
testxy=data[-train,]

#适应度计算函数,即目标函数
fit=function(x) {

  x1=tez(32,1,x)
  svrfore=predict(model,x1)
  return (svrfore)
}

fit1=function(x) {
  x1=tez(32,dim(x)[1],x)
  svrfore=predict(model,x1)
  return (svrfore)
}

library(e1071)

#改进的粒子群算法
gspso<-function(d){

c1 =2.6           #学习因子1
c2 =1.7           #学习因子2
c=c1+c2           #总加速度
w =0.9           #惯性权重
maxw=0.9     #最大权重
minw=0.4     #最小权重
a<-0.79            #收缩因子
MaxDT <- 200      #最大迭代次数
D <-  d           #搜索空间维数(未知数个数)
M <- 30            #初始化群体个体数目
maxv=10#最大速度
gbestDelta=NULL #适应度变化初始值
alpha=0.0001#变化阈值
#初始化种群的个体(可以在这里限定位置和速度的范围)
x <- matrix(runif(M*D,-10,10),nrow = M,ncol = D,byrow = T)
v <- matrix(runif(M*D,-10,10),nrow = M,ncol = D,byrow = T)
#v <- matrix(rnorm(M*D),nrow = M,ncol = D,byrow = T)

#初始化pbest[i]和gbest
pbest <- x
gbest <- pbest[which.min(fit1(x)),] #gbest为全局最优

#进入主要循环,按照公式依次迭代,直到满足精度要求
for (t in 1:MaxDT)
{
 ss=2*(1-t/MaxDT)/(abs(2-c-sqrt(c^2-4*c)))
  for (i in 1:M)#第i个粒子
  {
    v[i, ] = ss*(w*v[i, ] + c1*runif(1)*(pbest [i, ] - x[i, ]) + c2*runif(1)*(gbest-x[i, ]))
#粒子速度约束
    l=1
      for(h in 1:D){
        if((x[i,h] + v[i,h])< (-10)||(x[i,h] + v[i,h])>10)
        {l=0
        break}
      }
       if(l==1)  
 #位置更新
       x[i, ] = x[i, ] + v[i, ]
 #粒子pBest更新
    x2=matrix(x[i,],nrow = 1,byrow = TRUE)
    pbest1=matrix(pbest[i,],nrow = 1,byrow = TRUE)
        if(fit(x2) >fit(pbest1))
        {     
          pbest[i,] <- x[i, ]
        }
#粒子gBest更新
    pbest2=matrix(pbest[i,],nrow = 1,byrow = TRUE)
    gbest1=matrix(gbest,nrow = 1,byrow = TRUE)
        if(fit(pbest2) >fit(gbest1))
        {
          gbest <- pbest[i, ]
          gbestDelta=abs(fit(gbest1)-fit(pbest2)) #粒子群适应度变化
        }
        if(!is.null(gbestDelta))
           if(gbestDelta<alpha)
        break                  
  }
  w=maxw-(t/MaxDT)*(maxw-minw)#惯性权重衰减
}
gbest