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

The Riemannian Interior Point Newton Method #399

Merged
merged 267 commits into from
Aug 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
267 commits
Select commit Hold shift + click to select a range
5c7e985
Reworked structure of code
mstokkenes Apr 20, 2024
820e7dc
Implemented conjugate residual method as abstract solver
mstokkenes Apr 22, 2024
c6726f3
add one comment to the new subsolver.
kellertuer Apr 23, 2024
8557459
Update conjugate_residual.jl
mstokkenes Apr 23, 2024
51d04a9
Modified step_solver! for conjugate residual method
mstokkenes Apr 23, 2024
4269640
Test commit
mstokkenes Apr 23, 2024
2007d63
Combined LHS and RHS function into one function get_Newtons
mstokkenes Apr 25, 2024
b4a1270
Minor formatting improvements
mstokkenes Apr 25, 2024
63a4be9
Add a few comments from todays meeting.
kellertuer Apr 25, 2024
4a3adeb
Added subsolver flexibility
mstokkenes Apr 29, 2024
6b396e5
Add a few comments to discuss tomorrow.
kellertuer Apr 29, 2024
937a907
add a few more comments.
kellertuer Apr 29, 2024
8832bd1
A bit of a rework and some comments.
kellertuer Apr 30, 2024
bafac3e
Add a new idea to the rework to simplify things, that are then less h…
kellertuer Apr 30, 2024
56eb725
Start structural rework on constraint objectives.
kellertuer May 4, 2024
147cf4e
Sketch the idea of a unified vector function objective.
kellertuer May 4, 2024
f56727d
Updating subproblem now works more generically
mstokkenes May 6, 2024
bde4510
Rename the VectorialObjective to a VectorGradientFunction and start i…
kellertuer May 6, 2024
40235f4
Reduce duplicate text.
kellertuer May 6, 2024
c060302
Finish most of the desugn and basic documentation work.
kellertuer May 6, 2024
88d81f1
Apply suggestions from code review
kellertuer May 7, 2024
6862c92
Merge branch 'master' into kellertuer/structural_rework_constraints
kellertuer May 8, 2024
bd3fec3
sketch all variants of the (full) access get_gradients and get_gradie…
kellertuer May 8, 2024
8dcd677
Made sure code runs before meeting :)
mstokkenes May 10, 2024
879e94a
Merge branch 'master' into kellertuer/structural_rework_constraints
mateuszbaran May 10, 2024
4b6eac7
minor fixes
mateuszbaran May 10, 2024
7826cd4
Update src/plans/constrained_plan.jl
mateuszbaran May 10, 2024
f4cc60a
Fix a few typos and improve code a bit.
kellertuer May 10, 2024
a9d15b6
Improve test a bit.
kellertuer May 10, 2024
8c5f0f6
Get arguments to full generality.
kellertuer May 10, 2024
96d89e9
Introduce Feasibility debug
kellertuer May 14, 2024
5c58ec4
Fix two typo, add a missing export
kellertuer May 14, 2024
8cb0379
Sketch new plan with range (similar to domain) being in the Problem.
kellertuer May 15, 2024
718e462
finish gradient index access.
kellertuer May 15, 2024
2cb0ac3
finish work for today.
kellertuer May 15, 2024
0b98891
A bit of vale improvements.
kellertuer May 16, 2024
919f008
add a few commants.
kellertuer May 17, 2024
57523b0
Refactor
kellertuer May 17, 2024
d8b2a06
A bit of vale improvements.
kellertuer May 18, 2024
0cf98d6
Implement more generic index access.
kellertuer May 18, 2024
3a57084
Refactor inequality and equality access functions for the objective.
kellertuer May 18, 2024
04dc9e4
Fix a few bugs in types (from the time where the VecFun was still an …
kellertuer May 18, 2024
c7a8c48
remove a few prints.
kellertuer May 18, 2024
3c4b9b5
Fix most of the tests.
kellertuer May 19, 2024
c4169fe
rename one further test.
kellertuer May 19, 2024
360bc99
Implement an additiona-Decrease_condition for Armijo.
kellertuer May 20, 2024
727d68c
Fix a few more tests and introduce some high-level parts.
kellertuer May 20, 2024
67f2a7f
fix EPM and half of ALM
mateuszbaran May 20, 2024
e2de6ff
fix ALM
mateuszbaran May 20, 2024
6095c3e
another small convenience fix.
kellertuer May 20, 2024
ff2418e
A bit of code refinements and started working on the count interactions.
kellertuer May 21, 2024
7524287
Resolve an Aqua error and another set of warnings.
kellertuer May 21, 2024
82f2bd5
Fix a few easier bugs and typos.
kellertuer May 21, 2024
e02b0d6
Update test/plans/test_constrained_plan.jl
kellertuer May 21, 2024
76856f8
rename `get-cost` to `get_value` for the `VectorGradientFunction`.
kellertuer May 21, 2024
b6d77e1
Change show() for the constrained objective.
kellertuer May 21, 2024
c242b1d
Und mühsam ernährt sich das Eichhörnchen.
kellertuer May 21, 2024
dfc0bd4
fix some cases of get_gradient!
mateuszbaran May 21, 2024
45e3eab
docs for `to_iterable_indices`
mateuszbaran May 22, 2024
9e871dd
Implemented InteriorPointLinesearch
mstokkenes May 22, 2024
b87e6d3
Merge branch 'RIPM' of https://github.com/mstokkenes/Manopt.jl into RIPM
mstokkenes May 22, 2024
1f57b8b
Base.length but why?
mateuszbaran May 22, 2024
2d669a3
Maybe fix julia 1.9? No clue why the other Base methods to not need t…
kellertuer May 22, 2024
862b71f
Merge branch 'kellertuer/structural_rework_constraints' of github.com…
kellertuer May 22, 2024
8f8b2ab
depwarn
mateuszbaran May 22, 2024
52bec6c
Remove a bit of unnecessary Code.
kellertuer May 23, 2024
807c020
Fix tests.
kellertuer May 23, 2024
f18716b
A bit of work on the docs.
kellertuer May 23, 2024
bbb6d24
Update and fix documentation.
kellertuer May 23, 2024
500f9a8
Fixed bugs, algorithm runs now
mstokkenes May 24, 2024
c8ee68b
First sketch idea with new indices?
kellertuer May 24, 2024
23f2c7b
Moved InteriorPointState definition into interior_point_Newton_plan-jl
mstokkenes May 24, 2024
e22ff44
Additional conditions for ArmijoLinesearch added again
mstokkenes May 24, 2024
c822291
Implement the additional test functions.
kellertuer May 24, 2024
f5c3fcd
Merge branch 'master' into mstokkenes/RIPM
kellertuer May 24, 2024
1c87970
checks in a change to use the vector representation of gradients.
kellertuer May 24, 2024
9a97bc2
some fixes
mateuszbaran May 26, 2024
3a4c624
A bit of vale.
kellertuer May 26, 2024
570a381
Merge branch 'kellertuer/structural_rework_constraints' of github.com…
kellertuer May 26, 2024
956020d
introduce two further length methods.
kellertuer May 26, 2024
b82f792
Carefully implement all extended cache functions for constrained obje…
kellertuer May 26, 2024
667781d
Implement the new constraint adressing also for count.
kellertuer May 26, 2024
4c0a7b5
Update docs.
kellertuer May 26, 2024
a47fc9f
Replace X[pM, k] with the corresponding _write. Runs formatter.
kellertuer May 26, 2024
6645647
📈
kellertuer May 26, 2024
352f4d6
📈VectorGradientFunction
kellertuer May 26, 2024
83a674c
move an unnecessary function.
kellertuer May 26, 2024
9bf1f1a
Add one further test.
kellertuer May 26, 2024
4f59cee
runs formatter.
kellertuer May 26, 2024
7803ce3
A bit of vale.
kellertuer May 26, 2024
230a0dc
Finally tricked vale into working fine.
kellertuer May 27, 2024
ee973e7
📈VGF
kellertuer May 27, 2024
a28d6b6
📈📈 Cache & Count
kellertuer May 27, 2024
6c84006
Fix a typo tweak vale a bit.
kellertuer May 27, 2024
605d631
Hitting a few more cache misses.
kellertuer May 27, 2024
5392012
Refactor tests a bit and hopefully trigger the last few cache misses.
kellertuer May 27, 2024
d85a3dd
Add the range to the constraint algorithms high level interfaces.
kellertuer May 28, 2024
3fd11d9
Update Changelog.
kellertuer May 28, 2024
333978d
Fix a final todo.
kellertuer May 28, 2024
283dd83
Fixed error in GradMeritFunction
mstokkenes May 30, 2024
60576f6
Fix a small error in the inplace gradient.
kellertuer May 30, 2024
a24f0be
Merge branch 'RIPM' of https://github.com/mstokkenes/Manopt.jl into RIPM
mstokkenes May 30, 2024
354564f
Add an update of the indernal gradient stoarage.
kellertuer May 30, 2024
9fe11cb
Merge branch 'RIPM' of github.com:mstokkenes/Manopt.jl into mstokkene…
kellertuer May 30, 2024
0a76464
Adds a gradient check.
kellertuer May 30, 2024
7464ee5
Addds a nicer form of Mertit function.s
kellertuer May 30, 2024
6a1f021
Hint for the info
kellertuer May 30, 2024
f84bd8a
Updated GradMeritFunction
mstokkenes May 31, 2024
082c5f4
Sketch Hessian vector function.
kellertuer Jun 1, 2024
b0cc6d1
Introduce next higher level functions in the objeective.
kellertuer Jun 1, 2024
deee504
Update src/plans/vectorial_plan.jl
kellertuer Jun 1, 2024
4ccecc3
frmps.
kellertuer Jun 1, 2024
599994d
Merge branch 'kellertuer/structural_rework_constraints' of github.com…
kellertuer Jun 1, 2024
c54eb1a
Merge branch 'kellertuer/structural_rework_constraints' into mstokken…
kellertuer Jun 1, 2024
192a3a8
extend Constructor
kellertuer Jun 1, 2024
2526b15
adapt IPNewton.
kellertuer Jun 1, 2024
33a4e5f
extend Constructor
kellertuer Jun 1, 2024
c33319a
Fixed constraint Hessians and incorporated them into the code
mstokkenes Jun 1, 2024
66563d0
Fix ambiguities by being super super super precise in parameters.
kellertuer Jun 2, 2024
b915b8f
Fix / extend documenation.
kellertuer Jun 2, 2024
3766451
Fix a few bugs.
kellertuer Jun 2, 2024
910ac32
Fix a few bugs.
kellertuer Jun 2, 2024
c5092be
Merge branch 'kellertuer/structural_rework_constraints' into mstokken…
kellertuer Jun 2, 2024
fb364c0
Fixed constraint Hessian and GradMeritFunction
mstokkenes Jun 2, 2024
9be242d
Fixed bug in step_solver
mstokkenes Jun 6, 2024
cbfdb76
Fixed bugs in some calculations
mstokkenes Jun 16, 2024
1c30067
Merge branch 'mstokkenes/RIPM' into mstokkenes/RIPM2
kellertuer Jun 28, 2024
88e9389
Merge branch 'master' into mstokkenes/RIPM2
kellertuer Jun 28, 2024
96c0839
Refactor to use the VectorialHessianFunction.
kellertuer Jun 28, 2024
f05fabe
Move Hessian of constraints to the objective, setup documentation pag…
kellertuer Jun 28, 2024
d932e07
Fix a few bugs from yesterdays restructure, so the test does the same…
kellertuer Jun 29, 2024
e02f9c1
add the two new authors to accepted.txt
kellertuer Jun 29, 2024
b76b26c
remove some comments.
kellertuer Jul 2, 2024
3022527
Implement an a bit more detailed feasibility check.
kellertuer Jul 5, 2024
217ea7c
allow closed form subsolvers.
kellertuer Jul 5, 2024
7b87f57
Add DebugFeasibility.
kellertuer Jul 5, 2024
f837c45
Further Aqua.jl fixes.
kellertuer Jul 5, 2024
c011371
Fix ambiguities.
kellertuer Jul 5, 2024
bc7fd14
Start some work on the documentation as well as some refactoring.
kellertuer Jul 5, 2024
03b9107
Fix a typo and make a reference more precise.
kellertuer Jul 5, 2024
3e7aebd
add a few smaller notes.
kellertuer Jul 6, 2024
07c5db5
Add Markus.
kellertuer Jul 6, 2024
01f7073
Carefully document and reimplement the linear system of the sub probl…
kellertuer Jul 7, 2024
c97d1c5
Implement the Lagrangian, its Gradient and Hessian for ease of use.
kellertuer Jul 8, 2024
2e62eee
ponder a bit about names, start refactoring Conjugate Residual.
kellertuer Jul 8, 2024
f3f8a60
Change Markus entry in the about page.
kellertuer Jul 8, 2024
cfe02da
Refine docs.
kellertuer Jul 8, 2024
87424b0
Fix that the default euclidean space also works if Manifolds.jl is no…
kellertuer Jul 9, 2024
fcb1b6d
Implement the KKT vector field
kellertuer Jul 9, 2024
3f1a88d
Finish checking and rewriting all helper functions
kellertuer Jul 9, 2024
a3114e4
Fix a few typos
kellertuer Jul 9, 2024
bb4c172
A bit more rework.
kellertuer Jul 10, 2024
2763285
Fix residual code.
kellertuer Jul 10, 2024
5671139
A bit more. of a rework, not yet finished on the b side.
kellertuer Jul 10, 2024
893032c
hm, now I have a sign error somewhere. Next step. Debug the residual …
kellertuer Jul 10, 2024
d3fffcb
twiddle a bit with signs.
kellertuer Jul 11, 2024
9e6b4e2
Finally fixes the sign error. We now do solve A[X]+b=0.
kellertuer Jul 11, 2024
0cf5b0c
adapt and improve tests.
kellertuer Jul 11, 2024
d662e4f
Improve stopping criterion, more testing and documentation.
kellertuer Jul 11, 2024
89128d3
Fix initialisation (yet again).
kellertuer Jul 11, 2024
cc246ef
Finish documentation for the subsolver.
kellertuer Jul 11, 2024
74ef214
Fix documentation, first steps debugging IPN.
kellertuer Jul 11, 2024
3b9888b
Refactor IPN.
kellertuer Jul 11, 2024
f8a1382
Further rework of the stepsize.
kellertuer Jul 11, 2024
c0b342b
Replace the Linesearch to also use Armijo.
kellertuer Jul 11, 2024
53a25a0
Further testing.
kellertuer Jul 12, 2024
bc63c52
Fix tests I started yesterday.
kellertuer Jul 13, 2024
a7f1816
Remove further old code, revise tests.
kellertuer Jul 13, 2024
da208a7
Fix more tests.
kellertuer Jul 13, 2024
cd93e85
Start testing all the new KKT-related functions.
kellertuer Jul 14, 2024
bf52265
Debug the Vector fields (Part 2)
kellertuer Jul 14, 2024
91b0db3
Slightly refactor and test/check all KKT functions
kellertuer Jul 14, 2024
bd2b12a
Revise all KKT and their compressed analogues to be defined on the co…
kellertuer Jul 14, 2024
4a75cd8
Fix the defaults.
kellertuer Jul 14, 2024
6b1f1c0
forgit to run formatter
kellertuer Jul 14, 2024
cb9ec8f
Finish docu, add IPNewton to tests already.
kellertuer Jul 14, 2024
465b0b7
fix a typo.
kellertuer Jul 14, 2024
c715a7e
Start the easy part of testing the constrained system, that can be do…
kellertuer Jul 20, 2024
be3f8d3
a few more checks in test.
kellertuer Jul 21, 2024
b8abb7c
Further fixes.
kellertuer Jul 21, 2024
3f8993d
Verify the condensed KKT field
kellertuer Jul 21, 2024
97738ed
update two code positions.
kellertuer Jul 21, 2024
118e68b
an interims commit that started debugging the overall algorithm.
kellertuer Jul 24, 2024
6b21c34
Fix general stepsize approach – solcing the LGS still seems to be wrong.
kellertuer Jul 24, 2024
aa11506
Fix two calls.
kellertuer Jul 24, 2024
25022b1
Fix a (stupid) typo
kellertuer Jul 28, 2024
2ab00e9
add an even simpler method.
kellertuer Jul 28, 2024
b2a519a
further work on the new test.
kellertuer Jul 28, 2024
c48a89e
Further small fixes, not yet there.
kellertuer Jul 29, 2024
2fc652d
Fix another small bug and extend the simple example
kellertuer Jul 29, 2024
693c7c0
make simple test runnable.
kellertuer Jul 29, 2024
124b7dd
fix?
mateuszbaran Jul 29, 2024
70027bf
fix broken test
mateuszbaran Jul 29, 2024
329e459
Fix the test as well.
kellertuer Jul 29, 2024
2a3c486
Add an update for γ in the centrality condition and a new Residual st…
kellertuer Jul 30, 2024
3a750f1
Improve subsolver stopping criterion.
kellertuer Jul 30, 2024
80487c1
Everything works and we are feature complete!
kellertuer Jul 30, 2024
fec1dd8
Merge branch 'master' into kellertuer/riemannian-interior-point
kellertuer Jul 30, 2024
49eb5fa
Fix tests.
kellertuer Jul 30, 2024
ea645ec
Update src/plans/conjugate_residual_plan.jl
kellertuer Jul 30, 2024
a1f96d0
Improve documentation.
kellertuer Jul 30, 2024
d9e0a23
Test Coverage, Documentation, Changelog.
kellertuer Jul 30, 2024
db45ff1
Add tests for the conjugate residual plan parts.
kellertuer Jul 30, 2024
3867c97
fix a typo to improve test coverage.
kellertuer Jul 30, 2024
7827141
Make conjugate_residual a bit faster
mateuszbaran Jul 30, 2024
7fc67fd
Apply suggestions from code review
kellertuer Jul 30, 2024
befcee6
Introduce a supertype for Lagrangian, improve presentation by highlig…
kellertuer Jul 30, 2024
fd07ee8
add more detailed change log.
kellertuer Jul 30, 2024
562c712
Fix a link.
kellertuer Jul 30, 2024
69f7dea
improve docs.
kellertuer Jul 30, 2024
a1948a6
Work on code coverage, memory management and the newton plan docs.
kellertuer Jul 31, 2024
d90f317
Finish code cov on the IPNewton plan.
kellertuer Jul 31, 2024
00e2c81
Simplify code.
kellertuer Jul 31, 2024
be47043
Further work on the documentation.
kellertuer Jul 31, 2024
ba24c91
Finish documentation, fix a math bug in the centrality condition
kellertuer Jul 31, 2024
8b2e0b7
Fix tests.
kellertuer Jul 31, 2024
fc86b74
Fix a small bug, add Markus to contributors.
kellertuer Jul 31, 2024
8c2a318
Runs formatter.
kellertuer Jul 31, 2024
4b1ede5
The IPN on p::Number seems to be very tricky, since the product manif…
kellertuer Jul 31, 2024
f0783c4
implement ClosedFormSubSolverState
mateuszbaran Jul 31, 2024
558dc38
extend closed-form subsolver cleanup
mateuszbaran Jul 31, 2024
d9b4bb9
reactivate debug output for now – might need other coverage – test wi…
kellertuer Jul 31, 2024
b2cd94b
Merge branch 'kellertuer/riemannian-interior-point' of github.com:Jul…
kellertuer Jul 31, 2024
ebabe51
Adapt test without CC.
kellertuer Jul 31, 2024
5f7b17c
Add a reference.
kellertuer Aug 1, 2024
f5a5fba
change default of centrality check, deactivate debug on solver run.
kellertuer Aug 1, 2024
e37b456
Test coverage
kellertuer Aug 1, 2024
f801ba8
Update src/solvers/interior_point_Newton.jl
kellertuer Aug 1, 2024
a42345a
fix and shorten code for ALM.
kellertuer Aug 1, 2024
bba3a1e
Apply suggestions from code review
kellertuer Aug 1, 2024
b1d3703
Runs formatter, complete changelog.
kellertuer Aug 1, 2024
33a9e74
simplify EPM constructor.
kellertuer Aug 1, 2024
6858439
Remove a version that is no longer needed.
kellertuer Aug 1, 2024
2d06668
Adapt CBM.
kellertuer Aug 1, 2024
d89a75a
Just missed Aqua.
kellertuer Aug 1, 2024
9b963bd
Adapt PBM.
kellertuer Aug 1, 2024
63ee28f
adapt DC
mateuszbaran Aug 1, 2024
d9961ab
Adapt ARC.
kellertuer Aug 1, 2024
b333d6f
Merge branch 'kellertuer/riemannian-interior-point' of github.com:Jul…
kellertuer Aug 1, 2024
ab0bb15
fix Aqua DC.
kellertuer Aug 1, 2024
505145a
adapt TR
mateuszbaran Aug 1, 2024
409cf2b
some _p
mateuszbaran Aug 1, 2024
68e3aac
Improve closed form state constructor and test it
kellertuer Aug 1, 2024
fed5218
Merge branch 'kellertuer/riemannian-interior-point' of github.com:Jul…
kellertuer Aug 1, 2024
1086a6e
Forgot to save – and that the closed form state is not exported (whic…
kellertuer Aug 1, 2024
02193a2
runs formatter (it's late).
kellertuer Aug 1, 2024
84532ee
Fix about text.
kellertuer Aug 1, 2024
f9e3814
a few small improvements
mateuszbaran Aug 2, 2024
d69a90b
Fix the changelog.
kellertuer Aug 2, 2024
21535f1
Merge branch 'kellertuer/riemannian-interior-point' of github.com:Jul…
kellertuer Aug 2, 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
5 changes: 5 additions & 0 deletions .zenodo.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@
"name": "Kjemsås, Even Stephansen",
"type": "ProjectMember"
},
{
"affiliation": "NTNU Trondheim",
"name": "Stokkenes, Markus A.",
"type": "ProjectMember"
},
{
"name": "Daniel VandenHeuvel",
"type": "other",
Expand Down
18 changes: 18 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,24 @@ 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.68] – August 2, 2024

### Added

* an Interior Point Newton Method, the `interior_point_newton`
* a `conjugate_residual` Algorithm to solve a linear system on a tangent space.
* `ArmijoLinesearch` now allows for additional `additional_decrease_condition` and `additional_increase_condition` keywords to add further conditions to accept additional conditions when to accept an decreasing or increase of the stepsize.
* add a `DebugFeasibility` to have a debug print about feasibility of points in constrained optimisation employing the new `is_feasible` function
* add a `InteriorPointCentralityCondition` check that can be added for step candidates within the line search of `interior_point_newton`
* Add Several new functors
* the `LagrangianCost`, `LagrangianGradient`, `LagrangianHessian`, that based on a constrained objective allow to construct the hessian objective of its Lagrangian
* the `CondensedKKTVectorField` and its `CondensedKKTVectorFieldJacobian`, that are being used to solve a linear system within `interior_point_newton`
* the `KKTVectorField` as well as its `KKTVectorFieldJacobian` and ``KKTVectorFieldAdjointJacobian`
* the `KKTVectorFieldNormSq` and its `KKTVectorFieldNormSqGradient` used within the Armijo line search of `interior_point_newton`
* New stopping criteria
* A `StopWhenRelativeResidualLess` for the `conjugate_residual`
* A `StopWhenKKTResidualLess` for the `interior_point_newton`

## [0.4.67] – July 25, 2024

### Added
Expand Down
2 changes: 1 addition & 1 deletion 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.67"
version = "0.4.68"

[deps]
ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
Expand Down
2 changes: 2 additions & 0 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -168,13 +168,15 @@ makedocs(;
"Chambolle-Pock" => "solvers/ChambollePock.md",
"CMA-ES" => "solvers/cma_es.md",
"Conjugate gradient descent" => "solvers/conjugate_gradient_descent.md",
"Conjugate Residual" => "solvers/conjugate_residual.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",
"Exact Penalty Method" => "solvers/exact_penalty_method.md",
"Frank-Wolfe" => "solvers/FrankWolfe.md",
"Gradient Descent" => "solvers/gradient_descent.md",
"Interior Point Newton" => "solvers/interior_point_Newton.md",
"Levenberg–Marquardt" => "solvers/LevenbergMarquardt.md",
"Nelder–Mead" => "solvers/NelderMead.md",
"Particle Swarm Optimization" => "solvers/particle_swarm.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 @@ -11,6 +11,7 @@ The following people contributed
* 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.
* [Markus A. Stokkenes](https://www.linkedin.com/in/markus-a-stokkenes-b41bba17b/) contributed most of the implementation of the [Interior Point Newton Method](solvers/interior_point_Newton.md)
* [Manuel Weiss](https://scoop.iwr.uni-heidelberg.de/author/manuel-weiß/) implemented most of the [conjugate gradient update rules](@ref cg-coeffs)

as well as various [contributors](https://github.com/JuliaManifolds/Manopt.jl/graphs/contributors) providing small extensions, finding small bugs and mistakes and fixing them by opening [PR](https://github.com/JuliaManifolds/Manopt.jl/pulls)s.
Expand Down
8 changes: 8 additions & 0 deletions docs/src/extensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@ Manopt.max_stepsize(::TangentBundle, ::Any)
mid_point
```

Internally, `Manopt.jl` provides the two additional functions to choose some
Euclidean space when needed as

```@docs
Manopt.Rn
Manopt.Rn_default
```

## JuMP.jl

Manopt can be used using the [JuMP.jl](https://github.com/jump-dev/JuMP.jl) interface.
Expand Down
19 changes: 18 additions & 1 deletion docs/src/plans/objective.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,16 @@ It might be beneficial to use the adapted problem to specify different ranges fo
ConstrainedManoptProblem
```

as well as the helper functions

```@docs
AbstractConstrainedFunctor
AbstractConstrainedSlackFunctor
LagrangianCost
LagrangianGradient
LagrangianHessian
```

#### Access functions

```@docs
Expand All @@ -223,9 +233,16 @@ get_grad_equality_constraint
get_grad_inequality_constraint
get_hess_equality_constraint
get_hess_inequality_constraint
is_feasible
```

#### Internal functions

```@docs
Manopt.get_feasibility_status
```

### A vectorial cost function
### Vectorial objectives

```@docs
Manopt.AbstractVectorFunction
Expand Down
7 changes: 7 additions & 0 deletions docs/src/plans/stepsize.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ Tangent bundle with the Sasaki metric has 0 injectivity radius, so the maximum s
`Hyperrectangle` also has 0 injectivity radius and an estimate based on maximum of dimensions along each index is used instead.
For manifolds with corners, however, a line search capable of handling break points along the projected search direction should be used, and such algorithms do not call `max_stepsize`.

Some solvers have a different iterate from the one used for linesearch. Then the following state can be used to wrap
these locally

```@docs
StepsizeState
```

## Literature

```@bibliography
Expand Down
22 changes: 22 additions & 0 deletions docs/src/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,16 @@ @article{DuranMoelleSbertCremers:2016
% --- E
%
%
@article{El-BakryTapiaTsuchiyaZhang:1996,
AUTHOR = {El-Bakry, A. S. and Tapia, R. A. and Tsuchiya, T. and Zhang, Y.},
DOI = {10.1007/bf02275347},
JOURNAL = {Journal of Optimization Theory and Applications},
NUMBER = {3},
PAGES = {507–541},
TITLE = {On the formulation and theory of the Newton interior-point method for nonlinear programming},
VOLUME = {89},
YEAR = {1996}
}

% --- F
%
Expand Down Expand Up @@ -532,6 +542,18 @@ @article{Karcher:1977
% --- L
%
%
@article{LaiYoshise:2024,
AUTHOR = {Lai, Zhijian and Yoshise, Akiko},
DOI = {10.1007/s10957-024-02403-8},
EPRINT = {2203.09762},
EPRINTTYPE = {arXiv},
JOURNAL = {Journal of Optimization Theory and Applications},
NUMBER = {1},
PAGES = {433–469},
TITLE = {Riemannian Interior Point Methods for Constrained Optimization on Manifolds},
VOLUME = {201},
YEAR = {2024}
}
@article{LausNikolovaPerschSteidl:2017,
AUTHOR = {Laus, F. and Nikolova, M. and Persch, J. and Steidl, G.},
YEAR = {2017},
Expand Down
34 changes: 34 additions & 0 deletions docs/src/solvers/conjugate_residual.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Conjugate Residual Solver in a Tangent space

```@meta
CurrentModule = Manopt
```

```@docs
conjugate_residual
```

## State

```@docs
ConjugateResidualState
```

## Objetive

```@docs
SymmetricLinearSystemObjective
```

## Additional stopping criterion

```@docs
StopWhenRelativeResidualLess
```

## Literature

```@bibliography
Pages = ["conjugate_residual.md"]
Canonical=false
```
21 changes: 19 additions & 2 deletions docs/src/solvers/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,24 @@ For these you can use

* The [Augmented Lagrangian Method](augmented_Lagrangian_method.md) (ALM), where both `g` and `grad_g` as well as `h` and `grad_h` are keyword arguments, and one of these pairs is mandatory.
* The [Exact Penalty Method](exact_penalty_method.md) (EPM) uses a penalty term instead of augmentation, but has the same interface as ALM.
* The [Interior Point Newton Method](interior_point_Newton.md) (IPM) rephrases the KKT system of a constrained problem into an Newton iteration being performed in every iteration.
* [Frank-Wolfe algorithm](FrankWolfe.md), where besides the gradient of ``f`` either a closed form solution or a (maybe even automatically generated) sub problem solver for ``\operatorname*{arg\,min}_{q ∈ C} ⟨\operatorname{grad} f(p_k), \log_{p_k}q⟩`` is required, where ``p_k`` is a fixed point on the manifold (changed in every iteration).

# Alphabetical list List of algorithms
## On the tangent space

* [Conjugate Residual](conjugate_residual.md) a solver for a linear system ``\mathcal A[X] + b = 0`` on a tangent space.
* [Steihaug-Toint Truncated Conjugate-Gradient Method](truncated_conjugate_gradient_descent.md) a solver for a constrained problem defined on a tangent space.


## Alphabetical list List of algorithms

| Solver | Function | State |
|:---------|:----------------|:---------|
| [Adaptive Regularisation with Cubics](adaptive-regularization-with-cubics.md) | [`adaptive_regularization_with_cubics`](@ref) | [`AdaptiveRegularizationState`](@ref) |
| [Augmented Lagrangian Method](augmented_Lagrangian_method.md) | [`augmented_Lagrangian_method`](@ref) | [`AugmentedLagrangianMethodState`](@ref) |
| [Chambolle-Pock](ChambollePock.md) | [`ChambollePock`](@ref) | [`ChambollePockState`](@ref) |
| [Conjugate Gradient Descent](conjugate_gradient_descent.md) | [`conjugate_gradient_descent`](@ref) | [`ConjugateGradientDescentState`](@ref) |
| [Conjugate Residual](conjugate_residual.md) | [`conjugate_residual`](@ref) | [`ConjugateResidualState`](@ref) |
| [Convex Bundle Method](convex_bundle_method.md) | [`convex_bundle_method`](@ref) | [`ConvexBundleMethodState`](@ref) |
| [Cyclic Proximal Point](cyclic_proximal_point.md) | [`cyclic_proximal_point`](@ref) | [`CyclicProximalPointState`](@ref) |
| [Difference of Convex Algorithm](@ref solver-difference-of-convex) | [`difference_of_convex_algorithm`](@ref) | [`DifferenceOfConvexState`](@ref) |
Expand All @@ -106,6 +114,7 @@ For these you can use
| [Exact Penalty Method](exact_penalty_method.md) | [`exact_penalty_method`](@ref) | [`ExactPenaltyMethodState`](@ref) |
| [Frank-Wolfe algorithm](FrankWolfe.md) | [`Frank_Wolfe_method`](@ref) | [`FrankWolfeState`](@ref) |
| [Gradient Descent](gradient_descent.md) | [`gradient_descent`](@ref) | [`GradientDescentState`](@ref) |
| [Interior Point Newton](interior_point_Newton.md) | [`interior_point_Newton`](@ref) | |
| [Levenberg-Marquardt](LevenbergMarquardt.md) | [`LevenbergMarquardt`](@ref) | [`LevenbergMarquardtState`](@ref) | ``f = \sum_i f_i`` ``\operatorname{grad} f_i`` (Jacobian)|
| [Nelder-Mead](NelderMead.md) | [`NelderMead`](@ref) | [`NelderMeadState`](@ref) |
| [Particle Swarm](particle_swarm.md) | [`particle_swarm`](@ref) | [`ParticleSwarmState`](@ref) |
Expand Down Expand Up @@ -189,4 +198,12 @@ also use the third (lowest level) and just call

```
solve!(problem, state)
```
```

### Closed-form subsolvers

If a subsolver solution is available in closed form, `ClosedFormSubSolverState` is used to indicate that.

```@docs
Manopt.ClosedFormSubSolverState
```
48 changes: 48 additions & 0 deletions docs/src/solvers/interior_point_Newton.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Interior Point Newton method

```@meta
CurrentModule = Manopt
```

```@docs
interior_point_Newton
interior_point_Newton!
```

## State

```@docs
InteriorPointNewtonState
```

## Subproblem functions

```@docs
CondensedKKTVectorField
CondensedKKTVectorFieldJacobian
KKTVectorField
KKTVectorFieldJacobian
KKTVectorFieldAdjointJacobian
KKTVectorFieldNormSq
KKTVectorFieldNormSqGradient
```

## Helpers

```@docs
InteriorPointCentralityCondition
Manopt.calculate_σ
```

## Additional stopping criteria

```@docs
StopWhenKKTResidualLess
```

## References

```@bibliography
Pages = ["interior_point_Newton.md"]
Canonical=false
```
2 changes: 2 additions & 0 deletions docs/styles/config/vocabularies/Manopt/accept.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ Jasa
Jax
JuMP.jl
kwargs
Lai
Levenberg
Lagrangian
Lanczos
Expand Down Expand Up @@ -112,5 +113,6 @@ tridiagonal
Weinmann
Willem
Wolfe
Yoshise
Yuan
Zhang
6 changes: 5 additions & 1 deletion ext/ManoptManifoldsExt/ManoptManifoldsExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import Manopt:
get_gradient!,
set_manopt_parameter!,
reflect,
reflect!
reflect!,
Rn,
Rn_default
using LinearAlgebra: cholesky, det, diag, dot, Hermitian, qr, Symmetric, triu, I, Diagonal
import ManifoldsBase: copy, mid_point, mid_point!

Expand All @@ -24,6 +26,8 @@ else
using ..Manifolds
end

Rn(::Val{:Manifolds}, args...; kwargs...) = Euclidean(args...; kwargs...)

const NONMUTATINGMANIFOLDS = Union{Circle,PositiveNumbers,Euclidean{Tuple{}}}
include("manifold_functions.jl")
include("ChambollePockManifolds.jl")
Expand Down
Loading
Loading