私はこれらの記事を見ていると、他のカップル:上記制約付き最適化R:もう一つの例私はR.で制約付き最適化を実行しようとしています
function constrained optimization in R
最初の投稿はあり非常に便利ですが、私はまだ私の問題に正解を得ていません。
My機能は次のとおりです。
Fd <- 224 * d1 + 84 * d2 + d1 * d2 - 2 * d1^2 - d2^2
と私の制約がある:3 * d1 + d2 = 280
まず私が制約を網羅的な探索が続く制約のない徹底的な検索を使用して正しい答えを見つける:
my.data <- expand.grid(x1 = seq(0, 200, 1), x2 = seq(0, 200, 1))
head(my.data)
dim(my.data)
d1 <- my.data[,1]
d2 <- my.data[,2]
Fd <- 224 * d1 + 84 * d2 + d1 * d2 - 2 * d1^2 - d2^2
new.data <- data.frame(Fd = Fd, d1 = d1, d2 = d2)
head(new.data)
# identify values of d1 and d2 that maximize Fd without the constraint
new.data[new.data$Fd == max(new.data$Fd),]
# **This is the correct answer**
# Fd d1 d2
# 6157 11872 76 80
# Impose constraint
new.data <- new.data[(3 * new.data$d1 + new.data$d2) == 280, ]
# identify values of d1 and d2 that maximize Fd with the constraint
new.data[new.data$Fd == max(new.data$Fd),]
# **This is the correct answer**
# Fd d1 d2
# 14743 11774 69 73
optim
を使用して、制約のない最大値を見つけてください。これは機能します。
Fd <- function(betas) {
b1 = betas[1]
b2 = betas[2]
(224 * b1 + 84 * b2 + b1 * b2 - 2 * b1^2 - b2^2)
}
# unconstrained
optim(c(60, 100), Fd, control=list(fnscale=-1), method = "BFGS", hessian = TRUE)
# $par
# [1] 75.99999 79.99995
ここで、制限付き最大値はconstrOptim
です。これは動作しません。
b1.lower.bound <- c(0, 280)
b1.upper.bound <- c(93.33333, 0)
b2.lower.bound <- c(93.33333, 0)
b2.upper.bound <- c(0, 280)
theta = c(60,100) # starting values
ui = rbind(c(280,0), c(0,93.33333)) # range of allowable values
theta %*% ui # obtain ci as -1 * theta %*% ui
# [,1] [,2]
# [1,] 16800 9333.333
constrOptim(c(60,100), Fd, NULL, ui = rbind(c(280,0), c(0,93.33333)), ci = c(-16800, -9333.333), control=list(fnscale=-1))
# $par
# [1] 75.99951 80.00798
私はui
とci
で遊んで試してみましたが、それは関係なく、私は常に制約のないoptim
と同じ答えを得る私は彼らのために使用する値のように思えます。
ありがとうございました。
注意1つの変数で –
ありがとうございます。それはきちんとした考えです。しかし、完全性のために、私は制約付き最適化を使用してそれを解決する方法を学びたいと考えています。 –