全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2585 5
2014-03-05
小弟初学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)
}
)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-3-5 20:59:35
你可以关注下 nuomin  的帖子或主题, 他喜欢函数的编程风格。可以把你的那些 C1 C2 W .....等等 封装掉。现在看你的程序,有些乱。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-5 21:07:53
这是C|C++ 编程 风格,不习惯,R 是矢量或矩阵运算的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-5 21:17:52
jgchen1966 发表于 2014-3-5 21:07
这是C|C++ 编程 风格,不习惯,R 是矢量或矩阵运算的
那能不能以其中的某一个代码转换成R的风格,来做个示范呢、谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-5 21:18:29
jmpamao 发表于 2014-3-5 20:59
你可以关注下 nuomin  的帖子或主题, 他喜欢函数的编程风格。可以把你的那些 C1 C2 W .....等等 封装掉。现 ...
好的,我看看。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-5 22:56:31
lz可以去看看The art of R programming
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群