首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本应用函数和基本函数CVXR

基本应用函数和基本函数CVXR
EN

Stack Overflow用户
提问于 2020-04-10 22:25:00
回答 1查看 84关注 0票数 0

有没有办法使用base::apply和CVXR elementwise函数将elementwise函数应用于矩阵的每一列?假设向量的长度与矩阵的行数相匹配,我希望我的目标函数能够如下所示:

代码语言:javascript
复制
new_matrix <- apply(constant_matrix, 2, function(x) x * variable_vector)
objective <- sum_entries( max_entries( as.matrix(new_matrix), axis = 2 ) )

我在解决这个问题时遇到了以下错误:min(常量)错误:参数的'type‘(列表)无效

(如果我的代码不清楚,我的目标是将一个变量向量乘以一个常量矩阵的每一列,然后得到每个缩放列的最大值,然后对所有这些最大值求和。)

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-04-12 00:37:57

下面我给出了一个使用base::applyCVXR的逐个元素乘法的例子以及输出。有关更复杂的示例,请参阅Pliable Lasso

代码语言:javascript
复制
library(CVXR)
library(magrittr)

constant_matrix <- base::matrix(1:20, nrow = 4)
variable_vector <- CVXR::Variable(4, pos = TRUE)

constant_matrix %>%
    base::apply(MARGIN = 2, FUN = function(x) CVXR::multiply(lh_exp = x, rh_exp = variable_vector)) %>%
    base::lapply(max) ->
    column_max_list

objective <- base::Reduce(f = '+', x = column_max_list)
prob <- CVXR::Problem(CVXR::Minimize(objective), constraints = list(variable_vector >= 2))

result  <- CVXR::solve(prob, verbose = TRUE)
result$value
result$getValue(variable_vector)

下面是输出:

代码语言:javascript
复制
-----------------------------------------------------------------
           OSQP v0.6.0  -  Operator Splitting QP Solver
              (c) Bartolomeo Stellato,  Goran Banjac
        University of Oxford  -  Stanford University 2019
-----------------------------------------------------------------
problem:  variables n = 9, constraints m = 28
          nnz(P) + nnz(A) = 48
settings: linear system solver = qdldl,
          eps_abs = 1.0e-05, eps_rel = 1.0e-05,
          eps_prim_inf = 1.0e-04, eps_dual_inf = 1.0e-04,
          rho = 1.00e-01 (adaptive),
          sigma = 1.00e-06, alpha = 1.60, max_iter = 10000
          check_termination: on (interval 25),
          scaling: on, scaled_termination: off
          warm start: on, polish: on, time_limit: off

iter   objective    pri res    dua res    rho        time
   1  -1.0811e+02   1.94e+01   1.56e+01   1.00e-01   6.07e-05s
 200   1.1999e+02   3.92e-04   4.69e-04   1.00e-01   2.31e-04s
 300   1.2000e+02   1.46e-05   2.92e-06   1.00e-01   2.86e-04s

status:               solved
solution polish:      unsuccessful
number of iterations: 300
optimal objective:    120.0005
run time:             3.11e-04s
optimal rho estimate: 3.06e-01

> result$value
[1] 120.0005
> result$getValue(variable_vector)
         [,1]
[1,] 2.248055
[2,] 2.149815
[3,] 2.057720
[4,] 2.000007
`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61142357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档