diff --git a/.gitignore b/.gitignore index 120a653afe..7058f358b2 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ docs/src/tutorials/*.html docs/src/changelog.md docs/styles/Google tutorials/LocalPreferences.toml +temp diff --git a/Changelog.md b/Changelog.md index f09d4723f0..b7dc68dcb9 100644 --- a/Changelog.md +++ b/Changelog.md @@ -5,11 +5,18 @@ All notable Changes to the Julia package `Manopt.jl` will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.4.55] unreleased +## [0.4.55] March 3, 2024 ### Added -* Option `nondescent_direction_behavior` for quasi-Newton solvers. By default it checks for non-descent direction which may not be handled well by some stepsize selection algorithms. +* Option `nondescent_direction_behavior` for quasi-Newton solvers. + By default it checks for non-descent direction which may not be handled well by + some stepsize selection algorithms. + +### Fixed + +* unified documentation, especially function signatures further. +* fixed a few typos related to math formulae in the doc strings. ## [0.4.54] February 28, 2024 diff --git a/Project.toml b/Project.toml index 34e0b809b9..19a3ec464f 100644 --- a/Project.toml +++ b/Project.toml @@ -10,7 +10,6 @@ Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -LinearOperators = "5c8ed15e-5a4c-59e4-a42b-c7e8811fb125" ManifoldDiff = "af67fdf4-a580-4b9f-bbec-742ef357defd" ManifoldsBase = "3362f125-f0bb-47a3-aa74-596ffd7ef2fb" Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a" @@ -49,7 +48,6 @@ Dates = "1.6" JuMP = "1.15" LRUCache = "1.4" LinearAlgebra = "1.6" -LinearOperators = "~2.6" ManifoldDiff = "0.3.8" Manifolds = "0.9.11" ManifoldsBase = "0.15" @@ -61,7 +59,7 @@ Printf = "1.6" QuadraticModels = "0.9" Random = "1.6" Requires = "0.5, 1" -RipQP = "0.6" +RipQP = "0.6.4" SparseArrays = "1.6" Statistics = "1.6" Test = "1.6" diff --git a/src/solvers/NelderMead.jl b/src/solvers/NelderMead.jl index 06b4bbd377..84e9bec794 100644 --- a/src/solvers/NelderMead.jl +++ b/src/solvers/NelderMead.jl @@ -169,8 +169,10 @@ function set_iterate!(O::NelderMeadState, ::AbstractManifold, p) end @doc raw""" - NelderMead(M::AbstractManifold, f [, population::NelderMeadSimplex]) - NelderMead(M::AbstractManifold, mco::AbstractManifoldCostObjective [, population::NelderMeadSimplex]) + NelderMead(M::AbstractManifold, f) + NelderMead(M::AbstractManifold, f, population::NelderMeadSimplex) + NelderMead(M::AbstractManifold, mco::AbstractManifoldCostObjective) + NelderMead(M::AbstractManifold, mco::AbstractManifoldCostObjective, population::NelderMeadSimplex) Solve a Nelder-Mead minimization problem for the cost function ``f: \mathcal M`` on the manifold `M`. If the initial population `p` is not given, a random set of diff --git a/src/solvers/particle_swarm.jl b/src/solvers/particle_swarm.jl index e13dc972a4..52af14a44e 100644 --- a/src/solvers/particle_swarm.jl +++ b/src/solvers/particle_swarm.jl @@ -158,19 +158,19 @@ The aim of PSO is to find the particle position ``p`` on the `Manifold M` that s \min_{p ∈\mathcal{M}} F(p). ``` -To this end, a swarm ``S = \{s_1,\ldots_s_n\}`` of particles is moved around the manifold `M` in the following manner. +To this end, a swarm ``S = \{s_1, \ldots, s_n\}`` of particles is moved around the manifold `M` in the following manner. For every particle ``s_k^{(i)}`` the new particle velocities ``X_k^{(i)}`` are computed in every step ``i`` of the algorithm by ```math -begin{aligned*} - X_k^{(i)} &= ω \, \operatorname{T}_{s_k^{(i)}\gets s_k^{(i-1)}}X_k^{(i-1)} + c r_1 \operatorname{retr}_{s_k^{(i)}}^{-1}(p_k^{(i)}) + s r_2 \operatorname{retr}_{s_k^{(i)}}^{-1}(p), + X_k^{(i)} = ω \, \operatorname{T}_{s_k^{(i)}\gets s_k^{(i-1)}}X_k^{(i-1)} + c r_1 \operatorname{retr}_{s_k^{(i)}}^{-1}(p_k^{(i)}) + s r_2 \operatorname{retr}_{s_k^{(i)}}^{-1}(p), ``` -where ``s_k^{(i)}`` is the current particle position, ``ω`` denotes the inertia, -``c`` and ``s`` are a cognitive and a social weight, respectively, -``r_j``, ``j=1,2`` are random factors which are computed new for each particle and step, -``\operatorname{retr}^{-1}`` denotes an inverse retraction on the `Manifold` `M`, and -``\operatorname{T}`` is a vector transport. +where +* ``s_k^{(i)}`` is the current particle position, +* ``ω`` denotes the inertia, +* ``c`` and ``s`` are a cognitive and a social weight, respectively, +* ``r_j``, ``j=1,2`` are random factors which are computed new for each particle and step +* ``T`` denotes the vector transport and ``\operatorname{retr}^{-1}`` the inverse retraction used Then the position of the particle is updated as diff --git a/test/solvers/test_convex_bundle_method.jl b/test/solvers/test_convex_bundle_method.jl index fd7221c3dd..e3f0c21bab 100644 --- a/test/solvers/test_convex_bundle_method.jl +++ b/test/solvers/test_convex_bundle_method.jl @@ -146,7 +146,7 @@ using Manopt: sectional_curvature, ζ_1, ζ_2, close_point ) @test -10eps() ≤ cbms3.ϱ ≤ 10eps() end - @testset "A simple median rum" begin + @testset "A simple median run" begin M = Sphere(2) p1 = [1.0, 0.0, 0.0] p2 = 1 / sqrt(2) .* [1.0, 1.0, 0.0]