此问题需要DEoptim
个包:
install.packages("DEoptim")
library(DEoptim)
来自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)
现在这很好用:
但是,如果我使用Npop
dim(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 :(得分: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))
答案 1 :(得分:0)
关于上面的答案,apply函数似乎没有给出正确的矩阵。我相信您需要按行(1)应用然后转置矩阵。
Npop <- t(as.matrix(apply(xini,1,function(x) x*ran+lower)))