Я пытаюсь перевести проблему полуопределенного программирования из CVX в CVXPY, как описано здесь .Моя попытка следующая:
import cvxpy as cvx
import numpy as np
c = [0, 1]
n = len(c)
# Create optimization variables.
f = cvx.Variable((n, n), hermitian=True)
# Create constraints.
constraints = [f >> 0]
for k in range(1, n):
indices = [(i * n) + i - (n - k) for i in range(n - k, n)]
constraints += [cvx.sum(cvx.vec(f)[indices]) == c[n - k]]
# Form objective.
obj = cvx.Maximize(c[0] - cvx.trace(f))
# Form and solve problem.
prob = cvx.Problem(obj, constraints)
sol = prob.solve()
print(sol)
print(f.value)
Проблема здесь в том, что когда я беру коэффициенты ряда Фурье и транслирую их в массив c
, он не работает на комплексных значениях.Я думаю, что это связано с несоответствием между maximize
функцией CVX и CVXPY. Я не уверен, что CVX максимизирует, поскольку трассировка матрицы является комплексным значением. Как указано ниже, трасса является реальной, поскольку матрица эрмитова, но код все равно не работает.Может кто-то со знанием CVXPY прояснить это?