r - R优化:最小化二次函数
问题描述
我的任务是最小化 2 个类似的二次函数beta
。
例如:
K <- matrix(data = c(1, 2, 1, 2, 1,
2, 16, 2, 1, 2,
1, 2, 8, 2, 1,
2, 1, 2, 16, 2,
1, 2, 1, 2, 32),
nrow = 5, ncol = 5, byrow = TRUE)
k <- c(-2, 4, 12, 0, 2)
lambda
惩罚函数的乘数在哪里。
我optim
用来解决这个问题:
minimize <- function(beta){
value <- (1/2)*(t(beta)%*%K%*%beta) - t(k)%*%beta + 0.1*abs(sum(beta)-n_s) # lambda = 0.1
return(value)
}
betta2 = optim(c(0, 0, 0, 0, 0), minimize)
betta2$par
我应该使用哪种方法来optim
实现更好更快的优化?
其中n_s
和epsilon
是已知常数。
换句话说,我有受约束和不受约束的最小化任务。
我知道,我可以使用 找到第二个任务的解决方案solve.QP
,但可能只有线性约束。
例如,我可以使用以下命令最小化我的第二个任务solve.QP
:
betta = solve.QP(K, k, K, k, meq = 0, factorized = FALSE)
但我不能在那里添加我的特殊约束(而且我不太喜欢这个解决方案):
A <- matrix(1:1, ncol = 5)
n_s = 5
epsilon = 0.1
betta = solve.QP(K, k, A, c(-(n_s*epsilon + n_s)), meq = 0, factorized = FALSE) # gets an error: Amat and dvec are incompatible!
我怎样才能正确使用optim
(或者可能是另一个?)函数来解决我的约束优化问题(使用我的特殊约束)?我应该选择哪种方法?