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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions