# Manifold Optimization

## Amateur Manifold Optimization

`SCDM.ILAOptimizer`

— Type`ILAOptimizer(scheme)`

An amateur manifold optimizer with gradient descent, accelerated gradient descent, and conjugate gradient. The project aims to integrate with `manopt.jl`

and deprecate the custom optimizer except for debugging.

Example:

```
julia> optimizer = ILAOptimizer(scheme);
julia> U_optimal = optimizer(U, TruncatedConvolution, FletcherReeves);
julia> M_optimal = gauge_transform(neighbor_basis_integral(scheme), U_optimal);
julia> sum(i->spread(M_optimal, scheme, i, TruncatedConvolution), 1:4)
24.206845069491276
```

Optimization with `W90BranchCut`

is not included because it's too much work for `Documenter.jl`

.

`SCDM.FletcherReeves`

— TypeThe (tampered) Fletcher Reeves conjugate gradient algorithm.

For an explanation of this conjugate gradient algorithm, see: http://www.mymathlib.com/optimization/nonlinear/unconstrained/fletcher_reeves.html

The algorithm is adapted slightly since our objective function is not convex. We added simple line searches when the quadratic fit turns out concave.

`SCDM.AcceleratedGradientDescent`

— TypeThe accelerated gradient descent algorithm. The acceleration starts when the gradient becomes small enough.