2016-11-08 4 views
2

По какой-то причине алгоритм GA возвращает «нечисловой аргумент двоичному оператору», когда я использую параметр parallel = TRUE. Алгоритм оптимизации, похоже, работает без этой опции или при установке parallel = FALSE. Я установил все необходимые пакеты, и все они обновлены. Версия R, с которой я работаю, - это 3.3.2 на 64-битной машине.GA-алгоритм возвращает «нечисловой аргумент двоичному оператору» при параллельных вычислениях

Я в основном вызываю функцию внутри функции, которую я пытаюсь оптимизировать. Код ниже - очень простой пример общей структуры проблемы, которая возвращает тот же код ошибки.

fun_in <- function(a, b, c, d, e) 
{ 
    return(a + b + c + d + e) 
} 

fun_out <- function(a, b, c, d, e, f, g) 
{ 
x <- f +g 
y <- fun_in(a = a, b = b, c = c, d = d, e = e) 
z <- x + y 
return(z) 
} 

library('GA') 

a <- 1 
b <- 1 
c <- 1 
d <- 1 
e <- 1 
f <- 1 
g <- 1 

fitness <- function(x) -fun_out(a, b, c, d, e, f, g) 
lower_bound <- c(1,1,1,1,1,1,1) 
upper_bound <- c(5,5,5,5,5,5,5) 
coef_names <- c('a', 'b', 'b', 'd', 'e', 'f', 'g') 

GA <- ga(type = "real-valued", 
     fitness = fitness, 
     min = lower_bound, 
     max = upper_bound, 
     popSize = 100, 
     maxiter = 1000, 
     pmutation = 0.8, 
     pcrossover = 0.8, 
     maxFitness = 1e-5, 
     names = coef_names, 
     parallel = TRUE 
) 

Благодарим за помощь.

ответ

0

Простое исправление для имени аргумента в фитнесе()

--- fitness <- function(x) -fun_out(a, b, c, d, e, f, g) 
+++ fitness <- function(x) -fun_out(x[1], x[2], x[3], x[4], x[5], x[6], x[7])