差分进化算法是一种重要的进化算法,自提出差分进化算法以来,形成了很多变种。本文首先用R语言去实现一个简单的差分进化算法,然后通过一个极大化函数的例子说明差分进化算法(DE)的进化迭代过程。
由于差分进化算法原理十分简单,详情请参照点击打开链接,这里不再多做叙述。
###传统的差分进化算法(DE)的R语言实现
#种群初始化
funcmatrix<-function(i,j,wmin,wmax){
x<-matrix(runif(i*j,min=wmin,max=wmax),nrow=i,ncol=j)
return(x)
}
#变异操作
mutationfunc<-function(popu_size,chrom_size,X,G,Gmax,F0,wmin,wmax){
offsprings<-matrix(NA,nrow=popu_size,ncol=chrom_size)
#r为自适应算子,为了实时调整缩放因子F
r<-exp(1-(Gmax/(Gmax+1-G)))
#F为缩放因子
F<-F0*2^r
#变异操作
rownames(X)=c(1:popu_size)
for(i in 1:popu_size){
p<-sample(rownames(X)[-i],3,replace=F)
offsprings[i,]<-X[p[1],]+F*(X[p[2],]-X[p[3],])
#避免基因出界
for(j in 1:chrom_size){
if(offsprings[i,j]>wmax || offsprings[i,j]
98) break
}
plot(B[1,],B[2,],type="l")
print(A[1,])
return(funcv(A[1,]))
}
#####一个例子
###DE所要优化的目标函数,函数维度为length(x)
funcv<-function(x){
return(sum(x^2))
}
totalDEfunc(50,100,1000,0.1,0,1,0.6)
如有错误,欢迎指正!