"缺少值,其中需要TRUE / FALSE" GA包中的错误

时间:2016-12-23 11:04:49

标签: r mathematical-optimization genetic-algorithm

当使用GA包运行遗传算法时,我收到了一个缺失值,其中需要TRUE / FALSE"错误。在下面的代码中,like是适应度函数,X是长度为6的数字向量。

library(GA)
y<-c(46,38,49,55)
W<-matrix(c(0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0),ncol=4)
ei<-eigen(W)$values
data<- matrix(c(14691,14150,14607,15140,5337,5386,5207,5178),ncol=2)
         like=function(x)
            {
              co<-c(x[2],x[3])  
              e<-x[4]*W%*%y-data%*%co-x[1]
              L<-30*log(2)-15*log(2*pi)+log(prod(1-x[4]*Re(ei)))-15*log(x[5])+sum(log(pnorm(-x[6]*e/sqrt(x[5]))))
              -0.5/x[5]*t(e)%*%e
              return(L)
            }
    GA <- ga(type = "real-valued", 
             fitness =  like,
             min=c(-100,0,-50,-10,0.001,0),
             max=c(100,100,0,10,100,10),
             popSize = 100, maxiter = 200,
             optim = TRUE)

结果和错误如下:

GA | iter = 1 
Mean =      -Inf | Best = -2.870387 
Error in if (fmin > (sfactor * fave - fmax)/(sfactor - 1)) { : 
  missing value where TRUE/FALSE needed

1 个答案:

答案 0 :(得分:1)

这是一个神秘的错误,但问题的一个很好的提示是在迭代1摘要信息中:

  

平均值= -Inf |最好= -2.870387

你的函数的平均目标值是负无穷大,这意味着一些迭代正在返回客观值负无穷大。一些调试代码可识别出这个问题的样本数据:

x <- c(-3.2, 5.7, -26.9, -6.1, 37, 9)
like(x)
# [1] -Inf

由于您正在最大化,您可以将返回的函数值限制在合理的下限,例如将return(L)替换为return(pmax(L, -1e6))。然后你会得到明智的结果:

  

GA | iter = 200

     

平均值= 102.2197 |最好= 106.0328 |最终本地搜索= 106.0328