Перевести задачу оптимизации из CVX в CVXPY? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь перевести проблему полуопределенного программирования из 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 прояснить это?

...