CVXPY не может максимизировать функцию - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь максимизировать значение функции на основе 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]]
...