0

現時点では、Rで最小化(最適化)問題を実行しようとしています。ここで、行列X2の加重平均と重みwのベクトルで近似したいベクトルX1があります。つまり、最小化したいということです

wg <- function(w)
{
    t(X1 - X2 %*% w) %*% (X1 - X2 %*% w)
}

重みの制約はw[i]>= 0およびsum(w)=1です。

現在、最適化を行うためにDEoptimパッケージを使用していますが、コーナーソリューションをうまく処理できないように感じます。

私は経済学の論文で使用された方法を複製しており、その論文ではほとんどすべての重みがゼロであることが判明しました。私の場合(他の州の加重平均でアリゾナをモデル化したい)、特に経済状況の不均一性のために、同様の結果を期待していました。

現時点では、方法論よりもDEoptimパッケージの方が問題であると感じており、結果を本当に信頼していません。他にどのパッケージを使用できますか?できれば、コーナーソリューションを探すのに強いパッケージを使用できますか?

私のDEoptimは次のように設定されています。

controlDE <- list(reltol=.0000000001,steptol=150, itermax = 5000,trace = 250)
#control parameters

outDEoptim <- DEoptim(fn = wg, lower = rep(0, N), upper = rep(1, N), 
    control = controlDE)

どんな助けでも大歓迎です!

4

1 に答える 1

1

willのような確率的ソルバーDEoptimは、によって定義されたものなどの低次元のサブセットで最適な解を見つけるのが困難sum(w) = 1です。

を設定して問題を(n-1)次元に減らすことにより、これを行う最初の、完全には正しくない方法がありますw <- c(w, 1-sum(w))。最後のコンポーネントは0未満になる可能性がありますが、通常はそうではありません。今すぐ適用DEoptimまたはoptim

set.seed(1357); m <- 4; n <- 5
X2 <- round(matrix(runif(20), m, n), 2)
X1 <- X2 %*% c(0, 1, 0, 0, 0)               # solution c(0,1,0,0,0)

wg <- function(w) {                         # length(w) == 4
    w <- c(w, 1 - sum(w))
    t(X1 - X2 %*% w) %*% (X1 - X2 %*% w)    # sum((X1 - X2 %*% w)^2)
}

w0 <- rep(1/n, n-1)                         # initial point (1/n, ..., 1/n)
optim(w0, wg, lower = rep(0, n), upper = rep(1, n),
        method = "L-BFGS-B", control = list(factr = 1e-8))
## $par
## [1] 0 1 0 0                              # wmin = c(0,1,0,0,0)

または、等式制約を処理できるRのソルバーの1つを適用します。たとえば、Rdonlp2(R-Forgeで)、パッケージalabama auglag、またはslsqpパッケージnloptrに適用します。しかし、これは行き過ぎだと思います。

于 2013-02-14T10:38:25.943 に答える