【问题标题】:Different versions of CVXPY generates different results.不同版本的 CVXPY 会产生不同的结果。
【发布时间】:2018-11-16 20:35:38
【问题描述】:

由于缺乏对 CVXPY 的了解,我在使用不同版本时协调一个简单的优化问题的结果时遇到了问题。

当我将 CVXPY 与 0.4.5 版本一起使用时,我将问题写为:

import numpy as np
from cvxpy import * 

n = 5
np.random.seed(123)
g1 = np.random.rand(2*n, 1)
H1 = np.eye(2*n)
w = Variable(2*n)
gamma = Parameter(sign="positive")
ret = -g1.T*w
risk = quad_form(w, H1)
prob = Problem(Maximize(ret - gamma*risk), 
               [w >= 0])
gamma.value = 0.5
prob.solve()
res = w.value

并且res等于:

 res = [[  2.86653834e-12],
    [  2.47912037e-11],
    [  3.73027873e-11],
    [  7.13532730e-12],
    [  2.31133274e-12],
    [  1.27710498e-11],
    [ -2.50944234e-12],
    [  3.15803733e-12],
    [  9.90353521e-12],
    [  1.46452182e-11]]

但是,当我在 1.0.8 版本中使用 CVXPY 时,我键入的代码几乎相同,如下所示:

n = 5 
np.random.seed(123)
g1 = np.random.rand(2*n, 1)
H1 = np.eye(2*n)
w = Variable(2*n)
gamma = Parameter(nonneg=True)
ret = -g1.T*w
risk = quad_form(w, H1)
prob = Problem(Maximize(ret - gamma*risk), 
               [w >= 0])
gamma.value = 0.5
prob.solve()
res = w.value

结果是:

(Pdb) res
    array([6.66098380e-25, 2.73633363e-25, 2.16955532e-25, 5.27275998e-25,
   6.88070573e-25, 4.04646723e-25, 9.37904145e-25, 6.54954091e-25,
   4.60002892e-25, 3.75018828e-25])

我在使用 CVXPY 1.0.8 版时所做的唯一区别是我使用属性“nonneg=True”而不是“sign=positive”,我认为它们本质上是相同的。有人可以帮我吗?结果如此不同的可能原因是什么?

非常感谢

【问题讨论】:

  • 结果在我看来大致相同:所有 w 的结果都是 0。区别在于噪音。
  • 差异可能是噪音,因为如果我翻转 g1 的符号,那么结果将变得相同。但奇怪的是噪音不应该这么大。他们当然不在一个规模上。而如果我测试其他情况,差异会更大到影响应用决策的程度。
  • 如果这是噪音,我想我的问题是我们什么时候可以相信类似情况下的结果,因为这些噪音会给我们带来截然不同的结果。
  • 请注意,当我们有一个边界 x>=0 时,内点求解器要求变量保持严格正数。他们离边界有多近取决于很多事情。您可以使用详细选项求解以查看求解器日志。可能有一些迹象表明有什么不同。但同样,对于内点求解器,变量在其范围内是正常的。

标签: quadratic-programming cvxpy


【解决方案1】:

CVXPY 1.0 使用 OSQP 求解器来解决像您这样的问题,而 CVXPY 0.4 使用 ECOS。这就是结果不同的原因。但最终非常接近零的数字应该被视为零。如果您的程序在输出为 -1e-121e-12 时表现不同,您可能需要降低程序的敏感度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多