ConicQKD.jl

Implementation of QKD cone as a Hypatia extension
Author araujoms
Popularity
6 Stars
Updated Last
4 Months Ago
Started In
April 2024

ConicQKD

Implementation of the QKD cone introduced in the paper

Andrés González Lorente, Pablo V. Parellada, Miguel Castillo-Celeita, and Mateus Araújo

Installation

First you need to install Julia. From within Julia, enter the package manager by typing ]. Then install ConicQKD:

pkg> add https://github.com/araujoms/ConicQKD.jl

This will automatically install all dependencies. The main one is the solver Hypatia, which this package extends.

Usage

Several examples are available in the examples folder. They are all formulated using the modeller JuMP. To constraint a quantum state ρ to belong to the QKD cone with CP maps Ghat and Zhat the syntax is

@constraint(model, [h; ρ_vec] in EpiQKDTriCone{T,R}(Ghat, Zhat, 1 + vec_dim; blocks))
  • model is the JuMP optimization model being used
  • h is a variable which will have the conditional entropy in base e
  • ρ_vec is a vectorization of ρ in the svec format (we provided a function svec to compute it).
  • T is the floating point type to be used (e.g. Float64, Double64, Float128, BigFloat, etc.)
  • R is either equal to T, in order to optimize over real matrices, or equal to Complex{T} in order to optimize over complex matrices.
  • Ghat and Zhat encode the CP maps as vectors of Kraus operators.
  • vec_dim is the number of real parameters of ρ, i.e., either d^2 or d(d+1)/2 for the complex and real cases, respectively.
  • blocks is an optional keyword argument specifying the block structure of Zhat as a vector of vectors. For example, if Zhat maps a 4x4 ρ to a matrix M such that only M[1:2,1:2] and M[3:4,3:4] are nonzero, then blocks should be [1:2, 3:4]. If this argument is omitted the computation will be considerably slower.