0

我的目标函数是线性项的 n 二次之和。这是问题的样子:

我知道这 n 项中的每一项的分母都是正数,并且 m<<n。我试图在 CVXR 中表示这个目标函数。是否可以在 CVXR 中执行此操作?谢谢!

4

1 回答 1

0

我怀疑这个函数是凸的,但你可以尝试用 CVXR 来实现它,它会告诉你是否不是。

无论如何,我们可以使用一般的非线性优化器来做到这一点,例如optim. 定义一个ontof将 R^m 映射到可行区域的函数,然后我们可以如下实现它。为了确定,请从多个起点尝试。

# test input
m <- 2
n <- 3
A <- matrix(1:(m*n), m, n)

ontof <- function(w) w*w / sum(w*w)
obj <- function(w) sum( sum(w*w) / colSums(A * w) )

res <- optim(1:m, function(x) obj(ontof(x)))

str(res)
## List of 5
##  $ par        : num [1:2] 1.37 1.55
##  $ value      : num 0.559
##  $ counts     : Named int [1:2] 39 NA
##   ..- attr(*, "names")= chr [1:2] "function" "gradient"
##  $ convergence: int 0
## $ message    : NULL
ontof(res$par) # solution
## [1] 0.4398606 0.5601394
于 2022-02-24T00:09:08.490 回答