问题标签 [cvxr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
480 浏览

r - 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. 有什么想法可以更好/更快地完成这一切吗?

最小的例子:

使用 CVXR 的非负分位数回归:

非负 Huber 回归的语法相同,但会使用

quantreg使用包的非负分位数回归:

0 投票
1 回答
193 浏览

r - 从 cvxr 求解函数向求解器传递选项

我正在使用 CVXR 来解决约束问题。求解器给出不满足所有约束的结果。

详细输出的最后几行如下所示:

100 +3.405e+04 +3.405e+04 +1e-09 5e-05 5e-09 1e-03 4e-12 0.9791 9e-01 2 0 0 | 15 0 达到最大迭代次数,恢复最佳迭代 (87) 并停止。

求解器在迭代 100 处停止,这可能是解不满足约束的原因;或者可能是问题的解决方案是小数字(1e-5)并且达到了默认容差。所以我尝试根据包 ECOSolveR 的文档将额外的参数传递给求解器:

然而,求解器仍然在默认的最大迭代次数 100 处停止。出了什么问题?如何将额外的控件传递给求解器?

0 投票
1 回答
145 浏览

r - 凸函数的 Log_sum_exp 不符合 dcp?

我有一个凸函数 f(b):

dim(pi) = (n,1),lambda 是一个标量常数,dim(r) = (n,n)

b是参数,dim(b) = (n,1)

呼吁

两者都返回 TRUE。

但是,我不明白为什么以下返回 FALSE:

据我了解,凸函数的 log_sum_exp 是凸的?

我注意到两者

返回假。

所以看起来 CVRX 无法推断 log_sum_exp(f) 的凸性?

任何帮助,将不胜感激

(我在 R3.5 中使用 CVRX 版本 0.99 包)

0 投票
1 回答
262 浏览

r - CVXR和glmnet(弹性网)的比较

我在模拟数据集上拟合了一个模型来比较 glmnet 和 CVXR 结果。

如果我没有代码错误,结果就会大不相同。

明确地 glmnet 产生非常接近真实参数的结果。

为什么会这样?

结果

0 投票
1 回答
387 浏览

r - 用于 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/中的文档并没有真正说明如何解决问题。有人找到解决方案了吗?谢谢

0 投票
2 回答
385 浏览

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

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

问题数据

表格问题

风险规避参数

它给出了以下错误。

有人知道如何解决它,可能是重新表达问题?

我的会话信息如下:

谢谢

0 投票
1 回答
212 浏览

r - CVXR 示例 cvxr_kelly-strategy 的扩展不符合 DCP?

我一直在研究一些示例代码,试图学习 CVX 并旋转我的轮子,试图找出 CVXR 中凯利示例的扩展:

“扩展:正如在上面的一些轨迹中所观察到的,财富在最终增加之前往往会大幅下降。降低这种回撤风险的一种方法是添加凸约束,如 Busseti、Ryu 和 Boyd (2016, 5.3) 中所述CVXR,这可以使用 log_sum_exp 原子在一行中完成。其他扩展,如财富目标、投注限制和 VaR/CVaR 界限也很容易合并。

CVXR 示例的 R 版本(不带扩展名)在这里:https ://cvxr.rbind.io/cvxr_examples/cvxr_kelly-strategy/

这完美地工作。

带有扩展名的 python 版本(来自参考文件)在这里:https ://github.com/cvxgrp/kelly_code

“有限结果 RCK 问题 (11) 可以在 CVXPY 中表述和解决为”

在具有上述公式的 R 中,lambda_risk 和 risk_constraints 应如下所示:

但是,这会导致 CVXR::psolve(a, b, ...) 中的错误:问题不遵循 DCP 规则。

真的

错误的

错误的

凸的和未知的

积极和未知

所以看起来最终的日志是取消它的资格。

如果我用原始迭代的实际结果“赌注”替换变量 b,它确实说 is_dcp TRUE

真的

可能是因为这个未回答的帖子(相同的基本问题) 凸函数的 Log_sum_exp 不符合 dcp 吗? 建议CVXR::log_sum_exp“无法推导出log_sum_exp的凸性”,可能是因为它不识别变量的符号?

如果有一个 R 错误,而不是我的代码中缺少的东西,我会感到惊讶。

此外,将 lambda_risk@value 设置为零,它应该只返回直接的 Kelly Optimal 赌注。如果我用数字 0 覆盖变量 lambda_risk,我只会得到这个结果。

真实与真实

错误的

我难住了。

到处都有可用的 python 解决方案,而且我也得到了我上面尝试的公式,可以在 DEOPTIM 中工作(在相当长的时间内),所以我没想到 CVXR 实现会那么棘手。任何追求的途径,甚至只是确认有人让它工作(不是错误),都会受到赞赏。

0 投票
1 回答
163 浏览

r - 在 R 中求解具有非线性约束的非线性凸优化问题

我有一个简单的经济订货量 (EOQ) 优化问题,涉及许多变量和一些约束。

广义目标函数为 sum(ai*x[i]+bi/[xi]),限制条件为:

  • x[i] >=1 对于所有“i”(至少 1 个订单)
  • x[i] <=24 对于所有“i”(最多 24 个订单)
  • sum(x[i]) <= 2000(最多合并 2000 个订单)
  • sum(ci/x[i]) <= 2000(循环库存最多 2000 个单位)

使用 auglag() 需要很长时间(即使是 100 个变量),所以做了一些研究,我发现问题是凸的,并试图实现一个凸求解器。

我找到了这个链接:

非线性优化问题中的错误:“x”中的值无限或缺失

但是,CVXR 似乎不允许分母中包含“x”,因为它会提示以下错误消息:

as.Constant(e1)/e2 中的错误:只能除以标量常数

我希望求解器能够更快地解决这样一个“简单”的优化问题......我对第二个选项做错了吗?或者对于具有非线性约束的凸非线性优化问题是否有更好的求解器?

谢谢

0 投票
1 回答
31 浏览

r - CVXR:子集某些变量

在这里,我们有一个变量矩阵,A(我不确定这是否是正确调用对象的方法),并且D作为一个变量矩阵,其中对角线由 的对角线组成,A其他一切都是0.00。我希望能够像通常那样设置约束(A-D)%*%x == y,例如,例如A%*%x == y会正常工作。但是,R似乎并不喜欢A-D——“s4 对象不可减”。如何解决这个问题?

0 投票
0 回答
41 浏览

cvxr - 优化变量的最小值小于下限

我正在尝试使用 MOSEK 求解器解决 CVXR 中的以下优化问题。 Objective_Fn 输入矩阵是 data_C2 (50 X 30),clust_center_C2 是一个列矩阵 (50 X 1)。S_C2 是我试图最小化的矩阵 (50 X 50)。这是我的 R 代码

在 R 控制台中获得的输出

尽管求解器说答案是最优的,但当约束说它必须位于零和一之间时,下限是负数。谁能告诉代码有什么问题?