小弟初学R语言,用它编写了一个关于粒子群算法的代码,可是别人编写的代码可能就几秒就出结果,我的却要二十秒。代码的整体流程没有问题,用的台式机也不错,应该是初学的原因,我不懂得R的代码编写规则,用了一些非常耗时的代码,希望前辈们帮我看一下。不胜感激system.time(
{
b<-0
a<-function(x){for(i in 1:20){d=x[i]^2;b=b+d};return(b)}
T<-2000
num<-50
dim<-20
w<-0.8
c1<-2
c2<-2
ε<-0.6
η<-0.5
r<-0.729
m<-2
x_down<--5
x_up<-5
zux=array(NA,dim=c(50,20))
zuv=array(NA,dim=c(50,20))
pbest_x=array(NA,dim=c(50,20))
pbest=NULL
gbest=NULL
gbest_x=NULL
g=NULL
ran=NULL
Vmax=(x_up-x_down)/8
for(i in 1:50){for(j in 1:20){ran=runif(20,0,1);zux[i,j]=x_down+(x_up-x_down)*ran[j]
zuv[i,j]=Vmax*(2*ran[j]-1);x=zux[i,]}
pbest[i]=a(x)
pbest_x[i,]=x}
gbest=pbest[1]
gbest_x=pbest_x[1,]
for(i in 1:num){if(pbest[i]<gbest){gbest=pbest[i];gbest_x=pbest_x[i,]}}
while(m<=T){
for(i in 1:50){for(j in 1:20){zuv[i,j]=w*zuv[i,j]+c1*ε*(pbest_x[i,j]-zux[i,j])+c2*η*(gbest_x[j]-zux[i,j])
zux[i,j]=zux[i,j]+zuv[i,j]
if(zux[i,j]>x_up)(zux[i,j]=x_up)
if(zux[i,j]<x_down)(zux[i,j]=x_down)
if(zuv[i,j]>Vmax)(zuv[i,j]=Vmax)
x=zux[i,]}
g[i]=a(x);if(pbest[i]>g[i]){pbest[i]=g[i];pbest_x[i,]=x}
if(pbest[i]<gbest){gbest=pbest[i];gbest_x=pbest_x[i,]}
}
m=m+1}
print(gbest)
print(gbest_x)
}
)


雷达卡







京公网安备 11010802022788号







