2016-12-23 5 views
2

При запуске генетического алгоритма с использованием пакета GA я получаю «недостающее значение, в котором требуется TRUE/FALSE». В моем коде ниже, like функция для фитнеса и X является числовым вектором длины 6.«Отсутствует значение, в котором требуется TRUE/FALSE» ошибка в пакете GA

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

Это загадочная ошибка, но хороший намек на проблему заключается в краткой информации об итерации 1:

Среднее = -Inf | Best = -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

+0

Я изменяю sqrt (x [5]) с новым x [5] в определении функции like и it works.I думаю, отрицательная бесконечность вызвана log (0). Спасибо за ваша помощь. – ShuangXin