You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* initial work on CMA-ES
* new reference
* transport p vectors, better printing and documentation
* cond stopping criterion and some docs
* add test file to runtests
* even more stopping criteria
* Add TolFunCondition
* poorly conditioned test case and some docs
* renaming
* a bit of docs
* tests for stopping criteria
* Performance improvements
* bump tolerance
* Renaming, new test
* some docs
* Apply suggestions from code review
Co-authored-by: Ronny Bergmann <[email protected]>
* address some review comments
* addressing review
* coverage
* add defaults, more asserts
* Update docs
* minor docs improvements
---------
Co-authored-by: Ronny Bergmann <[email protected]>
The CMA-ES algorithm has been implemented based on [Hansen:2023](@cite) with basic Riemannian adaptations, related to transport of covariance matrix and its update vectors. Other attempts at adapting CMA-ES to Riemannian optimzation include [ColuttoFruhaufFuchsScherzer:2010](@cite).
8
+
The algorithm is suitable for global optimization.
9
+
10
+
Covariance matrix transport between consecutive mean points is handled by `eigenvector_transport!` function which is based on the idea of transport of matrix eigenvectors.
The [`cma_es`](@ref) solver requires the following functions of a manifold to be available
36
+
37
+
* A [`retract!`](@extref ManifoldsBase :doc:`retractions`)`(M, q, p, X)`; it is recommended to set the [`default_retraction_method`](@extref`ManifoldsBase.default_retraction_method-Tuple{AbstractManifold}`) to a favourite retraction. If this default is set, a `retraction_method=` does not have to be specified.
38
+
* A [`vector_transport_to!`](@extref ManifoldsBase :doc:`vector_transports`)`M, Y, p, X, q)`; it is recommended to set the [`default_vector_transport_method`](@extref`ManifoldsBase.default_vector_transport_method-Tuple{AbstractManifold}`) to a favourite retraction. If this default is set, a `vector_transport_method=` does not have to be specified.
39
+
* A [`copyto!`](@extref`Base.copyto!-Tuple{AbstractManifold, Any, Any}`)`(M, q, p)` and [`copy`](@extref`Base.copy-Tuple{AbstractManifold, Any}`)`(M,p)` for points and similarly `copy(M, p, X)` for tangent vectors.
40
+
*[`get_coordinates!`](@extref`ManifoldsBase.get_coordinates-Tuple{AbstractManifold, Any, Any, ManifoldsBase.AbstractBasis}`)`(M, Y, p, X, b)` and [`get_vector!`](@extref`ManifoldsBase.get_vector-Tuple{AbstractManifold, Any, Any, ManifoldsBase.AbstractBasis}`)`(M, X, p, c, b)` with respect to the [`AbstractBasis`](@extref`ManifoldsBase.AbstractBasis`) `b` provided, which is [`DefaultOrthonormalBasis`](@extref`ManifoldsBase.DefaultOrthonormalBasis`) by default from the `basis=` keyword.
41
+
* An [`is_flat`](@extref`ManifoldsBase.is_flat-Tuple{AbstractManifold}`)`(M)`.
42
+
43
+
## Internal helpers
44
+
45
+
You may add new methods to `eigenvector_transport!` if you know a more optimized implementation
Copy file name to clipboardExpand all lines: docs/src/solvers/quasi_Newton.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -125,7 +125,7 @@ The [`quasi_Newton`](@ref) solver requires the following functions of a manifold
125
125
* A [`vector_transport_to!`](@extref ManifoldsBase :doc:`vector_transports`)`M, Y, p, X, q)`; it is recommended to set the [`default_vector_transport_method`](@extref`ManifoldsBase.default_vector_transport_method-Tuple{AbstractManifold}`) to a favourite retraction. If this default is set, a `vector_transport_method=` or `vector_transport_method_dual=` (for ``\mathcal N``) does not have to be specified.
126
126
* By default quasi Newton uses [`ArmijoLinesearch`](@ref) which requires [`max_stepsize`](@ref)`(M)` to be set and an implementation of [`inner`](@extref`ManifoldsBase.inner-Tuple{AbstractManifold, Any, Any, Any}`)`(M, p, X)`.
127
127
* the [`norm`](@extref`LinearAlgebra.norm-Tuple{AbstractManifold, Any, Any}`) as well, to stop when the norm of the gradient is small, but if you implemented `inner`, the norm is provided already.
128
-
* A [`copyto!](@extref `Base.copyto!-Tuple{AbstractManifold, Any, Any}`)`(M, q, p)` and [`copy`](@extref `Base.copy-Tuple{AbstractManifold, Any}`)`(M,p)` for points and similarly `copy(M, p, X)` for tangent vectors.
128
+
* A [`copyto!`](@extref`Base.copyto!-Tuple{AbstractManifold, Any, Any}`)`(M, q, p)` and [`copy`](@extref`Base.copy-Tuple{AbstractManifold, Any}`)`(M,p)` for points and similarly `copy(M, p, X)` for tangent vectors.
129
129
* By default the tangent vector storing the gradient is initialized calling [`zero_vector`](@extref`ManifoldsBase.zero_vector-Tuple{AbstractManifold, Any}`)`(M,p)`.
130
130
131
131
Most Hessian approximations further require [`get_coordinates`](@extref`ManifoldsBase.get_coordinates-Tuple{AbstractManifold, Any, Any, ManifoldsBase.AbstractBasis}`)`(M, p, X, b)` with respect to the [`AbstractBasis`](@extref`ManifoldsBase.AbstractBasis`) `b` provided, which is [`DefaultOrthonormalBasis`](@extref`ManifoldsBase.DefaultOrthonormalBasis`) by default from the `basis=` keyword.
0 commit comments