首页 > 解决方案 > 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)
  1. 第一的:
    在此处输入图像描述

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实现更好更快的优化?

  1. 二: 有条件:
    在此处输入图像描述

在此处输入图像描述

其中n_sepsilon是已知常数。

换句话说,我有受约束和不受约束的最小化任务。

我知道,我可以使用 找到第二个任务的解决方案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(或者可能是另一个?)函数来解决我的约束优化问题(使用我的特殊约束)?我应该选择哪种方法?

标签: roptimization

解决方案


推荐阅读