jolars / slopecd

4 stars 2 forks source link

feat: add alternative newtalm version (WIP) #50

Closed jolars closed 1 year ago

jolars commented 2 years ago

I've added an alternative version for the Newt-ALM solver based on code I received from the authors of the paper. I didn't change much so far, just created a wrapper and employed our convergence monitoring. The performance is lackluster (see below), but I think this is mostly because basically everything is implemented in python. I've added some numba directives here and there, but only the very lowest of the low-hanging fruit.

I actually suggest that we don't implement their code and instead use our own implementation. Their code does a lot of stuff that isn't included in the paper, such as preprocessing steps and an initial ADMM step, plus has a lot of special if-clause cases to decide stopping criteria for the inner solvers. And also some weird stuff like hard-coded loop unrolling in python.

Instead I suggest we just upgrade our implementation with some of the stuff from their code, such as the sigma updating rules and parameter choices. I know we had some problems with convergence with our code. Maybe we can fix that with some ideas from their implementation.

What do you think?

image

Klopfe commented 2 years ago

I've added an alternative version for the Newt-ALM solver based on code I received from the authors of the paper. I didn't change much so far, just created a wrapper and employed our convergence monitoring. The performance is lackluster (see below), but I think this is mostly because basically everything is implemented in python. I've added some numba directives here and there, but only the very lowest of the low-hanging fruit.

I actually suggest that we don't implement their code and instead use our own implementation. Their code does a lot of stuff that isn't included in the paper, such as preprocessing steps and an initial ADMM step, plus has a lot of special if-clause cases to decide stopping criteria for the inner solvers. And also some weird stuff like hard-coded loop unrolling in python.

Instead I suggest we just upgrade our implementation with some of the stuff from their code, such as the sigma updating rules and parameter choices. I know we had some problems with convergence with our code. Maybe we can fix that with some ideas from their implementation.

What do you think?

image

I agree with you. Let's just fix the convergence problems and see what we can use from their code but I would not spend too much time on this.