R下的遗传算法,增加了建议

时间:2015-02-17 17:44:53

标签: r genetic-algorithm

在genalg包中,rbga.bin命令提供了添加建议列表的可能性,但是,我找不到这个功能实际工作的任何示例,有人能给我一些帮助吗?

library(genalg)


evaluation<-function(x){   
   n<- 2 
   if (sum(x)!= n){ 
      return(100)   }   
   if (sum(x)== n){
      sequen<- which(x>0)
      l=sum(sequen)
      return(-l)   } }

vect1<-rep(0,times=40) 
vect1[c(1,2)]<-c(1,1) 
sug<-list(vect1) 
for (iin 2:100){   
  vect1<-sample(vect1)   
  sug[[i]]<-vect1 
}


 GAmodel <- rbga.bin(size=40,popSize =100, iters =100, suggestions=sug,mutationChance = 0.01,elitism =T, evalFunc=evaluation,verbose=T)

1 个答案:

答案 0 :(得分:3)

尽管rbga.bin函数的文档说明了:

  

建议:建议染色体的可选列表

rbga.bin显然需要data.framematrix

  # taken from the rbga.bin source code
  suggestionCount = dim(suggestions)[1] 
  for (i in 1:suggestionCount) {
    population[i, ] = suggestions[i, ]
  }

当给出矩阵时,它似乎工作正常:

sug2 <- t(replicate(sample(vect1),n = 10))  # needs to be rotated. check your solution n = 99 and it will fail
GAmodel <- rbga.bin(size=40,popSize =100, iters =100, suggestions=sug2,mutationChance = 0.01,elitism =T, evalFunc=evaluation,verbose=T)

输出:

Testing the sanity of parameters...
Not showing GA settings...
Adding suggestions to first population...
Filling others with random values in the given domains...
Starting iteration 1 
Calucating evaluation values... .................................................................................................... done.
Creating next generation...
  sorting results...
  applying elitism...
  applying crossover...
  applying mutations... 40 mutations applied
Starting iteration 2 
Calucating evaluation values... .................................................................................................. done.
Creating next generation...

<...>

Starting iteration 100 
Calucating evaluation values... .................................................................................................. done.