【问题标题】:No strict inequalities in cvxpy problem but still get the error "Strict inequalities are not allowed"cvxpy 问题中没有严格不等式,但仍然出现错误“不允许严格不等式”
【发布时间】:2020-05-30 14:25:56
【问题描述】:

我在 Python 中使用 CVXPY 库,试图解决一个特定的优化问题。

import cvxpy as cp
import numpy as np
from scipy.stats import norm

(...)

a = cp.Variable([10, 1])

obj = cp.Maximize(sum(norm.logcdf(A @ a, scale=sigma)))
constraints = [a >= np.zeros([10, 1]), a <= np.ones([10, 1])]

prob = cp.Problem(objective=obj, constraints=constraints)

prob.solve()

这里 A 是一个特定的 numpy 矩阵,而 sigma 是一个特定的标量。当我尝试解决问题时,包给了我以下错误。

Traceback (most recent call last):
  File "~\anaconda3/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3326, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-23-c554382c1c69>", line 19, in <module>
    obj = cp.Maximize(sum(norm.logcdf(A @ a, scale=sigma)))
  File "~\anaconda3/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py", line 1848, in logcdf
    cond1 = self._open_support_mask(x, *args) & (scale > 0)
  File "~\anaconda3/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py", line 901, in _open_support_mask
    return (a < x) & (x < b)
  File "~\anaconda3/lib/python3.7/site-packages/cvxpy/expressions/expression.py", line 597, in __gt__
    raise NotImplementedError("Strict inequalities are not allowed.")
NotImplementedError: Strict inequalities are not allowed.

但问题本身不包含严格的不等式... 好像 SCIPY 包与 CVXPY 有冲突,但不知道如何解决...

【问题讨论】:

  • CVXPY 表达式,例如变量a,不能在 NumPy 或 SciPy 函数中使用。您必须使用 CVXPY 原子构建目标和约束函数。
  • @AkshayAgrawal 感谢您的帮助。我理解这个问题,但不确定 CVXPY 是否具有标准正态分布的 CDF 函数的原子。
  • CVXPY 没有标准正态分布 CDF 的原子。

标签: python numpy scipy cvxpy


【解决方案1】:

在 cvxpy 中有一个norm。所以请改成如下代码:

from scipy.stats import stats
obj = cp.Maximize(sum(stats.logcdf(A @ a, scale=sigma)))

functions

【讨论】:

  • 感谢您的帮助。我尝试了cp.norm.logcdf 函数,但发现logcdf 在cvxpy 下不可用。基本上我试图调用正态分布的 CDF 函数。
  • 因为cp中有norm。您能否将from scipy.stats import norm 更改为:from scipy.stats import stats?和obj = cp.Maximize(sum(stats.logcdf(A @ a, scale=sigma)))
  • 嗨,Mahsa,我按照您的说法更改了代码。它出现了其他错误AttributeError: module 'scipy.stats.stats' has no attribute 'logcdf'
  • 当你有from scipy.stats import stats你只需要写stats.logcdf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2016-08-21
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多