【问题标题】:MOSEK solver on cvxpy: TypeErrorcvxpy 上的 MOSEK 求解器:TypeError
【发布时间】:2019-02-03 00:22:28
【问题描述】:

我正在尝试将 MOSEK 求解器与 cvxpy 一起使用,但我得到:

TypeError:关键字参数必须是字符串

我已经组装了一个错误仍然发生的最小示例。示例如下:

import cvxpy as cvx

x = cvx.Variable()
y = cvx.Variable()
constraints = [x + y <= 3]
prob2 = cvx.Problem(cvx.Maximize(x + y), constraints = constraints)
sol = prob2.solve(solver=cvx.MOSEK)
print("optimal value", sol)

即使是这个非常简单的问题也会发生。

【问题讨论】:

    标签: python optimization cvxpy mosek


    【解决方案1】:

    它看起来像一个错误。最好在github上报告问题。

    目前,如果您的问题是 QP,它应该适用于 OSQP:

    sol = prob2.solve(solver=cvx.OSQP)

    【讨论】:

      【解决方案2】:

      我不知道 cvxpy,但你的代码中有 sn-p 2 个关键字参数:

      • [x + y &lt;= 3] 不是字符串
      • cvx.MOSEK 对我来说是未知类型

      因此,根据您的错误报告,其中至少有一个必须是字符串。尝试使用

      constraints = "x + y <= 3"
      

      而不是

      constraints = [x + y <= 3]
      

      【讨论】:

      • 感谢您的回复,这是在cvxpy中定义约束的语法。如果我将其更改为字符串,我会得到 AttributeError: 'str' object has no attribute 'variables'
      • 所以问题出在cvx.Mosek。尝试print(type(cvx.Mosek)) 以确保其类型为str
      • 是的,它是一个字符串('MOSEK')。它发生在长错误堆栈中。 MOSEK 是 cvxpy 的外部库。 import mosek 有效。也许在 mosek 的实现中发生了一些改变,破坏了 cvxpy 集成。
      • 所以这是您的问题的问题,因为您的代码仅包含 2 次出现的关键字参数。您的错误报告肯定包含代码中发生 TypeError 异常的行号。分析那条线。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      相关资源
      最近更新 更多