0

我正在尝试将半定编程问题从 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时,它在复数值上失败了。我认为这是由于maximizeCVX 和 CVXPY 的功能之间存在差异。我不确定 CVX 最大化了什么,因为矩阵的轨迹是一个复数值。正如下面所指出的,由于矩阵是 Hermitian,所以迹线是真实的,但代码仍然失败。有 CVXPY 知识的人可以解决这个问题吗?

4

0 回答 0