Количество ограничений в выпуклой модели - PullRequest
0 голосов
/ 05 января 2020

Почему выпуклая модель QCQP, написанная с использованием cvxpy и решенная с помощью Mosek, показывает больше ограничений, чем те, которые определены в модели (как сообщает Mosek)?

Я замечаю то же самое даже для атома cvxpy, такого как квадрат (x ), где, если x - это одна переменная и ограничение:

cvxpy.square(x) <= 1

показывает, что модель имеет 4 ограничения вместо одного?

спасибо

1 Ответ

0 голосов
/ 06 января 2020

Вы можете легко проанализировать это самостоятельно. Выполните:

import cvxpy as cp

# Construct the problem.
x = cp.Variable(1)
constraints = [cp.square(x)<=1]
objective = cp.Minimize(0)
prob = cp.Problem(objective, constraints)

prob.solve(solver=cp.MOSEK, verbose=True, save_file="dump.opf")

и посмотрите на файл dump.opf. Вы увидите, как cvxpy переформулировал проблему в форме конуса c, используя квадратичный c конус для моделирования ограничения квадратичного c. По сути это становится:

(x1+1)^2 >= (x1-1)^2 + 4x0^2
x1 <= 1

, но некоторые вспомогательные переменные должны быть добавлены для ввода этого в формате MOSEK.

Документация MOSEK https://www.mosek.com/documentation/ будет содержать детали, если что-то не понятно из файла opf.

...