Thanks to visit codestin.com
Credit goes to github.com

Skip to content

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

@tvayer

Description

@tvayer

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 !

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions