-
Notifications
You must be signed in to change notification settings - Fork 45
Closed
Description
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
Labels
No labels