DEoptim コマンド (同名の R パッケージから) を使用して関数を最小化しようとしていますが、「目的関数の結果の長さがパラメーター行列とは異なります」という奇妙なエラーが発生します。読めない投稿されたCコードを除いて、この問題について何も見つかりません。
引数を介して関数に追加のパラメーターを渡そうとすると、エラーが発生し...
ます。次の例では、Rosenbrock 関数 (DEoptim のドキュメントから取得) を修正して、2 番目の引数pow
(ドキュメントに記載されている例と同じになるように 2 に設定) を指定します。これは機能します。次に、Rastrigin 関数で同じことを試みます (GenSA のドキュメントから)。ここでは同じトリックが失敗します (ただし、文書化されているケースのように、2 番目の引数をハードコーディングすると、オプティマイザーは正常に機能します)。
コード例は次のとおりです。
library(DEoptim)
## Note that the vector of parameters to be optimized must be the first
## argument of the objective function passed to DEoptim.
Rosenbrock <- function(x,pow){
x1 <- x[1]
x2 <- x[2]
100 * (x2 - x1 * x1)^pow + (1 - x1)^pow
}
lower <- c(-10,-10)
upper <- -lower
set.seed(1234)
# works
DEoptim(Rosenbrock,pow=2, lower, upper)
Rastrigin <- function(x) {
sum(x^2 - 10 * cos(2 * pi * x)) + 10 * length(x)
}
Rastrigin2 <- function(x,p) {
sum(x^2 - p * cos(2 * pi * x)) + 10 * length(x)
}
dimension <- 2
lower <- rep(-5.12, dimension)
upper <- rep(5.12, dimension)
# works
DEoptim(fn=Rastrigin,lower=lower,upper=upper,
control = list(storepopfrom = 1))
# should be same, but doesn't work
DEoptim(fn=Rastrigin2,p=10,lower=lower,upper=upper,
control = list(storepopfrom = 1))
当然、この問題はより複雑な例で出てきましたが、この単純なケースの説明が助けになることを願っています。追加のヘルプである場合、最終的な目標はオブジェクトから関数を呼び出すことですdata.table
。関数の最初の引数は最小化される (スカラー) パラメーターであり、残りの引数は から取得したデータdata.table
です。