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

Add proximal ADMM solvers #371

Merged
merged 88 commits into from
Dec 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
c60c5bf
Add reference
bwohlberg Aug 29, 2022
c36c783
Merge branch 'main' into brendt/padmm
bwohlberg Sep 4, 2022
27382df
Work in progress on NonLinearPADMM
bwohlberg Sep 5, 2022
c8c65ab
Docstring fixes
bwohlberg Sep 5, 2022
1ba74de
Docstring fixes
bwohlberg Sep 5, 2022
b603e6e
Merge branch 'main' into brendt/padmm
bwohlberg Sep 8, 2022
3633f66
Add flexible partial function creation function
bwohlberg Sep 10, 2022
a9bcf5a
Merge branch 'main' into brendt/padmm
bwohlberg Sep 10, 2022
098769d
Add Function class
bwohlberg Sep 11, 2022
69e7c0d
Merge branch 'main' into brendt/padmm
bwohlberg Sep 23, 2022
c8771cf
Various fixes
bwohlberg Oct 9, 2022
9c30574
Typo fix
bwohlberg Oct 9, 2022
5960624
Add function supporting jvp with Hermitian transpose
bwohlberg Oct 9, 2022
0aae82a
Add algorithm iterations
bwohlberg Oct 9, 2022
7a398c3
Bug fix
bwohlberg Oct 9, 2022
1577943
Merge branch 'main' into brendt/padmm
bwohlberg Oct 12, 2022
08b2788
Initial version of example script
bwohlberg Oct 20, 2022
3a49baa
Docs improvements
bwohlberg Oct 20, 2022
cbf2d0f
Bug fix
bwohlberg Oct 20, 2022
4d747af
Merge branch 'main' into brendt/padmm
bwohlberg Nov 15, 2022
3c7f283
Typo fix
bwohlberg Nov 18, 2022
18992b7
Fix usage example
bwohlberg Nov 18, 2022
1f582ba
Improve variable names
bwohlberg Nov 18, 2022
303037b
Docstring improvement
bwohlberg Nov 18, 2022
46532bb
Add more accurate dual residual calculation
bwohlberg Nov 18, 2022
5213600
Add tests
bwohlberg Nov 19, 2022
dc5c018
Improve docs
bwohlberg Nov 19, 2022
6e0e71e
Clean up unused module
bwohlberg Nov 19, 2022
3a1fc3c
Extend Function __init__
bwohlberg Nov 19, 2022
6ce5036
Typing fix
bwohlberg Nov 19, 2022
9d24df3
Merge branch 'brendt/padmm' into brendt/padmm-ext
bwohlberg Nov 19, 2022
bf83805
Merge branch 'main' into brendt/padmm-ext
bwohlberg Nov 19, 2022
cd7aeb8
Add slice method and tests
bwohlberg Nov 19, 2022
b36434a
Improve jvp / vjp methods and add corresponding tests
bwohlberg Nov 20, 2022
91bab93
Docstring fix
bwohlberg Nov 20, 2022
2fe4636
Add tests for complex values
bwohlberg Nov 20, 2022
ad02826
Split out some tests into a new test module
bwohlberg Nov 20, 2022
e31b85a
Add function for constructing a jacobian linop for an operator
bwohlberg Nov 20, 2022
b76df2c
Add jacobian method and corresponding tests
bwohlberg Nov 20, 2022
141012c
Docstring fix
bwohlberg Nov 20, 2022
6006032
Change required by removal of Operator method
bwohlberg Nov 20, 2022
c642212
Rename conjugate vjp function
bwohlberg Nov 20, 2022
1357cc1
Fix docstring of cvjp
bwohlberg Nov 20, 2022
609fbf2
Minor docstring edit
bwohlberg Nov 20, 2022
41f8b03
Resolve typing issue
bwohlberg Nov 20, 2022
651f329
Resolve pytest issue
bwohlberg Nov 20, 2022
411a53b
Update change summary
bwohlberg Nov 20, 2022
89f909a
Change H type from Callable to Function and implement default values …
bwohlberg Nov 21, 2022
1736485
Add jvp and vjp methods
bwohlberg Nov 21, 2022
d405c92
Switch to using Function.vjp
bwohlberg Nov 21, 2022
8e2423a
Constraint function is now a Function object and explicit x0, z0, u0 …
bwohlberg Nov 21, 2022
30f302f
Avoid example script title collision
bwohlberg Nov 21, 2022
3793610
Update example index
bwohlberg Nov 21, 2022
c862c81
Change H type from Callable to Function
bwohlberg Nov 21, 2022
710deb7
Add tests
bwohlberg Nov 21, 2022
cb1381d
Add handling of zero operators
bwohlberg Nov 22, 2022
8fb04da
Merge branch 'main' into brendt/padmm-ext
bwohlberg Nov 22, 2022
e024182
Add parameter estimation utility function
bwohlberg Nov 23, 2022
ea05985
Add parameter estimation utility function
bwohlberg Nov 23, 2022
1dbe500
Add tests
bwohlberg Nov 23, 2022
847f934
Update submodule
Nov 28, 2022
4fb4738
Add method constructing operator from function
bwohlberg Nov 29, 2022
f2f2019
Merge branch 'main' into brendt/padmm-ext
bwohlberg Dec 8, 2022
914e61d
Move parameter estimation functions to static methods of solvers
bwohlberg Dec 8, 2022
150bdac
Rename module
bwohlberg Dec 8, 2022
b2cd9cf
Add proximal ADMM with linear constraint
bwohlberg Dec 8, 2022
3a021d6
Add proximal ADMM solver to comparison
bwohlberg Dec 8, 2022
db58560
Add proximal ADMM solver to comparison
bwohlberg Dec 8, 2022
0bb0124
Typo fix
bwohlberg Dec 8, 2022
adc4895
Use linear-constraint version for baseline solver
bwohlberg Dec 8, 2022
a912313
Fix typo and add reference
bwohlberg Dec 8, 2022
4585dfa
Update comment on plot results
bwohlberg Dec 8, 2022
c441f69
Update examples index
bwohlberg Dec 8, 2022
8e69071
Update submodule
bwohlberg Dec 8, 2022
c2beb55
Fix or ignore typing errors
bwohlberg Dec 8, 2022
8593990
Update submodule
Dec 9, 2022
a0ecb32
Docstring whitespace fix
bwohlberg Dec 9, 2022
ec84079
Update submodule
bwohlberg Dec 9, 2022
17a50b5
Add change summary entry
bwohlberg Dec 9, 2022
2c6c2cb
Address test failures under osx
bwohlberg Dec 9, 2022
8a1ea91
Improve test coverage
bwohlberg Dec 9, 2022
fc9e7f1
Merge branch 'main' into brendt/padmm-ext2
bwohlberg Dec 12, 2022
10e0b73
Address some review comments
bwohlberg Dec 12, 2022
0e9629f
Fix latex equation
bwohlberg Dec 12, 2022
3f1c5f1
Address PR review comments
bwohlberg Dec 12, 2022
0a8188e
Update submodule
bwohlberg Dec 12, 2022
4e4adce
Add discussion of effects of jit on timing
bwohlberg Dec 12, 2022
3184b29
Update submodule
bwohlberg Dec 12, 2022
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
7 changes: 5 additions & 2 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ SCICO Release Notes
Version 0.0.4 (unreleased)
----------------------------

• New methods and a function for computing Jacobian-vector products for
`Operator` objects.
• New `Function` class for representing array-to-array mappings with more than
one input.
• New methods and a function for computing Jacobian-vector products for `Operator`
objects.
• New proximal ADMM solvers.



Expand Down
21 changes: 21 additions & 0 deletions docs/source/examples.rst
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ Miscellaneous
examples/denoise_tv_admm
examples/denoise_tv_pgm
examples/denoise_tv_multi
examples/denoise_cplx_tv_nlpadmm
examples/denoise_cplx_tv_pdhg
examples/denoise_dncnn_universal
examples/video_rpca_admm
Expand Down Expand Up @@ -120,6 +121,7 @@ Total Variation
examples/denoise_tv_admm
examples/denoise_tv_pgm
examples/denoise_tv_multi
examples/denoise_cplx_tv_nlpadmm
examples/denoise_cplx_tv_pdhg


Expand Down Expand Up @@ -182,6 +184,25 @@ Linearized ADMM
examples/denoise_tv_multi


Proximal ADMM
^^^^^^^^^^^^^

.. toctree::
:maxdepth: 1

examples/denoise_tv_multi
examples/denoise_cplx_tv_nlpadmm


Non-linear Proximal ADMM
^^^^^^^^^^^^^^^^^^^^^^^^

.. toctree::
:maxdepth: 1

examples/denoise_cplx_tv_nlpadmm


PDHG
^^^^

Expand Down
38 changes: 31 additions & 7 deletions docs/source/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,7 @@ @InCollection{beck-2010-gradient
publisher = {Cambridge University Press},
year = 2010,
doi = {10.1017/CBO9780511804458.003},
url =
{http://www.math.tau.ac.il/~teboulle/papers/gradient_chapter.pdf}
url = {http://www.math.tau.ac.il/~teboulle/papers/gradient_chapter.pdf}
}

@Book {beck-2017-first,
Expand All @@ -110,6 +109,17 @@ @Software {bradbury-2018-jax
year = {2018}
}

@InProceedings {benning-2016-preconditioned,
title = {Preconditioned {ADMM} with nonlinear operator
constraint},
author = {Benning, Martin and Knoll, Florian and
Sch{\"o}nlieb, Carola-Bibiane and Valkonen, Tuomo},
booktitle = {IFIP Conference on System Modeling and Optimization (CSMO) 2015},
pages = {117--126},
year = 2016,
doi = {10.1007/978-3-319-55795-3_10}
}

@Article {boyd-2010-distributed,
title = {Distributed optimization and statistical learning
via the alternating direction method of multipliers},
Expand Down Expand Up @@ -206,6 +216,20 @@ @Article {daubechies-2004-iterative
doi = {10.1002/cpa.20042}
}

@Article {deng-2015-global,
author = {Wei Deng and Wotao Yin},
title = {On the Global and Linear Convergence of the
Generalized Alternating Direction Method of
Multipliers},
journal = {Journal of Scientific Computing},
year = 2015,
month = May,
volume = 66,
number = 3,
pages = {889--916},
doi = {10.1007/s10915-015-0048-x},
}

@Article {esser-2010-general,
author = {Ernie Esser and Xiaoqun Zhang and Tony F. Chan},
title = {A General Framework for a Class of First Order
Expand Down Expand Up @@ -345,10 +369,10 @@ @Article {kamilov-2022-plug
T. Buzzard and Brendt Wohlberg},
title = {Plug-and-Play Methods for Integrating Physical and
Learned Models in Computational Imaging},
journal = {IEEE Signal Processing Magazine},
journal = {IEEE Signal Processing Magazine},
year = 2022,
eprint = {arXiv:2203.17061},
note = {To appear.}
note = {To appear.}
}

@Article {liu-2018-first,
Expand All @@ -375,7 +399,7 @@ @Article {maggioni-2012-nonlocal
number = 1,
pages = {119--133},
year = 2012,
doi = {10.1109/TIP.2012.2210725}
doi = {10.1109/TIP.2012.2210725}
}

@InProceedings {makinen-2019-exact,
Expand Down Expand Up @@ -428,7 +452,7 @@ @Book {nocedal-2006-numerical

@Book {paganin-2006-coherent,
doi = {10.1093/acprof:oso/9780198567288.001.0001},
isbn = 9780198567288,
isbn = {9780198567288},
year = 2006,
month = Jan,
publisher = {Oxford University Press},
Expand Down Expand Up @@ -541,7 +565,7 @@ @Article {valkonen-2014-primal
journal = {Inverse Problems},
volume = 30,
number = 5,
pages = 055012,
pages = {055012},
year = 2014,
doi = {10.1088/0266-5611/30/5/055012}
}
Expand Down
8 changes: 6 additions & 2 deletions examples/scripts/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,10 @@ Miscellaneous
Total Variation Denoising with Constraint (APGM)
`denoise_tv_multi.py <denoise_tv_multi.py>`_
Comparison of Optimization Algorithms for Total Variation Denoising
`denoise_cplx_tv_nlpadmm.py <denoise_cplx_tv_nlpadmm.py>`_
Complex Total Variation Denoising with NLPADMM Solver
`denoise_cplx_tv_pdhg.py <denoise_cplx_tv_pdhg.py>`_
Complex Total Variation Denoising
Complex Total Variation Denoising with PDHG Solver
`denoise_dncnn_universal.py <denoise_dncnn_universal.py>`_
Comparison of DnCNN Variants for Image Denoising
`video_rpca_admm.py <video_rpca_admm.py>`_
Expand Down Expand Up @@ -140,8 +142,10 @@ Total Variation
Total Variation Denoising with Constraint (APGM)
`denoise_tv_multi.py <denoise_tv_multi.py>`_
Comparison of Optimization Algorithms for Total Variation Denoising
`denoise_cplx_tv_nlpadmm.py <denoise_cplx_tv_nlpadmm.py>`_
Complex Total Variation Denoising with NLPADMM Solver
`denoise_cplx_tv_pdhg.py <denoise_cplx_tv_pdhg.py>`_
Complex Total Variation Denoising
Complex Total Variation Denoising with PDHG Solver


Sparsity
Expand Down
Loading