I'm new to Manopt. Thank you for creating the library - it looks awesome.
As a first toy problem, I've decided to construct one which looks pretty trivial to me.
The idea is to optimize an orthonormal basis V of C_n (a unitary matrix) - hence optimizing on the complex Stiefel manifold.
The optimization goal is to align V to some basis U.
Alignment means that every column of V needs to point in the same direction as the corresponding column of U. A complex phase between them (dot product on unit circle) is Ok.
Thus the cost function is
C = trace(1 - abs(V' * U) .^ 2)
The egrad that I have computed is:
g = -2 * v .* u .* conj(u);
checkgradient seems to be happy.
You can find my code at the following gist:
https://gist.github.com/jchayat/d70a97ba33640038a98d5b3bac86d6fb
Here's the problem - unless I start at a point which is close to U, optimization does not converge. None of the solvers were able to converge from a random starting point (I did not fiddle with parameters too much).
Reason I believe this should not be a hard problem: basically we should rotate the initial guess by U * V_init' to get to U. Also, because we ignore phase difference, there should not be a problem of "handedness".
What am I missing? Is this a hard optimization problem (lots of saddle points or local minima)? Is it a hyperparameter problem? Something else?
Your help is much appreciated!
Best regards,
Jon
function h = ehess(v, vdot)
h = -2 * u * diag(dot(u, vdot));
end
problem.ehess = @ehess;