@@ -28,7 +28,8 @@ See also: [`ForwardBackward`](@ref).
2828- `gamma=nothing`: stepsize to use, defaults to `1/Lf` if not set (but `Lf` is).
2929- `adaptive=false`: forces the method stepsize to be adaptively adjusted.
3030- `minimum_gamma=1e-7`: lower bound to `gamma` in case `adaptive == true`.
31- - `regret_gamma=1.0`: factor to enlarge `gamma` in case `adaptive == true`, before backtracking.
31+ - `reduce_gamma=0.5`: factor by which to reduce `gamma` in case `adaptive == true`, during backtracking.
32+ - `increase_gamma=1.0`: factor by which to increase `gamma` in case `adaptive == true`, before backtracking.
3233
3334# References
34351. Lions, Mercier, “Splitting algorithms for the sum of two nonlinear operators,” SIAM Journal on Numerical Analysis, vol. 16, pp. 964–979 (1979).
@@ -42,7 +43,8 @@ Base.@kwdef struct ForwardBackwardIteration{R,Tx,Tf,Tg,TLf,Tgamma}
4243 gamma:: Tgamma = Lf === nothing ? nothing : (1 / Lf)
4344 adaptive:: Bool = gamma === nothing
4445 minimum_gamma:: R = real (eltype (x0))(1e-7 )
45- regret_gamma:: R = real (eltype (x0))(1.0 )
46+ reduce_gamma:: R = real (eltype (x0))(0.5 )
47+ increase_gamma:: R = real (eltype (x0))(1.0 )
4648end
4749
4850Base. IteratorSize (:: Type{<:ForwardBackwardIteration} ) = Base. IsInfinite ()
@@ -87,7 +89,7 @@ function Base.iterate(
8789 state:: ForwardBackwardState{R,Tx} ,
8890) where {R,Tx}
8991 if iter. adaptive == true
90- state. gamma *= iter. regret_gamma
92+ state. gamma *= iter. increase_gamma
9193 state. gamma, state. g_z, state. f_x = backtrack_stepsize! (
9294 state. gamma,
9395 iter. f,
@@ -103,6 +105,7 @@ function Base.iterate(
103105 state. z,
104106 state. grad_f_z,
105107 minimum_gamma = iter. minimum_gamma,
108+ reduce_gamma = iter. reduce_gamma,
106109 )
107110 state. x, state. z = state. z, state. x
108111 state. grad_f_x, state. grad_f_z = state. grad_f_z, state. grad_f_x
0 commit comments