Skip to content

Optimization of unitary matrix with non-degenerate symmetry blocks #9

@philihps

Description

@philihps

Hi Jutho,

I am trying to do an optimization of a two-mode unitary disentangling transformation, based on a cost function. Below I provide a MWE with a test cost function. Setting d = 2 works, but setting d = 1 fails. Is this expected behaviour or can it be caught?

using OptimKit
using TensorKit
using TensorKitManifolds

function fg(U::TensorMap)
    fval = real(tr(U * U'));
    gval = Stiefel.project!(2 * U', U; metric = :euclidean)
    return fval, gval;
end

# set up two-mode system
d = 2;
PL = ComplexSpace(d);
PR = ComplexSpace(d);

# initialize unitary
U = TensorMap(randhaar, Float64, PL * PR, PL * PR);

optimAlg = LBFGS(12, verbosity = 2);
res = optimize(fg, U, optimAlg;
        inner = Stiefel.inner,
        retract = Stiefel.retract,
        transport! = Stiefel.transport!,
        isometrictransport = true
    );

Optimizing a 1x1 unitary matrix is of course meaningless. In the real setting, however, the two-mode unitary has U1 quantum numbers, so it consists of different symmetry blocks. However, they are not necessarily degenerate, and it would be nice to be able to handle degenerate and non-degenerate sectors.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions