Skip to content

Issue WolfePowellLinesearchStepsize #495

@jonas-pueschel

Description

@jonas-pueschel

Hi all,
the WolfePowellLinesearchStepsize does not have a maxiter for inner iterations. Passing a "bad" search direction, e.g. a non-descent direction makes the inner loop go on indefinitely, freezing the method. Here is a small example how to reproduce it:

using Manopt
using Manifolds
using LinearAlgebra
using Random

n = 4
A = diagm(1:n)
M = Sphere(n-1)

obj = ManifoldFirstOrderObjective(;
    cost = (M,p) -> dot(p, A*p),
    gradient = (M,p) -> A*p - dot(p, A * p) * p
)
retraction_method = ProjectionRetraction()
vector_transport_method = ProjectionTransport()

function get_stepsize_strat() 
    Manopt.WolfePowellLinesearchStepsize(
        M; sufficient_curvature = 0.1,
        sufficient_decrease = 0.2
    )
end

Random.seed!(1)
p0 = rand(M)

conjugate_gradient_descent!(M, obj, copy(p0);
    debug = (mp, cgs, n_iter) -> println("iter $n_iter"),
    retraction_method, vector_transport_method, 
    stepsize = get_stepsize_strat());

As already explained in #490, RCG sometimes does not correct non-descent directions. Here, after iteration 118, this leads to the stepsize strategy going into an infinite loop.

...
iter 112
iter 113
iter 114
iter 115
iter 116
iter 117
iter 118

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