-
Notifications
You must be signed in to change notification settings - Fork 26
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
Chambolle-Pock #39
base: master
Are you sure you want to change the base?
Chambolle-Pock #39
Conversation
@reivilo3 thank you for your contribution |
I didn't notice I added a while ago some tests on an extended version of ADMM called linearized ADMM and inspired from "Proximal Algorithms. N. Parikh and S. Boyd. Foundations and Trends in Optimization, 1(3):123-231, 2014." I didn't manage to fix this issue. However I still let this not working implementation as it doesn't affect the default version of ADMM. I commented the test on linearized-ADMM in test_solvers.py |
A question of nomenclature. Linearized ADMM is a generalization of ADMM or Douglas Rachford? |
Reference document: https://web.stanford.edu/~boyd/papers/pdf/prox_algs.pdf |
Yes for the first line, but for the second, this returns z^{k+1} with dimension N1, which is not compatible with u^k and Ax^{K+1} being of dimensions N2. Do you agree? About your second message, according to p153 of the reference document, ADMM and Douglas-Rashford are the equivalent. |
Thanks... We should probably make a note in the documentation for that.
I think you should do the prox of |
If I do the prox of |
You are correct. This is somehow a design issue of the pyunlocbox. You can see here how it is done for the pyunlocbox/pyunlocbox/solvers.py Line 849 in 4a13fea
In your case, it is probably something like this:
|
Thank you! Rewriting the algorithm versions: I felt free to write the same three lines for the algorithm, where self.A(x) is either Ax or identity. I thus removed the parameter "lambda_" in the function "init_" of Douglas-Rashford its job is ensured by "step". Calling the "step" parameter θ, I noticed that the current version was written as: |
@reivilo3 Thank you very much. For now I need to get the test starting again before possibly doing a merge. I am not sure what happened for the lambda. I need to check the original paper to see if we made a mistake or if there was a reason for it. |
Travis changed (again) how things work. I had to enable a plan at the organization level... It should work now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Many thanks for your contributions @reivilo3! Here's some feedback. I'm leaving @nperraud checking the correctness of the algorithms.
@reivilo3, can you check the "Allow edits from maintainers" box? Also, the tests should pass. Thanks! |
@mdeff The box was already checked! |
Oh you're right. I could push. :) I made a mistake when trying it at first... |
Here is another source for the algorithm, see p482 : https://www2.karlin.mff.cuni.cz/~vybiral/Sem-2017/Rauhut.pdf
And thus reinsert the |
Thanks for addressing my feedback! While you reach a conclusion with @nperraud about the |
I never used 'make' on my pc with Windows 10, so downloaded Chocolatey and got some errors which are maybe common.
I don't know how to deal with these issues thus need your help. |
For me the algorithm look correct and the test case added seems to cover most of it. So I will give it a pass. I agree that it is better remove the lambda_ and use step instead in Douglas-Rachford. I do not believe we loose something and the interface is simpler for the uer. The We would like to keep the 79 character limits because it is a good practice for code. For all the stuff related to |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I approve the PR from an algorithmic point of view.
Please fix the cosmetic issues reported by
The |
I fixed some issues. What's most concerning now is that Douglas-Rachford seems to have been somewhat broken. Some tests are failing and the optimization in two tutorials (compressed sensing and denoising) are diverging (see Travis run). Any idea? |
The problem probably comes from the fact that the lambda parameter was replaced by mu. I would need to speed a bit of time to fix it and I don't have this time now unfortunately. |
Maybe @reivilo3 could fix that? BTW, we should aim to name parameters meaningfully, i.e., like We're otherwise not far from being able to merge this. :) |
I tried a couple things to resolve the bugs this morning but didn't success... |
I added Chambolle-Pock primal-dual algorithm. I also added a parameter in the 'norm_nuclear' function to benefit from the hermitian property in 'np.linalg.svd'.