Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementation of two bundle methods #357

Merged
merged 388 commits into from
Feb 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
388 commits
Select commit Hold shift + click to select a range
fb58018
Edits if statements
hajg-ijk May 30, 2023
888f838
Fixes grad_TV and grad_TV2
hajg-ijk May 30, 2023
74240a0
First attempt at implementing the proximal bundle method
hajg-ijk May 30, 2023
b321bd9
Revert "Fixes grad_TV and grad_TV2"
hajg-ijk May 30, 2023
2ea75ce
Revert "Edits if statements"
hajg-ijk May 30, 2023
bee20b6
Revert "Implements normal_vector for subgradient computation and chan…
hajg-ijk May 30, 2023
5af4f64
Edits stop field
hajg-ijk May 30, 2023
34f00aa
First draft for prox_bundle_method_subsolver
hajg-ijk May 30, 2023
d5cd857
Edits matrix for quadratic model
hajg-ijk May 30, 2023
d023bf0
Changes matrix for quadratic model
hajg-ijk May 30, 2023
6439f01
Adds size constraint to the bundle
hajg-ijk May 31, 2023
7dcd47b
Edits subsolver
hajg-ijk May 31, 2023
03f674a
Adds a missing "return"
hajg-ijk May 31, 2023
d3d3a58
Adds missing "return"
hajg-ijk May 31, 2023
09d8e22
Includes new solver
hajg-ijk May 31, 2023
e83146b
Fixes types and runs formatter
hajg-ijk May 31, 2023
65edc4c
Edits doc for stopping criterion
hajg-ijk May 31, 2023
7f71e39
Adds some missing bms. in front of variables
hajg-ijk May 31, 2023
e64264b
Adds exports
hajg-ijk May 31, 2023
c1f95f4
FIxes some types
hajg-ijk May 31, 2023
38f702a
Fixes !\approx bug
hajg-ijk May 31, 2023
cf49041
Some fixes to the stopping criterion
hajg-ijk May 31, 2023
6133bde
More fixes to the stopping criterion
hajg-ijk May 31, 2023
6e7bee2
Various fixes
hajg-ijk May 31, 2023
6875496
Checks for empty array
hajg-ijk May 31, 2023
405a653
Conditional loading of prox subsolver
hajg-ijk May 31, 2023
2c8896b
Fixes empty array check and prox subsolver call
hajg-ijk May 31, 2023
10602e5
Require Manifolds.local_metric and Manifolds.get_embedding
hajg-ijk May 31, 2023
78c38ce
Rephrases the subproblem to account for the maximum in the objective …
hajg-ijk May 31, 2023
877671d
Removes prox subsolver: the existing one can be used
hajg-ijk Jun 1, 2023
75c8c0e
Account for ProxBundleMethodState in the existing subsolver
hajg-ijk Jun 1, 2023
9897140
Use existing susbolver for prox bundle method
hajg-ijk Jun 1, 2023
1eeba77
Adds fields c and lambda for debugging
hajg-ijk Jun 1, 2023
25cdb28
Changes default mu to 1
hajg-ijk Jun 1, 2023
46b1ae1
Small fixes
hajg-ijk Jun 2, 2023
e1c19ef
Renames size variable and adds possible updates for \mu
hajg-ijk Jun 2, 2023
a3261a2
Ensures === in type check
hajg-ijk Jun 2, 2023
24c6da7
Adds delta param for updating mu
hajg-ijk Jun 5, 2023
4723a28
Adds bundle_size field and corrects check for lin_errors
hajg-ijk Jun 5, 2023
0726961
Merge branch 'prox-bundle-method' into dimeter-stopping-criteria-expe…
hajg-ijk Jun 5, 2023
f4daa9d
Merge branch 'master' into dimeter-stopping-criteria-experiments
hajg-ijk Jun 5, 2023
9daf2a6
Runs formatter
hajg-ijk Jun 5, 2023
067070c
Fixes typos
hajg-ijk Jun 6, 2023
fc132d9
Introduces approx_errors and updates diam at deletion of bundle
hajg-ijk Jun 6, 2023
ea2cfaa
Working example with max(d,d^2)
hajg-ijk Jun 6, 2023
13079ab
Edits update rule for mu
hajg-ijk Jun 6, 2023
8340e20
Adds prox_bundle_method for comparison
hajg-ijk Jun 6, 2023
7549774
Adds some comments to different runs
hajg-ijk Jun 6, 2023
9dc8426
Comments out unused (for now) code
hajg-ijk Jun 6, 2023
9135df5
Adds try/catch for prox_bundle_method
hajg-ijk Jun 6, 2023
c92c8fa
Adds tolerance parameter and starts from intersection point
hajg-ijk Jun 6, 2023
ecfabf3
Changes delta and adds a line for speed
hajg-ijk Jun 7, 2023
8b7050a
Changes update to mu
hajg-ijk Jun 7, 2023
5cfffdd
Change default delta to 1 and update diam on serious candidate
hajg-ijk Jun 9, 2023
deeae96
Changes update for mu and default for delta
hajg-ijk Jun 12, 2023
1299186
Merge branch 'dimeter-stopping-criteria-experiments' into hajg-ijk/bu…
hajg-ijk Jun 12, 2023
ed2bb19
Introduces dispatch for prox bundle method
hajg-ijk Jun 15, 2023
ed82373
Temporarily introduces check for inexact logs
hajg-ijk Jun 15, 2023
b007650
Update diam upon delition of oldest bundle element
hajg-ijk Jun 15, 2023
395c89d
Reworks some types for speed
hajg-ijk Jun 19, 2023
b26a9dc
Creates bundle_method_plan and adds BundleStruct
hajg-ijk Jun 19, 2023
6b220b7
Reworks memory allocation with index handling for speed
hajg-ijk Jun 19, 2023
8cf7ceb
Use circshift! to cycle through correct indices
hajg-ijk Jun 20, 2023
ea294ef
Avoids abstract types where possible
hajg-ijk Jun 20, 2023
beeb2c7
Preallocates memory for more field of the bundle
hajg-ijk Jun 20, 2023
5abaf04
Removes bundle_method_plan.jl
hajg-ijk Jun 20, 2023
22fc926
Runs formatter
hajg-ijk Jun 20, 2023
a807756
Unify lin_errors with approx_errors
hajg-ijk Jun 20, 2023
75dc48f
Removes q0 and fixes diam update
hajg-ijk Jun 21, 2023
8b8a524
Sparsifies QM matrix
hajg-ijk Jun 21, 2023
47f40d0
Reworks subsolver to use JuMP (for comparing allocations)
hajg-ijk Jun 22, 2023
9063952
Revert "Reworks subsolver to use JuMP (for comparing allocations)"
hajg-ijk Jun 22, 2023
4dbd9d7
Implement deletion of elements for which lambda is small
hajg-ijk Jun 22, 2023
ffa8585
Renames a couple of fields and updates the docstring
hajg-ijk Jun 22, 2023
b687688
Corrects 2 default values
hajg-ijk Jun 22, 2023
b375eae
Small edits to examples for the median
hajg-ijk Jun 23, 2023
b38b8b3
Median over 10000 points
hajg-ijk Jun 23, 2023
d81256e
Changes 2 default values
hajg-ijk Jun 27, 2023
9167f84
Changes bms to pbms for the ProximalBundleMethodState
hajg-ijk Jun 29, 2023
4adacd3
Minor type-stable changes
hajg-ijk Jun 29, 2023
0323e67
Corrects type
hajg-ijk Jun 29, 2023
1ca6d29
Changes default value for m
hajg-ijk Jul 3, 2023
07b2b69
Corrects subgradient transport for prox bundle method
hajg-ijk Jul 3, 2023
9ea4d85
Some further corrections to the prox bundle method
hajg-ijk Jul 3, 2023
b038c93
Adds conditional update rule for \mu (no default is provided in the p…
hajg-ijk Jul 3, 2023
54e46f1
Corrects typo
hajg-ijk Jul 3, 2023
1061b2f
Changes default value and conditional update
hajg-ijk Jul 3, 2023
b724fd4
Fixes default to having a constant \mu = 1 throughout the iterations
hajg-ijk Jul 3, 2023
2fb53fb
Runs formatter
hajg-ijk Jul 3, 2023
0ba2fdf
Caps iterations at 5000 per default
hajg-ijk Jul 3, 2023
846ede4
Correctly adds default 5000 iterations cap
hajg-ijk Jul 3, 2023
0d9702a
Corrects typos
hajg-ijk Jul 10, 2023
a105311
Improve StopWhenBundleLess
kellertuer Jul 11, 2023
31d8675
remove indices ref and adds 2 views.
kellertuer Jul 11, 2023
ab83f25
Rename a variable and allocate before for.
kellertuer Jul 11, 2023
6c668d4
Improves stopping criteria as in the bundle-method branch
hajg-ijk Jul 11, 2023
5d0b447
Merge branch 'bundle-push-deleteat' of github.com:hajg-ijk/Manopt.jl-…
hajg-ijk Jul 11, 2023
72bbf31
Changes positive_indices to active_indices
hajg-ijk Jul 11, 2023
2c0450d
Improves StopWhenProxBundleLess similarly to StopWhenBundleLess
hajg-ijk Jul 11, 2023
957de7f
Updates docstring
hajg-ijk Jul 11, 2023
37f26eb
a few small fixes.
kellertuer Jul 12, 2023
7cb9e35
Accommodates for active_indices being BitVectors
hajg-ijk Jul 12, 2023
46b05b7
Some corrections
hajg-ijk Jul 12, 2023
d17cb7d
Changes defaults and update for delta
hajg-ijk Jul 12, 2023
f9ab98d
Runs formatter
hajg-ijk Jul 12, 2023
d108436
Merge branch 'master' into bundle-push-deleteat
kellertuer Jul 12, 2023
5157ad0
Corrects indices, updates delta
hajg-ijk Jul 12, 2023
5ccd6a9
Simplify a code line.
kellertuer Jul 12, 2023
9256a4a
Reverts defaults
hajg-ijk Jul 12, 2023
8651520
Merge branch 'bundle-push-deleteat' of github.com:hajg-ijk/Manopt.jl-…
hajg-ijk Jul 12, 2023
a55058f
Adds absolute constant step size for gradient- and subgradient-based …
hajg-ijk Jul 13, 2023
51f8249
Adds Changelog entry
hajg-ijk Jul 13, 2023
fa55430
Adds `type` field to DecreasingStepsize as well
hajg-ijk Jul 13, 2023
54bafaa
Adds stopping criteria to changelog
hajg-ijk Jul 14, 2023
7f652f0
Fixes default for ConstantStepsize(::Float)
hajg-ijk Jul 17, 2023
5490c95
Comments out bundle method test
hajg-ijk Jul 17, 2023
ac5ce9a
Adds missing test code
hajg-ijk Jul 17, 2023
6bff920
Fixes stepsize for zero-norm subgradients
hajg-ijk Jul 17, 2023
b58769a
Fixes stepsize for zero-norm gradients
hajg-ijk Jul 17, 2023
305756e
Runs formatter
hajg-ijk Jul 17, 2023
a8e522a
Conforms defaults and names to the faster bundle branch
hajg-ijk Jul 20, 2023
f481256
Fixes prox bundle method
hajg-ijk Jul 20, 2023
b1ccfec
Conforms subsolver to faster bundle branch
hajg-ijk Jul 20, 2023
ee72a78
Fixes some variable
hajg-ijk Jul 20, 2023
b2ce125
Removes more variables
hajg-ijk Jul 20, 2023
e3a1a1f
More variable fixes
hajg-ijk Jul 20, 2023
00023f5
Merge branch 'faster-bundle' into hajg-ijk/bundle-method
hajg-ijk Jul 20, 2023
6eb6392
Moves push!
hajg-ijk Jul 20, 2023
693e2f8
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Aug 25, 2023
b846407
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Sep 4, 2023
ecd5409
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Sep 15, 2023
2749243
Introduces curvature bounds
hajg-ijk Sep 18, 2023
4e2e132
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Sep 18, 2023
c89b407
Runs formatter
hajg-ijk Sep 18, 2023
7b07fa3
Merge branch 'new-curvature-bounds' into hajg-ijk/bundle-method
hajg-ijk Sep 22, 2023
bbb7e69
Removes \delta parameter and increases curvature sample size
hajg-ijk Sep 22, 2023
3d63a4b
Make estimation of sectional curvature optional
hajg-ijk Sep 22, 2023
efa85c5
Runs formatter and adds to docstring
hajg-ijk Sep 22, 2023
428ab75
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Sep 25, 2023
22a0118
Enhance user experience in constructor
hajg-ijk Sep 26, 2023
0baaa21
Change sampling
hajg-ijk Sep 27, 2023
baa0326
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Sep 29, 2023
0e8136b
Add central point for sectional curvature estimation
hajg-ijk Sep 29, 2023
0ef40b2
Change default center point for curvature estimation
hajg-ijk Sep 29, 2023
4fc7eac
Run formatter
hajg-ijk Sep 29, 2023
308c0ad
Change subgradient keyword
hajg-ijk Sep 29, 2023
88b8a3a
Change sectional curvature estimation
hajg-ijk Sep 29, 2023
0925ac2
Implement warning for stopping parameter increase
hajg-ijk Sep 29, 2023
299cb21
Fix DebugWarnIfStoppingParameterIncreases
hajg-ijk Sep 29, 2023
f336760
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Oct 1, 2023
6b1a82e
Add one more warning
hajg-ijk Oct 1, 2023
e4cd209
Update docs and run formatter
hajg-ijk Oct 1, 2023
52440ac
Change prox bundle default proximal parameters
hajg-ijk Oct 2, 2023
78e4ce3
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Oct 9, 2023
1b5a3e1
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Oct 23, 2023
9f988cd
Change naming of bundle method to convex bundle method
hajg-ijk Oct 23, 2023
8941b88
Rename main solver file
hajg-ijk Oct 23, 2023
a5b8e50
Add show function
hajg-ijk Oct 23, 2023
b99fc6b
Add show and field descriptions for prox bundle
hajg-ijk Oct 23, 2023
edffac1
Fix name
hajg-ijk Oct 23, 2023
b499123
Add methods to docs make and edit affiliation in .zenodo
hajg-ijk Oct 23, 2023
0b973f0
Create doc files and rename subsolver
hajg-ijk Oct 23, 2023
cb52d4c
Fix doc errors
hajg-ijk Oct 23, 2023
6d890b1
Update docs
hajg-ijk Oct 23, 2023
28946df
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Oct 30, 2023
4b38a9a
Add previous Manifolds version for ManoptExamples
hajg-ijk Oct 31, 2023
5377eb7
Add previous ManifoldsBase versions
hajg-ijk Oct 31, 2023
1a66165
Update doc for `m`
hajg-ijk Nov 8, 2023
ebb3d1a
Introduce domain and stepsize functions
hajg-ijk Nov 9, 2023
6e6a77e
Run formatter
hajg-ijk Nov 10, 2023
be28d68
First attempt at having a backtracking subsolver
hajg-ijk Nov 10, 2023
3bf1282
Small fix
hajg-ijk Nov 10, 2023
8ece850
Revert to using a stepsize
hajg-ijk Nov 13, 2023
36d0cb3
Merge branch 'hajg-ijk/bundle-method' of github.com:hajg-ijk/Manopt.j…
hajg-ijk Nov 13, 2023
8716c48
Implement get_last_stepsize for RCBM
hajg-ijk Nov 13, 2023
3c274a8
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Nov 14, 2023
7d7f5c6
Add optional arguments to docs
hajg-ijk Nov 14, 2023
c442a17
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Dec 20, 2023
58c091f
Curvature and bundle size and caps changes
hajg-ijk Dec 31, 2023
6d8848c
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Jan 8, 2024
d7c0ee9
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Jan 16, 2024
e02784b
Merge branch 'master' into hajg-ijk/bundle-method
hajg-ijk Jan 31, 2024
ec6e6a3
Add non-wrapping condition
hajg-ijk Feb 9, 2024
7cd6c1f
Merge branch 'master' into hajg-ijk/bundle-method
kellertuer Feb 15, 2024
c7f678c
A bit of work on formatting (not yet reading) the new docs.
kellertuer Feb 15, 2024
38221c5
Move the requires to an extension
kellertuer Feb 16, 2024
1ea8521
reintroduce two - instead of :
kellertuer Feb 16, 2024
222157f
Add citations to the documentationand rearrange the subsolver a bit.
kellertuer Feb 17, 2024
b5e1083
Correct some more trailing ":" to "-"
hajg-ijk Feb 19, 2024
58c8b5f
Update.
kellertuer Feb 20, 2024
69e98bc
Import tril and sparse in the extension
hajg-ijk Feb 20, 2024
2ecbb79
Refactor the bundle sub problem(s)
hajg-ijk Feb 21, 2024
d36af9a
Update docs for internal helper functions
hajg-ijk Feb 22, 2024
f1d355c
Rename stopping criteria and debug warning
hajg-ijk Feb 22, 2024
ff91fac
Unify naming of stopping criteria fields
hajg-ijk Feb 22, 2024
b84850e
Resolve warnings and add first test
hajg-ijk Feb 22, 2024
5f3b50b
Format, bump version and changelog
hajg-ijk Feb 22, 2024
27fa499
Fix docs
hajg-ijk Feb 22, 2024
fb61847
Fix some more docs
hajg-ijk Feb 22, 2024
6b233d0
Fix typo
hajg-ijk Feb 22, 2024
006f7eb
Renaming and some fixes
hajg-ijk Feb 23, 2024
5d7646f
Adapt codecov CI to V4 and explicitly mention secret.
kellertuer Feb 23, 2024
b42ae0c
Merge branch 'hajg-ijk/bundle-method' of github.com:JuliaManifolds/Ma…
kellertuer Feb 23, 2024
9159e55
ad convex bundle to the test set.
kellertuer Feb 23, 2024
7b1e981
Remove a spurious line.
kellertuer Feb 23, 2024
6a73642
Fix changelog.
kellertuer Feb 23, 2024
5619441
Remove examples from the PR.
kellertuer Feb 23, 2024
4e177cc
remove bnchmarks.
kellertuer Feb 23, 2024
c2f99df
Expand proximal state nomenclature
hajg-ijk Feb 23, 2024
d649f7f
Refactor code slightly.
kellertuer Feb 24, 2024
399ebc3
Refactor stopping criterion to be a bit easier to use and more flexible.
kellertuer Feb 24, 2024
c9c59be
Add two simple solver runs to the tests.
kellertuer Feb 24, 2024
5fd837d
Further test coverage and renaming
kellertuer Feb 24, 2024
94d3258
Add a last simple test.
kellertuer Feb 24, 2024
80784be
Increase code coverage.
kellertuer Feb 25, 2024
0f4fd1c
Add more tests for utility functions
hajg-ijk Feb 26, 2024
6719132
Add warning tests and format
hajg-ijk Feb 26, 2024
325ac60
Add some test for the prox bundle method
hajg-ijk Feb 26, 2024
bbdd22d
Update src/solvers/convex_bundle_method.jl
hajg-ijk Feb 26, 2024
922296e
Fix fallback in make.jl, fix notation
hajg-ijk Feb 26, 2024
060e95a
Merge branch 'hajg-ijk/bundle-method' of github.com:JuliaManifolds/Ma…
hajg-ijk Feb 26, 2024
1fdcec9
Change subsolver signature, expand PBM docs
hajg-ijk Feb 26, 2024
385fe65
Rename subsolvers
hajg-ijk Feb 27, 2024
50e94bc
interims commit to merge with Hajgs renaming.
kellertuer Feb 27, 2024
05a3a30
Merge branch 'hajg-ijk/bundle-method' of github.com:JuliaManifolds/Ma…
kellertuer Feb 27, 2024
26b2f2f
Rework memory management.
kellertuer Feb 27, 2024
8a2ad6b
Rework subsolver extension.
kellertuer Feb 27, 2024
1925283
unify subsolver naming.
kellertuer Feb 27, 2024
2d64fdb
further fixes for the subsolver.
kellertuer Feb 27, 2024
169cc70
Fix some tests and typos
hajg-ijk Feb 27, 2024
586446f
rework prox bundle subsolver as well.
kellertuer Feb 27, 2024
82a5e97
Merge branch 'hajg-ijk/bundle-method' of github.com:JuliaManifolds/Ma…
kellertuer Feb 27, 2024
3829539
Update src/solvers/convex_bundle_method.jl
hajg-ijk Feb 27, 2024
4507d30
Merge branch 'hajg-ijk/bundle-method' of github.com:JuliaManifolds/Ma…
kellertuer Feb 27, 2024
f3c4e54
Fix tests again.
kellertuer Feb 27, 2024
bbf0fd1
Add a tip to the docs of the subsolvers.
kellertuer Feb 27, 2024
9dc4b34
Tweak dependencies by adding LinearOperators and fix it to 2.6 for no…
kellertuer Feb 27, 2024
e5e513e
Call the right subsovler dispatch, fix a typo.
kellertuer Feb 27, 2024
8852527
remove a dependency again.
kellertuer Feb 27, 2024
7f0d4a1
Maybe like this? Otherwise back to fixing LinearOperators at 2.6
kellertuer Feb 27, 2024
dc32996
Revert "remove a dependency again."
kellertuer Feb 27, 2024
c195611
Try to cover a few more lines
hajg-ijk Feb 27, 2024
72aa496
Merge branch 'hajg-ijk/bundle-method' of github.com:JuliaManifolds/Ma…
hajg-ijk Feb 27, 2024
374ba43
Fix typos
hajg-ijk Feb 27, 2024
beb09ae
Unify defaults and fix a typo.
kellertuer Feb 27, 2024
72bfdee
Update Changelog.
kellertuer Feb 27, 2024
fcc83a2
Remove duplicate expports, sort alphabetically.
kellertuer Feb 27, 2024
e8dcc26
Cover the last line.
kellertuer Feb 27, 2024
64fb0ad
Check whether we do no longer need the version restriction on LinearO…
kellertuer Feb 28, 2024
520a821
Revert "Check whether we do no longer need the version restriction on…
kellertuer Feb 28, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ jobs:
- uses: julia-actions/julia-processcoverage@v1
- uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./lcov.info
name: codecov-umbrella
fail_ci_if_error: false
Expand Down
4 changes: 3 additions & 1 deletion .vale.ini
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ BasedOnStyles = Vale, Google

[docs/src/contributing.md]
Google.FirstPerson = No
Google.We = No


[src/*.md] ; actually .jl but they are identified those above I think?
BasedOnStyles = Vale, Google
Expand All @@ -23,7 +25,7 @@ BasedOnStyles = Vale, Google
Google.Units = false #wto ignore formats= for now.
TokenIgnores = \$.+?\$,\[.+?\]\(@(ref|id|cite).+?\),`.+`,``.*``,\s{4}.+\n

[test/plans/test_debug.jl] #repeat previous until I find out how to combine them
[test/plans/test_debug.md] #repeat previous until I find out how to combine them
Google.Units = false #wto ignore formats= for now.
TokenIgnores = \$.+?\$,\[.+?\]\(@(ref|id|cite).+?\),`.+`,``.*``,\s{4}.+\n

Expand Down
3 changes: 2 additions & 1 deletion .zenodo.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
{
"affiliation": "NTNU Trondheim",
"name": "Jasa, Hajg",
"type": "Other"
"type": "ProjectMember",
"orcid": "0009-0002-7917-0530"
},
{
"name": "Mathieu Besançon",
Expand Down
10 changes: 8 additions & 2 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +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.54] unreleased
## [0.4.54] February 28, 2024

### Added

* `convex_bundle_method` optimization algorithm for non-smooth geodesically convex functions
* `proximal_bundle_method` optimization algorithm for non-smooth functions.
* `StopWhenSubgradientNormLess`, `StopWhenLagrangeMultiplierLess`, and stopping criteria.

### Fixed

* Doc strings now follow a [vale.sh](https://vale.sh) policy. Though this is not fully working,
this PR imporves a lot of the doc strings concerning wording and spelling.
this PR improves a lot of the doc strings concerning wording and spelling.

## [0.4.53] February 13, 2024

Expand Down
17 changes: 13 additions & 4 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "Manopt"
uuid = "0fc0a36d-df90-57f3-8f93-d78a9fc72bb5"
authors = ["Ronny Bergmann <[email protected]>"]
version = "0.4.53"
version = "0.4.54"

[deps]
ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
Expand All @@ -10,6 +10,7 @@ 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"
Expand All @@ -28,13 +29,16 @@ LRUCache = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637"
LineSearches = "d3d80556-e9d4-5f37-9878-2ab0fcc64255"
Manifolds = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
QuadraticModels = "f468eda6-eac5-11e8-05a5-ff9e497bcd19"
RipQP = "1e40b3f8-35eb-4cd8-8edd-3e515bb9de08"

[extensions]
ManoptJuMPExt = ["JuMP"]
ManoptJuMPExt = "JuMP"
ManoptLRUCacheExt = "LRUCache"
ManoptLineSearchesExt = "LineSearches"
ManoptManifoldsExt = ["Manifolds"]
ManoptManifoldsExt = "Manifolds"
ManoptPlotsExt = "Plots"
ManoptRipQPQuadraticModelsExt = ["RipQP", "QuadraticModels"]

[compat]
ColorSchemes = "3.5.0"
Expand All @@ -45,6 +49,7 @@ 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"
Expand All @@ -53,8 +58,10 @@ Markdown = "1.6"
PolynomialRoots = "1"
Preferences = "1.4"
Printf = "1.6"
QuadraticModels = "0.9"
Random = "1.6"
Requires = "0.5, 1"
RipQP = "0.6"
SparseArrays = "1.6"
Statistics = "1.6"
Test = "1.6"
Expand All @@ -69,7 +76,9 @@ ManifoldDiff = "af67fdf4-a580-4b9f-bbec-742ef357defd"
Manifolds = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e"
ManoptExamples = "5b8d5e80-5788-45cb-83d6-5e8f1484217d"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
QuadraticModels = "f468eda6-eac5-11e8-05a5-ff9e497bcd19"
RipQP = "1e40b3f8-35eb-4cd8-8edd-3e515bb9de08"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test", "ForwardDiff", "JuMP", "Manifolds", "ManoptExamples", "ManifoldDiff", "Plots", "LineSearches", "LRUCache"]
test = ["Test", "ForwardDiff", "JuMP", "Manifolds", "ManoptExamples", "ManifoldDiff", "Plots", "LineSearches", "LRUCache", "RipQP", "QuadraticModels"]
31 changes: 0 additions & 31 deletions benchmarks/benchmark_subgradient.jl

This file was deleted.

35 changes: 0 additions & 35 deletions benchmarks/benchmark_trust_regions.jl

This file was deleted.

3 changes: 3 additions & 0 deletions docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ Manifolds = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e"
ManifoldsBase = "3362f125-f0bb-47a3-aa74-596ffd7ef2fb"
Manopt = "0fc0a36d-df90-57f3-8f93-d78a9fc72bb5"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
QuadraticModels = "f468eda6-eac5-11e8-05a5-ff9e497bcd19"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
RipQP = "1e40b3f8-35eb-4cd8-8edd-3e515bb9de08"

[compat]
BenchmarkTools = "1.3"
Expand All @@ -38,4 +40,5 @@ Literate = "2"
Manifolds = "0.8.81, 0.9"
ManifoldsBase = "0.14.12, 0.15"
Manopt = "0.4"
QuadraticModels = "0.9.6"
Plots = "1"
18 changes: 16 additions & 2 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ if "--help" ∈ ARGS
"""
docs/make.jl

Render the `Manopt.jl` documenation with optinal arguments
Render the `Manopt.jl` documenation with optional arguments

Arguments
* `--exclude-tutorials` - exclude the tutorials from the menu of Documenter,
Expand All @@ -18,8 +18,11 @@ Arguments
* `--quarto` – run the Quarto notebooks from the `tutorials/` folder before generating the documentation
this has to be run locally at least once for the `tutorials/*.md` files to exist that are included in
the documentation (see `--exclude-tutorials`) for the alternative.
If they are generated ones they are cached accordingly.
If they are generated once they are cached accordingly.
Then you can spare time in the rendering by not passing this argument.
If quarto is not run, some tutorials are generated as empty files, since they
are referenced from within the documentation. These are currently
`Optimize.md` and `ImplementOwnManifold.md`.
""",
)
exit(0)
Expand Down Expand Up @@ -50,6 +53,9 @@ if "--quarto" ∈ ARGS
Pkg.activate(@__DIR__) # but return to the docs one before
run(`quarto render $(tutorials_folder)`)
end
else # fallback to at least create empty files for Optimize and Implement
touch(joinpath(@__DIR__, "src/tutorials/Optimize.md"))
touch(joinpath(@__DIR__, "src/tutorials/ImplementOwnManifold.md"))
end

tutorials_in_menu = true
Expand All @@ -67,6 +73,7 @@ end
using Documenter
using DocumenterCitations
using JuMP, LineSearches, LRUCache, Manopt, Manifolds, Plots
using RipQP, QuadraticModels

# (d) add contributing.md to docs
generated_path = joinpath(@__DIR__, "src")
Expand Down Expand Up @@ -142,6 +149,11 @@ makedocs(;
else
Manopt.ManoptPlotsExt
end,
if isdefined(Base, :get_extension)
Base.get_extension(Manopt, :ManoptRipQPQuadraticModelsExt)
else
Manopt.ManoptRipQPQuadraticModelsExt
end,
],
authors="Ronny Bergmann and contributors.",
sitename="Manopt.jl",
Expand All @@ -156,6 +168,7 @@ makedocs(;
"Augmented Lagrangian Method" => "solvers/augmented_Lagrangian_method.md",
"Chambolle-Pock" => "solvers/ChambollePock.md",
"Conjugate gradient descent" => "solvers/conjugate_gradient_descent.md",
"Convex bundle method" => "solvers/convex_bundle_method.md",
"Cyclic Proximal Point" => "solvers/cyclic_proximal_point.md",
"Difference of Convex" => "solvers/difference_of_convex.md",
"Douglas—Rachford" => "solvers/DouglasRachford.md",
Expand All @@ -166,6 +179,7 @@ makedocs(;
"Nelder–Mead" => "solvers/NelderMead.md",
"Particle Swarm Optimization" => "solvers/particle_swarm.md",
"Primal-dual Riemannian semismooth Newton" => "solvers/primal_dual_semismooth_Newton.md",
"Proximal bundle method" => "solvers/proximal_bundle_method.md",
"Quasi-Newton" => "solvers/quasi_Newton.md",
"Stochastic Gradient Descent" => "solvers/stochastic_gradient_descent.md",
"Subgradient method" => "solvers/subgradient.md",
Expand Down
1 change: 1 addition & 0 deletions docs/src/about.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ The following people contributed
* [Constantin Ahlmann-Eltze](https://const-ae.name) implemented the [gradient and differential `check` functions](helpers/checks.md)
* [Renée Dornig](https://github.com/r-dornig) implemented the [particle swarm](solvers/particle_swarm.md), the [Riemannian Augmented Lagrangian Method](solvers/augmented_Lagrangian_method.md), the [Exact Penalty Method](solvers/exact_penalty_method.md), as well as the [`NonmonotoneLinesearch`](@ref)
* [Willem Diepeveen](https://www.maths.cam.ac.uk/person/wd292) implemented the [primal-dual Riemannian semismooth Newton](solvers/primal_dual_semismooth_Newton.md) solver.
* [Hajg Jasa](https://www.ntnu.edu/employees/hajg.jasa) implemented the [convex bundle method](solvers/convex_bundle_method.md) and the [proximal bundle method](solvers/proximal_bundle_method.md).
* Even Stephansen Kjemsås contributed to the implementation of the [Frank Wolfe Method](solvers/FrankWolfe.md) solver
* Mathias Ravn Munkvold contributed most of the implementation of the [Adaptive Regularization with Cubics](solvers/adaptive-regularization-with-cubics.md) solver
* [Tom-Christian Riemer](https://www.tu-chemnitz.de/mathematik/wire/mitarbeiter.php) implemented the [trust regions](solvers/trust_regions.md) and [quasi Newton](solvers/quasi_Newton.md) solvers.
Expand Down
20 changes: 20 additions & 0 deletions docs/src/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,15 @@ @article{BergmannHerzogSilvaLouzeiroTenbrinckVidalNunez:2021
VOLUME = {21},
}

@article{BergmannHerzogJasa:2024,
AUTHOR = {Bergmann, Ronny and Herzog, Roland and Jasa, Hajg},
JOURNAL = {preprint},
EPRINT = {2402.13670},
EPRINTTYPE = {arXiv},
TITLE = {The Riemannian Convex Bundle Method},
YEAR = {2024},
}

@article{BergmannLausSteidlWeinmann:2014:1,
AUTHOR = {Bergmann, Ronny and Laus, Friederike and Steidl, Gabriele and Weinmann, Andreas},
EPRINT = {1405.5349},
Expand Down Expand Up @@ -415,6 +424,17 @@ @article{HestenesStiefel:1952
VOLUME = {49},
YEAR = {1952}
}
@article{HoseiniMonjeziNobakhtianPouryayevali:2021,
AUTHOR = {Hoseini Monjezi, Najmeh and Nobakhtian, Soghra and Pouryayevali, Mohamad Reza},
DOI = {10.1093/imanum/drab091},
JOURNAL = {IMA Journal of Numerical Analysis},
NUMBER = {1},
PAGES = {293–325},
PUBLISHER = {Oxford University Press (OUP)},
TITLE = {A proximal bundle algorithm for nonsmooth optimization on Riemannian manifolds},
VOLUME = {43},
YEAR = {2023},
}
@phdthesis{Huang:2014,
AUTHOR = {Huang, W.},
SCHOOL = {Flordia State University},
Expand Down
44 changes: 44 additions & 0 deletions docs/src/solvers/convex_bundle_method.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# [Convex Bundle Method](@id ConvexBundleMethodSolver)

```@meta
CurrentModule = Manopt
```

```@docs
convex_bundle_method
convex_bundle_method!
```

## State

```@docs
ConvexBundleMethodState
```

## Stopping Criteria
```@docs
StopWhenLagrangeMultiplierLess
```

## Debug Functions

```@docs
DebugWarnIfLagrangeMultiplierIncreases
```

## Helpers and internal functions

```@docs
convex_bundle_method_subsolver
sectional_curvature
ζ_1
ζ_2
close_point
```

## Literature

```@bibliography
Pages = ["convex_bundle_method.md"]
Canonical=false
```
2 changes: 2 additions & 0 deletions docs/src/solvers/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ The following algorithms are currently available
[Augmented Lagrangian Method](augmented_Lagrangian_method.md) | [`augmented_Lagrangian_method`](@ref), [`AugmentedLagrangianMethodState`](@ref) | ``f``, ``\operatorname{grad} f``, ``g``, ``\operatorname{grad} g_i``, ``h``, ``\operatorname{grad} h_j`` |
[Chambolle-Pock](ChambollePock.md) | [`ChambollePock`](@ref), [`ChambollePockState`](@ref) (using [`TwoManifoldProblem`](@ref)) | ``f=F+G(Λ\cdot)``, ``\operatorname{prox}_{σ F}``, ``\operatorname{prox}_{τ G^*}``, ``Λ`` |
[Conjugate Gradient Descent](conjugate_gradient_descent.md) | [`conjugate_gradient_descent`](@ref), [`ConjugateGradientDescentState`](@ref) | ``f``, ``\operatorname{grad} f``
[Convex Bundle Method](convex_bundle_method.md) | [`convex_bundle_method`](@ref), [`ConvexBundleMethodState`](@ref) | ``f``, ``\partial f``
[Cyclic Proximal Point](cyclic_proximal_point.md) | [`cyclic_proximal_point`](@ref), [`CyclicProximalPointState`](@ref) | ``f=\sum f_i``, ``\operatorname{prox}_{\lambda f_i}`` |
[Difference of Convex Algorithm](@ref solver-difference-of-convex) | [`difference_of_convex_algorithm`](@ref), [`DifferenceOfConvexState`](@ref) | ``f=g-h``, ``∂h``, and for example ``g``, ``\operatorname{grad} g`` |
[Difference of Convex Proximal Point](@ref solver-difference-of-convex-proximal-point) | [`difference_of_convex_proximal_point`](@ref), [`DifferenceOfConvexProximalState`](@ref) | ``f=g-h``, ``∂h``, and for example ``g``, ``\operatorname{grad} g`` |
Expand All @@ -29,6 +30,7 @@ The following algorithms are currently available
[Nelder-Mead](NelderMead.md) | [`NelderMead`](@ref), [`NelderMeadState`](@ref) | ``f``
[Particle Swarm](particle_swarm.md) | [`particle_swarm`](@ref), [`ParticleSwarmState`](@ref) | ``f`` |
[Primal-dual Riemannian semismooth Newton Algorithm](@ref solver-pdrssn) | [`primal_dual_semismooth_Newton`](@ref), [`PrimalDualSemismoothNewtonState`](@ref) (using [`TwoManifoldProblem`](@ref)) | ``f=F+G(Λ\cdot)``, ``\operatorname{prox}_{σ F}`` & diff., ``\operatorname{prox}_{τ G^*}`` & diff., ``Λ``
[Proximal Bundle Method](proximal_bundle_method.md) | [`proximal_bundle_method`](@ref), [`ProximalBundleMethodState`](@ref) | ``f``, ``\partial f``
[Quasi-Newton Method](quasi_Newton.md) | [`quasi_Newton`](@ref), [`QuasiNewtonState`](@ref) | ``f``, ``\operatorname{grad} f`` |
[Steihaug-Toint Truncated Conjugate-Gradient Method](@ref tCG) | [`truncated_conjugate_gradient_descent`](@ref), [`TruncatedConjugateGradientState`](@ref) | ``f``, ``\operatorname{grad} f``, ``\operatorname{Hess} f`` |
[Subgradient Method](subgradient.md) | [`subgradient_method`](@ref), [`SubGradientMethodState`](@ref) | ``f``, ``∂ f`` |
Expand Down
Loading
Loading