问题标签 [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.
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
使用包的非负分位数回归:
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 处停止。出了什么问题?如何将额外的控件传递给求解器?
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 包)
r - CVXR和glmnet(弹性网)的比较
我在模拟数据集上拟合了一个模型来比较 glmnet 和 CVXR 结果。
如果我没有代码错误,结果就会大不相同。
明确地 glmnet 产生非常接近真实参数的结果。
为什么会这样?
结果
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/中的文档并没有真正说明如何解决问题。有人找到解决方案了吗?谢谢
r - CVXR 使用 Mosek 解决二次最小化问题
我正在尝试使用 R 包 CVXR 解决具有线性约束的二次优化问题。尽管默认求解器能够解决优化问题,但 Mosek 求解器却不能。我希望使用 Mosek 的原因是因为我需要解决超过 250 个约束的更大问题,而默认求解器给出的解决方案不准确,所以我希望使用 Mosek 解决更大的问题。这是 Mosek 不工作的一个简单示例:
问题数据
表格问题
风险规避参数
它给出了以下错误。
有人知道如何解决它,可能是重新表达问题?
我的会话信息如下:
谢谢
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 实现会那么棘手。任何追求的途径,甚至只是确认有人让它工作(不是错误),都会受到赞赏。
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 个变量),所以做了一些研究,我发现问题是凸的,并试图实现一个凸求解器。
我找到了这个链接:
但是,CVXR 似乎不允许分母中包含“x”,因为它会提示以下错误消息:
as.Constant(e1)/e2 中的错误:只能除以标量常数
我希望求解器能够更快地解决这样一个“简单”的优化问题......我对第二个选项做错了吗?或者对于具有非线性约束的凸非线性优化问题是否有更好的求解器?
谢谢
r - CVXR:子集某些变量
在这里,我们有一个变量矩阵,A
(我不确定这是否是正确调用对象的方法),并且D
作为一个变量矩阵,其中对角线由 的对角线组成,A
其他一切都是0.00
。我希望能够像通常那样设置约束(A-D)%*%x == y
,例如,例如A%*%x == y
会正常工作。但是,R
似乎并不喜欢A-D
——“s4 对象不可减”。如何解决这个问题?
cvxr - 优化变量的最小值小于下限
我正在尝试使用 MOSEK 求解器解决 CVXR 中的以下优化问题。 Objective_Fn 输入矩阵是 data_C2 (50 X 30),clust_center_C2 是一个列矩阵 (50 X 1)。S_C2 是我试图最小化的矩阵 (50 X 50)。这是我的 R 代码
在 R 控制台中获得的输出
尽管求解器说答案是最优的,但当约束说它必须位于零和一之间时,下限是负数。谁能告诉代码有什么问题?