一种简单的差分进化算法(DE)的R语言实现

    差分进化算法是一种重要的进化算法,自提出差分进化算法以来,形成了很多变种。本文首先用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)

   
   

    如有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值