Решатель MOSEK на cvxpy: TypeError

Я пытаюсь использовать решатель 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)

Это происходит даже с этой очень простой проблемой.


person czr    schedule 28.08.2018    source источник


Ответы (2)


Похоже на ошибку. Было бы хорошо сообщить о проблеме на github.

На данный момент, если ваша проблема связана с QP, она должна работать с OSQP:

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

person bstellato    schedule 28.08.2018

Я не знаю cvxpy, но в вашем фрагменте кода есть 2 аргумента ключевого слова:

  • [x + y <= 3], который НЕ является строкой
  • cvx.MOSEK который для меня неизвестный тип

Итак, согласно вашему отчету об ошибке, по крайней мере, одна из них должна быть строкой. Попробуйте использовать

constraints = "x + y <= 3"

вместо того

constraints = [x + y <= 3]
person MarianD    schedule 28.08.2018
comment
Спасибо за ответ, это синтаксис для определения ограничений в cvxpy. Если я изменю его на строку, я получу AttributeError: 'str' object has no attribute 'variables' - person czr; 28.08.2018
comment
Итак, проблема в cvx.Mosek. Попробуйте print(type(cvx.Mosek)) убедиться, что его тип str. - person MarianD; 28.08.2018
comment
Да, это строка («МОСЕК»). Это происходит в длинном стеке ошибок. MOSEK - это внешняя библиотека для cvxpy. import mosek работает. Возможно, что-то изменилось в реализации mosek, что нарушило интеграцию cvxpy. - person czr; 28.08.2018
comment
Итак, проблема с вашим вопросом, поскольку ваш код содержит только 2 вхождения аргумента ключевого слова. Ваш отчет об ошибках обязательно содержит номер строки в вашем коде, в которой произошло исключение TypeError. Проанализируйте эту линию. - person MarianD; 28.08.2018