标签: cvxr

子矩阵的最大行列式

假设我们有一个方阵M,例如,

set.seed(1)
M <- matrix(rnorm(5*5), 5, 5)

> M
           [,1]       [,2]       [,3]        [,4]        [,5]
[1,] -0.6264538 -0.8204684  1.5117812 -0.04493361  0.91897737
[2,]  0.1836433  0.4874291  0.3898432 -0.01619026  0.78213630
[3,] -0.8356286  0.7383247 -0.6212406  0.94383621  0.07456498
[4,]  1.5952808  0.5757814 -2.2146999  0.82122120 -1.98935170
[5,]  0.3295078 -0.3053884  1.1249309  0.59390132  0.61982575
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种有效的方法可以找到一个子矩阵,使其行列式是所有子矩阵中的最大值。矩阵的大小应大于1x1但小于或等于5x5。一些子矩阵示例如下

> M[c(1,5),c(2,3)]
           [,1]     [,2]
[1,] -0.8204684 1.511781
[2,] -0.3053884 1.124931

> M[c(1,2,4),c(1,4,5)]
           [,1]        [,2]       [,3]
[1,] -0.6264538 -0.04493361  0.9189774
[2,]  0.1836433 -0.01619026  0.7821363
[3,]  1.5952808  0.82122120 -1.9893517

> M[1:4,2:5] …
Run Code Online (Sandbox Code Playgroud)

optimization r matrix determinants cvxr

11
推荐指数
2
解决办法
432
查看次数

R中的快速非负分位数和Huber回归

我正在寻找一种在R中进行非负分位数和Huber回归的快速方法(即约束所有系数都> 0).我尝试使用CVXR包进行分位数和Huber回归以及quantreg用于分位数回归的包,但是当我使用非负性约束时,CVXR它非常慢并且quantreg看起来很麻烦.有人知道R中的一个好的和快速的解决方案,例如使用Rcplex包或R gurobi API,从而使用更快的CPLEX或gurobi优化器?

请注意,我需要运行一个大小低于80 000次的问题大小,我只需要y在每次迭代中更新向量,但仍然使用相同的预测矩阵X.从这个意义上讲,我认为CVXR现在我必须obj <- sum(quant_loss(y - X %*% beta, tau=0.01)); prob <- Problem(Minimize(obj), constraints = list(beta >= 0))在每次迭代中做到这一点是低效的,当问题实际上保持不变并且我想要更新的时候y.有没有想过要做得更好/更快?

最小的例子:

## Generate problem data
n <- 7 # n predictor vars
m <- 518 # n cases 
set.seed(1289)
beta_true <- 5 * matrix(stats::rnorm(n), nrow = n)+20
X <- matrix(stats::rnorm(m * n), nrow = m, ncol = …
Run Code Online (Sandbox Code Playgroud)

r cplex cvx quantile-regression cvxr

5
推荐指数
1
解决办法
318
查看次数

CVXR 使用 Mosek 解决二次最小化问题

我正在尝试使用 R 包 CVXR 解决具有线性约束的二次优化问题。尽管默认求解器能够解决优化问题,但 Mosek 求解器却不能。我希望使用 Mosek 的原因是因为我需要解决具有 250 多个约束的更大问题,而默认求解器给出的解决方案不准确,因此我希望使用 Mosek 解决更大的问题。这是一个简单的例子,Mosek 不工作:

suppressMessages(suppressWarnings(library(CVXR)))
Run Code Online (Sandbox Code Playgroud)

问题数据

set.seed(10)
n <- 10
SAMPLES <- 100
mu <- matrix(abs(rnorm(n)), nrow = n)
Sigma <- matrix(rnorm(n^2), nrow = n, ncol = n)
Sigma <- t(Sigma) %*% Sigma
Run Code Online (Sandbox Code Playgroud)

表格问题

w <- Variable(n)
ret <- t(mu) %*% w
risk <- quad_form(w, Sigma)
constraints <- list(w >= 0, sum(w) == 1,ret==mean(mu))
Run Code Online (Sandbox Code Playgroud)

风险规避参数

prob <- Problem(Minimize(risk), constraints)
result <- solve(prob,solver='MOSEK')
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误。

 Error in py_call_impl(callable, dots$args, dots$keywords) : 
  TypeError: …
Run Code Online (Sandbox Code Playgroud)

optimization r mosek cvx cvxr

2
推荐指数
1
解决办法
369
查看次数

CVXR 的 Usign Mosek

我已经安装了 3 次 Mosek。它在 python 中工作,但 CVXR(r 包)函数 installed_solvers() 无法找到 MOSEK。 在此处输入图片说明

我正在研究 MACos Mojave。我通过 conda 命令安装了 Mosek,获得了学术许可证,在主目录中创建了一个名为 mosek 的文件夹,并将许可证文件放入其中。然后我在 jupyter 实验室中测试了以下脚本https://docs.mosek.com/8.1/pythonapi/design.html#hello-world-in-mosek并得到结果 Solution x = 2.0 ,所以 Mosek 正在工作。然后我安装了reticulate,使用默认目录,替换为 use_python("/Users/apple/anaconda3") 和 use_python("/Users/apple/anaconda3/lib/python3.6") 中的任何一个,函数installed_solvers () 找到了mosek。我的会话信息如下 在此处输入图片说明

https://cvxr.rbind.io/cvxr_examples/cvxr_using-other-solvers/中的文档并没有真正说明如何解决问题。有人找到了解决方案吗?谢谢

optimization r mosek cvx cvxr

1
推荐指数
1
解决办法
334
查看次数

标签 统计

cvxr ×4

r ×4

cvx ×3

optimization ×3

mosek ×2

cplex ×1

determinants ×1

matrix ×1

quantile-regression ×1