に基づいて関数の値を最大化しようとしていますが、qutip
この関数を最大化したトレース 1 のエルミート正半定値行列を見つけようとしていますが、CVXPY は常に値 0.0 と対角行列を返します。ソルバーのために何かをする必要がありますか?行列に複雑な値を許可するには?
以下の私のコード:
import numpy as np
from qutip import *
import matplotlib.pyplot as plt
import cvxpy as cp
def Coherence(density_matrix):
rho = Qobj(density_matrix)
diag = rho.diag()
matrix_diag = np.diag(diag)
rho_diag = Qobj(matrix_diag)
coherence = entropy_vn(rho_diag, 2) - entropy_vn(rho, 2)
return coherence
n = 2**7
density_matrix = cp.Variable((n,n), hermitian=True)
constraints = [cp.trace(density_matrix) == 1]
prob = cp.Problem(cp.Maximize(Coherence(density_matrix.value)),constraints)
prob.solve()
# Print result.
print("The optimal value is", prob.value)
print("A solution density matrix is")
print(density_matrix.value)
常に次の結果を返します。
The optimal value is -0.0
A solution density matrix is
[[0.0078125+0.j 0. +0.j 0. +0.j ... 0. +0.j
0. +0.j 0. +0.j]
[0. +0.j 0.0078125+0.j 0. +0.j ... 0. +0.j
0. +0.j 0. +0.j]
[0. +0.j 0. +0.j 0.0078125+0.j ... 0. +0.j
0. +0.j 0. +0.j]
...
[0. +0.j 0. +0.j 0. +0.j ... 0.0078125+0.j
0. +0.j 0. +0.j]
[0. +0.j 0. +0.j 0. +0.j ... 0. +0.j
0.0078125+0.j 0. +0.j]
[0. +0.j 0. +0.j 0. +0.j ... 0. +0.j
0. +0.j 0.0078125+0.j]]