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
上一篇: oracle基本语句编写和函数使用