JuliaFirstOrder / ProximalAlgorithms.jl

Proximal algorithms for nonsmooth optimization in Julia
Other
130 stars 21 forks source link

Add implementation of PANOC+ #57

Closed aldma closed 2 years ago

aldma commented 2 years ago

Hello! First of all, thanks for all the work you put into this repo.

@AndThem and I would like to contribute with a variant of PANOC we recently investigated (arXiv:2112:13000).

The algorithm consists of two entangled backtracking steps: before a tentative update is accepted along some search direction, there is a check on the forward-backward stepsize gamma that should satisfy a Lipschitz bound. In contrast with the original PANOC, this refined linesearch procedure allows to easily reject poor steps and to handle smooth terms f that have only locally Lipschitz continuous gradient.

In the preprint we denoted this variant by PANOC+. However, to avoid issues with symbols and names, the algorithm has been implemented as a solver called NOLIP. This PR is to add NOLIP to the repo.

codecov[bot] commented 2 years ago

Codecov Report

Merging #57 (19a0030) into master (de2260e) will increase coverage by 0.73%. The diff coverage is 93.82%.

:exclamation: Current head 19a0030 differs from pull request most recent head 765f12d. Consider uploading reports for the commit 765f12d to get more accurate results Impacted file tree graph

@@            Coverage Diff             @@
##           master      #57      +/-   ##
==========================================
+ Coverage   89.03%   89.76%   +0.73%     
==========================================
  Files          20       21       +1     
  Lines         857      938      +81     
==========================================
+ Hits          763      842      +79     
- Misses         94       96       +2     
Impacted Files Coverage Δ
src/algorithms/panocplus.jl 93.82% <93.82%> (ø)
src/utilities/iteration_tools.jl 84.00% <0.00%> (+1.33%) :arrow_up:
src/algorithms/panoc.jl 97.82% <0.00%> (+2.17%) :arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update de2260e...765f12d. Read the comment docs.

lostella commented 2 years ago

If I had one wish it would be for an equivalence test between NOLIP and PANOC

That would be very useful to have in case anything changes in the implementation of either algorithm, it could help catch any mistake early

aldma commented 2 years ago

I've added an equivalence test between NOLIP and PANOC and then changed the name from NOLIP to PANOCplus. Thanks for your hints!