Implementation of the QKD cone introduced in the paper
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.
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 usedh
is a variable which will have the conditional entropy in base eρ_vec
is a vectorization ofρ
in the svec format (we provided a functionsvec
to compute it).T
is the floating point type to be used (e.g.Float64
,Double64
,Float128
,BigFloat
, etc.)R
is either equal toT
, in order to optimize over real matrices, or equal toComplex{T}
in order to optimize over complex matrices.Ghat
andZhat
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 ofZhat
as a vector of vectors. For example, ifZhat
maps a 4x4ρ
to a matrixM
such that onlyM[1:2,1:2]
andM[3:4,3:4]
are nonzero, thenblocks
should be[1:2, 3:4]
. If this argument is omitted the computation will be considerably slower.