-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
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
Labels
No labels