This is my optimization problem, my objective function is a convex function, here is the code I used with manopt, which is a bit different from yours.
Matlab:
manifold = unitaryfactory(N);
problem.M = manifold;
symmetrize = @(X) 0.5 * (X + X.');
problem.cost = @(Theta) full_objective(Theta, G_r, g0, G_d, www, ...
a_k, b_k, B1, lambda1, lambda2, gamma_qos, sigma_0);
problem.egrad = @(Theta) egrad_function(Theta, G_r, g0, G_d, www, ...
a_k, b_k, B1, lambda1, lambda2, gamma_qos, sigma_0);
problem.M.retr = @(Theta, U, t) symmetrize(manifold.retr(Theta, U, t));
Theta0_sym = symmetrize(manifold.rand());
[Theta, cost_opt, info] = conjugategradient(problem, Theta0_sym, options);
unitary_error = norm(Theta * Theta' - eye(N), 'fro');
symmetry_error = norm(Theta - Theta.', 'fro');