Skip to content

Commit c10dec8

Browse files
Refactor initial guess (#539)
* First draft of refactoring initial guesses. * initial guess file with HZ and Armijo * Inf norm for HZI * Fix calls to initial guess to include the eta. * docs * Provide a more detailed linesearch backtrack documentation * increase test coverage * Bump version. --------- Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
1 parent daf7eea commit c10dec8

32 files changed

Lines changed: 522 additions & 255 deletions

.github/workflows/ci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ jobs:
1919
with:
2020
version: ${{ matrix.julia-version }}
2121
arch: x64
22-
- uses: julia-actions/cache@v2
2322
- uses: julia-actions/julia-buildpkg@v1
2423
- uses: julia-actions/julia-runtest@v1
2524
- uses: julia-actions/julia-processcoverage@v1

.github/workflows/documenter.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
version: "1.7.29"
1717
- uses: julia-actions/setup-julia@latest
1818
with:
19-
version: "1.11"
19+
version: "1.12"
2020
- name: Julia Cache
2121
uses: julia-actions/cache@v2
2222
- name: Cache Quarto

.github/workflows/nightly.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ jobs:
1616
with:
1717
version: ${{ matrix.julia-version }}
1818
arch: x64
19-
- uses: julia-actions/cache@v2
2019
- uses: julia-actions/julia-buildpkg@v1
2120
- uses: julia-actions/julia-runtest@v1
2221
env:

Changelog.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,21 @@ The file was started with Version `0.4`.
66
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
77
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
88

9-
## [Unreleased]
9+
## [0.5.28] November 17, 2025
10+
11+
### Changed
12+
13+
* Unified the interfaces for line search related functions, especially,
14+
* `linesearch_backtrack(M, F, p, X, s, decrease, contract, η, f0; kwargs...)` now has `lf0=` and `gradient=` keyword arguments instead of positional ones for `X` and the last `f0`, respectively. It additionally has a `Dlf0=` keyword argument to pass the evaluated differential instead of the gradient, which otherwise defaults to calling the inner product.
15+
* Refactor the nonmonotone linesearch stepsize to have an initial guess that can be set. For now it still afterwards performs the Barzilai-Borwein initial guess,
16+
so a constant initial guess is recommended here. The initial guess may be refactored in the future in a non-breaking release and the meaning of the initial guess in nonmonotone line search may change.
1017

1118
### Fixed
1219

1320
* Change the construction of the product manifold in `interior_point_newton` from `×` to `ProductManifold`, so that the algorithm also work on Product manifolds `M`, where it now correctly wraps `M` instead of extending it.
14-
* unifies the doc strings for constrained problems
15-
* fixes a few typos in the doc strings of matrix update formulae within the quasi-Newton and CG solver.
16-
* covers one last line in `proximal_gradient_plan`
21+
* Unified the doc strings for constrained problems.
22+
* Fixed a few typos in the doc strings of matrix update formulae within the quasi-Newton and CG solver.
23+
* Covered one last line in `proximal_gradient_plan`
1724

1825
## [0.5.27] November 11, 2025
1926

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "Manopt"
22
uuid = "0fc0a36d-df90-57f3-8f93-d78a9fc72bb5"
33
authors = ["Ronny Bergmann <manopt@ronnybergmann.net>"]
4-
version = "0.5.27"
4+
version = "0.5.28"
55

66
[deps]
77
ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"

docs/make.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ makedocs(;
156156
format = Documenter.HTML(;
157157
prettyurls = run_on_CI || ("--prettyurls" ARGS),
158158
assets = ["assets/favicon.ico", "assets/citations.css", "assets/link-icons.css"],
159-
size_threshold_warn = 250 * 2^10, # raise slightly from 100 to 200 KiB
160159
size_threshold = 350 * 2^10, # raise slightly 200 to to 300 KiB
160+
size_threshold_warn = 11 * 2^12, # raise from 500 KiB to 1.1 MB (for search index)
161161
),
162162
modules = [
163163
Manopt,

docs/src/plans/stepsize.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# [Stepsize and line search](@id Stepsize)
1+
# [Stepsize and line search](@id Sec-Stepsize)
22

33
```@meta
44
CurrentModule = Manopt
@@ -32,6 +32,17 @@ WolfePowellLinesearch
3232
WolfePowellBinaryLinesearch
3333
```
3434

35+
Additionally, initial stepsize guesses are handled by subtypes of `AbstractInitialLinesearchGuess`:
36+
37+
```@docs
38+
AbstractInitialLinesearchGuess
39+
ConstantInitialGuess
40+
ArmijoInitialGuess
41+
HagerZhangInitialGuess
42+
```
43+
44+
Onw implementations can also (just) be functions.
45+
3546
Some step sizes use [`max_stepsize`](@ref) function as a rough upper estimate for the trust region size.
3647
It is by default equal to injectivity radius of the exponential map but in some cases a different value is used.
3748
For the `FixedRankMatrices` manifold an estimate from Manopt is used.
@@ -58,6 +69,13 @@ Then the following state can be used to wrap these locally
5869
StepsizeState
5970
```
6071

72+
The Hager-Zhang initial guess uses two helper functions to determine initial stepsize in the first iteration on manifolds which have "expected minimizer", for example the zero point on the Euclidean manifold:
73+
74+
```@docs
75+
default_vector_norm
76+
default_point_distance
77+
```
78+
6179
## Literature
6280

6381
```@bibliography

docs/src/references.bib

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ @article{HagerZhang:2005
501501
VOLUME = {16},
502502
YEAR = {2005}
503503
}
504-
@article{HagerZhang:2006,
504+
@article{HagerZhang:2006:1,
505505
AUTHOR = {Hager, W. W. and Zhang, H.},
506506
JOURNAL = {Pacific Journal of Optimization},
507507
NUMBER = {1},
@@ -511,6 +511,18 @@ @article{HagerZhang:2006
511511
VOLUME = {2},
512512
YEAR = {2006}
513513
}
514+
@article{HagerZhang:2006:2,
515+
title = {Algorithm 851: {CG}_{DESCENT}, a conjugate gradient method with guaranteed descent},
516+
volume = {32},
517+
issn = {0098-3500},
518+
doi = {10.1145/1132973.1132979},
519+
number = {1},
520+
journal = {ACM Transactions on Mathematical Software},
521+
author = {Hager, William W. and Zhang, Hongchao},
522+
month = mar,
523+
year = {2006},
524+
pages = {113--137},
525+
}
514526

515527
@article{Hansen:2023,
516528
AUTHOR = {Hansen, Nikolaus},

docs/src/solvers/proximal_gradient_method.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ProximalGradientNonsmoothCost
2828
StopWhenGradientMappingNormLess
2929
```
3030

31-
## Stepsize
31+
## [Stepsize](@id Sec-ProxGrad-Stepsize)
3232

3333
```@docs
3434
ProximalGradientMethodBacktracking

docs/src/solvers/vectorbundle_newton.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ VectorBundleManoptProblem
1717
VectorBundleNewtonState
1818
```
1919

20-
# Stepsize
20+
# [Stepsize](@id Sec-VectorBundleNewton-Stepsize)
2121

2222
```@docs
2323
AffineCovariantStepsize

0 commit comments

Comments
 (0)