Есть ли способ получить окончательную систему уравнений, отправленную cvxpy в решатель? - PullRequest
1 голос
/ 26 марта 2020

Если я правильно понимаю, cvxpy преобразует наше высокоуровневое описание проблемы в стандартную каноническую форму перед отправкой решателю.

Под стандартной формой я подразумеваю форму, которая может использоваться для алгоритмов спуска, поэтому, например, она будет преобразовывать все абсолютные значения в цели, чтобы быть разностью двух положительных чисел с некоторыми новыми ограничениями , et c.

Хотите знать, можно ли посмотреть, как выглядело сокращение проблемы, указанной в cvxpy? Например, допустим, у меня есть следующая проблема:

import numpy as np
import cvxpy as cp

x = cp.Variable(2)
L = np.asarray([[1,2],[2,3]])
P = L.T @ L

constraints = []
constraints.append(x >= [-10, -10])
constraints.append(x <= [10, 10])

obj = cp.Minimize(cp.quad_form(x, P) - [1, 2] * x)
prob = cp.Problem(obj, constraints)
prob.solve(), prob.solver_stats.solver_name
(-0.24999999999999453, 'OSQP')

Итак, я хотел бы видеть фактические аргументы (P, q, A, l, u), отправляемые в решатель OSQP https://github.com/oxfordcontrol/osqp-python/blob/master/module/interface.py#L278

Любая помощь с благодарностью!

1 Ответ

2 голосов
/ 26 марта 2020

Из документации кажется, что вы можете сделать это, используя команду get_problem_data следующим образом:

data, chain, inverse_data = prob.get_problem_data(prob.solver_stats.solver_name)

Я не пробовал, и он говорит, что вывод зависит от конкретного решателя и цепочки решателей, но может вам помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...