Ошибка при реализации полуопределенного программирования в PICOS - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь реализовать сложную полуопределенную программу в 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, похоже, не нравится, поэтому мне пришлось написать все от руки)

...