2014-04-13 2 views
0

보다 작은 초기 인구 수를 사용하는 방법 당신은이 질문에 대한 DEoptim 패키지가 필요합니다 다음 help(DEoptim)R DEoptim() 함수 : Npop

Rosenbrock <- function(x){ 
x1 <- x[1] 
x2 <- x[2] 
100 * (x2 - x1 * x1)^2 + (1 - x1)^2 
} 

lower <- c(-10,-10) 
upper <- -lower 

## run DEoptim and set a seed first for replicability 
set.seed(1234) 
DEoptim(Rosenbrock, lower, upper) 

에서

install.packages("DEoptim") 
library(DEoptim) 

이제이 잘 작동 : 그러나 초기 인구를 제공하는 경우 Npopdim(Npop)[1] < 10*length(lower)

xini <- cbind(runif(10),runif(10)) 
ran <- abs(lower - upper) 
Npop <- apply(xini,2,function(x) x*ran+lower) 
DEoptim(Rosenbrock, lower, upper,DEoptim.control(initialpop = Npop)) 

나는 다음과 같은 오류가 발생합니다 :

Error in DEoptim(Rosenbrock, lower, upper, DEoptim.control(initialpop = Npop)) : 
Initial population is not a matrix with dim. NP x length(upper). 

내가 어떻게 할 수 있습니까? R DEoptim() function: How to select parameters to be opimised?

예 :이 질문에 대한 관련

1 개 매개 변수를 추정하지 않고 내가 여기 DEoptim.control(initialpop)

답변

0

에 설명하기 위해이없는 나는 위의 대답에 대해서는 DEoptim()

library(DEoptim) 

#From help(DEoptim) 

Rosenbrock <- function(x){ 
      x1 <- x[1] 
      x2 <- x[2] 
      100 * (x2 - x1 * x1)^2 + (1 - x1)^2 
} 

lower <- c(-10,-10) 
upper <- -lower 

## run DEoptim and set a seed first for replicability 

set.seed(1234) 
DEoptim(Rosenbrock, lower, upper) 

n <- length(lower) * 10 
# n <- length(lower) * 5 

xini <- cbind(runif(n),runif(n)) 
ran <- upper - lower 
Npop <- as.matrix(apply(xini,2,function(x) x*ran+lower)) 
DEoptim(Rosenbrock, lower, upper, DEoptim.control(NP=n,initialpop = Npop)) 
0

의 저자로부터 얻은 해결의, 적용 기능하지 않습니다 올바른 행렬을주는 것처럼 보입니다. 행 (1)을 적용한 다음 행렬을 조 변경해야한다고 생각합니다.

Npop <- t(as.matrix(apply(xini,1,function(x) x*ran+lower)))