Skip to content

Commit 70c80cc

Browse files
committed
LMTR: define ν as in TR
Closes #189 This slightly more restrictive definition of ν accounts for potentially unbounded residual Jacobians.
1 parent 4a32a63 commit 70c80cc

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

src/LMTR_alg.jl

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ function LMTR(
132132

133133
σmax, found_σ = opnorm(Jk)
134134
found_σ || error("operator norm computation failed")
135-
ν = θ / σmax^2 # ‖J'J‖ = ‖J‖²
135+
α⁻¹Δ⁻¹ = 1 /* Δk)
136+
ν = 1 / (α⁻¹Δ⁻¹ + σmax^2 * (α⁻¹Δ⁻¹ + 1)) # ‖J'J‖ = ‖J‖²
136137

137138
mν∇fk = -∇fk * ν
138139

@@ -174,8 +175,7 @@ function LMTR(
174175

175176
# Take first proximal gradient step s1 and see if current xk is nearly stationary.
176177
# s1 minimizes φ1(d) + ‖d‖² / 2 / ν + ψ(d) ⟺ s1 ∈ prox{νψ}(-ν∇φ1(0))
177-
ν1 = 1 / (1/ν + 1 / (Δk * α))
178-
prox!(s, ψ, mν∇fk, ν1)
178+
prox!(s, ψ, mν∇fk, ν)
179179
ξ1 = fk + hk - mk1(s) + max(1, abs(fk + hk)) * 10 * eps()
180180
ξ1 > 0 || error("LMTR: first prox-gradient step should produce a decrease but ξ1 = $(ξ1)")
181181

@@ -197,8 +197,8 @@ function LMTR(
197197
set_bounds!(ψ, max.(-∆_effective, l_bound - xk), min.(∆_effective, u_bound - xk)) :
198198
set_radius!(ψ, ∆_effective)
199199
subsolver_options.Δk = ∆_effective / 10
200-
subsolver_options.ν = ν1
201-
subsolver_args = subsolver == TRDH ? (SpectralGradient(1 / ν1, nls.meta.nvar),) : ()
200+
subsolver_options.ν = ν
201+
subsolver_args = subsolver == TRDH ? (SpectralGradient(1 / ν, nls.meta.nvar),) : ()
202202
s, iter, _ = with_logger(subsolver_logger) do
203203
subsolver(φ, ∇φ!, ψ, subsolver_args..., subsolver_options, s)
204204
end
@@ -255,7 +255,8 @@ function LMTR(
255255
jtprod_residual!(nls, xk, Fk, ∇fk)
256256
σmax, found_σ = opnorm(Jk)
257257
found_σ || error("operator norm computation failed")
258-
ν = θ / σmax^2 # ‖J'J‖ = ‖J‖²
258+
α⁻¹Δ⁻¹ = 1 /* Δk)
259+
ν = 1 / (α⁻¹Δ⁻¹ + σmax^2 * (α⁻¹Δ⁻¹ + 1)) # ‖J'J‖ = ‖J‖²
259260
@. mν∇fk = -∇fk * ν
260261
end
261262

0 commit comments

Comments
 (0)