Я пытаюсь реализовать сложную полуопределенную программу в PICOS (контекст является квантовой информацией), но я получаю сообщение об ошибке каждый раз, когда пытаюсь это сделать. Ниже приведен код и ошибка, приведенная
import cvxopt as cvx
import picos as pic
import numpy as np
n = 2
P1 = cvx.matrix([ [1-1j , 2+2j],
[3j , -2j ]
])
P1 = P1 * P1.H
P2 = cvx.matrix([ [1-1j , 2+2j],
[3j , -2j ]
])
P2 = P2 * P2.H
S1 = cvx.matrix([ [1-1j , 2+2j],
[3j , -2j ]
])
S1 = S1 * S1.H
S2 = cvx.matrix([ [1-1j , 2+2j],
[3j , -2j ]
])
S2 = S2 * S2.H
P1 = pic.new_param('P1',P1)
P2 = pic.new_param('P2',P2)
S1 = pic.new_param('S1',S1)
S2 = pic.new_param('S2', S2)
Xi = P.add_variable('Xi',(n,n),'hermitian')
Xi = pic.new_param('Xi',Xi)
I = np.identity(2)
P = pic.Problem()
Z = P.add_variable('Z',(n,n),'hermitian')
P.set_objective('max',trace(Z))
C1 = P.add_list_of_constraints([Xi >> 0 for i in range(1,n)],'i')
C2 = P.add_constraint(Z >> 0)
C3 = P.add_constraint(I ^ Z - sum(Xi * Pi) for i in range(1,n) >> 0)
C4 = P.add_constraint(pic.trace(S1^T * X1 + S2^T * X2) = 1 )
Полученная ошибка имеет вид
C4 = P.add_constraint(pic.trace(S1^T * X1 + S2^T * X2) = 1 )
^
SyntaxError: keyword can't be an expression
, который я не понимаю, поскольку я видел примеры в руководстве по PICOS с ограничениями, включающими трассировки (ранее я пытался реализовать отдельные параметры, используя индекс i, но для некоторых Причина, по которой PICOS, похоже, не нравится, поэтому мне пришлось написать все от руки)