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

Three operator splitting with adaptative step size: prox on x inside loop ? #97

Open
tvayer opened this issue May 10, 2022 · 2 comments

Comments

@tvayer
Copy link
Contributor

tvayer commented May 10, 2022

Hello,

I am trying to apply the TOS algorithm from your paper https://arxiv.org/pdf/1804.02339.pdf by using the COPT implementation. There is one detail that I do not really catch here.

Based on your article, it seems to me that the steps (lines 2-7) in Algorithm 1 of https://arxiv.org/pdf/1804.02339.pdf do not match the implementation:

copt/copt/splitting.py

Lines 130 to 144 in 28903ab

x = prox_1(z - step_size * (u + grad_fk), step_size, *args_prox)
incr = x - z
norm_incr = np.linalg.norm(incr)
ls = norm_incr > 1e-7 and line_search
if ls:
for it_ls in range(max_iter_backtracking):
rhs = fk + grad_fk.dot(incr) + (norm_incr ** 2) / (2 * step_size)
ls_tol = f_grad(x, return_gradient=False) - rhs
if ls_tol <= LS_EPS:
# step size found
# if ls_tol > 0:
# ls_tol = 0.
break
else:
step_size *= backtracking_factor

I might be wrong but shouldn't the line:

(

x = prox_1(z - step_size * (u + grad_fk), step_size, *args_prox)
)

come after the loop begins:

(

for it_ls in range(max_iter_backtracking):
)

so as to match the steps (lines 2-7) in Algorithm 1 of https://arxiv.org/pdf/1804.02339.pdf

As it is, it seems to me that the variable x is never updated during the backtracking. Am I missing something ?

Thank you for the fantastic work !

@fabianp
Copy link
Member

fabianp commented May 12, 2022 via email

@tvayer
Copy link
Contributor Author

tvayer commented May 12, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants