@@ -117,11 +117,11 @@ function TR(
117117 Complex_hist = zeros (Int, maxIter)
118118 if verbose > 0
119119 # ! format: off
120- @info @sprintf " %6s %8s %8s %8s %7s %7s %8s %7s %7s %7s %7s %1s" " outer" " inner" " f(x)" " h(x)" " √ξ1 " " √ξ " " ρ" " Δ" " ‖x‖" " ‖s‖" " ‖Bₖ‖" " TR"
120+ @info @sprintf " %6s %8s %8s %8s %7s %7s %8s %7s %7s %7s %7s %1s" " outer" " inner" " f(x)" " h(x)" " √(ξ1/ν) " " √(ξ/ν) " " ρ" " Δ" " ‖x‖" " ‖s‖" " ‖Bₖ‖" " TR"
121121 # ! format: on
122122 end
123123
124- local ξ1
124+ local ξ1, ξ
125125 k = 0
126126
127127 fk = obj (f, xk)
@@ -133,6 +133,7 @@ function TR(
133133
134134 λmax = opnorm (Bk)
135135 νInv = (1 + θ) * λmax
136+ ν = 1 / νInv
136137
137138 optimal = false
138139 tired = k ≥ maxIter || elapsed_time > maxTime
@@ -166,18 +167,18 @@ function TR(
166167 ξ1 > 0 || error (" TR: first prox-gradient step should produce a decrease but ξ1 = $(ξ1) " )
167168
168169 if ξ1 ≥ 0 && k == 1
169- ϵ_increment = ϵr * sqrt (ξ1)
170+ ϵ_increment = ϵr * sqrt (ξ1)/ sqrt (ν)
170171 ϵ += ϵ_increment # make stopping test absolute and relative
171172 ϵ_subsolver += ϵ_increment
172173 end
173174
174- if sqrt (ξ1) < ϵ
175+ if sqrt (ξ1)/ sqrt (ν) < ϵ
175176 # the current xk is approximately first-order stationary
176177 optimal = true
177178 continue
178179 end
179180
180- subsolver_options. ϵa = k == 1 ? 1.0e-5 : max (ϵ_subsolver, min (1e-2 , sqrt (ξ1)) * ξ1)
181+ subsolver_options. ϵa = k == 1 ? 1.0e-5 : max (ϵ_subsolver, min (1e-2 , sqrt (ξ1 / ν )) * ξ1)
181182 ∆_effective = min (β * χ (s), Δk)
182183 (has_bounds (f) || subsolver == TRDH) ?
183184 set_bounds! (ψ, max .(- ∆_effective, l_bound - xk), min .(∆_effective, u_bound - xk)) :
@@ -214,7 +215,7 @@ function TR(
214215
215216 if (verbose > 0 ) && (k % ptf == 0 )
216217 # ! format: off
217- @info @sprintf " %6d %8d %8.1e %8.1e %7.1e %7.1e %8.1e %7.1e %7.1e %7.1e %7.1e %1s" k iter fk hk sqrt (ξ1) sqrt (ξ) ρk ∆_effective χ (xk) sNorm νInv TR_stat
218+ @info @sprintf " %6d %8d %8.1e %8.1e %7.1e %7.1e %8.1e %7.1e %7.1e %7.1e %7.1e %1s" k iter fk hk sqrt (ξ1/ ν ) sqrt (ξ/ ν ) ρk ∆_effective χ (xk) sNorm νInv TR_stat
218219 # ! format: on
219220 end
220221
@@ -256,9 +257,9 @@ function TR(
256257 @info @sprintf " %6d %8s %8.1e %8.1e" k " " fk hk
257258 elseif optimal
258259 # ! format: off
259- @info @sprintf " %6d %8d %8.1e %8.1e %7.1e %7.1e %8s %7.1e %7.1e %7.1e %7.1e" k 1 fk hk sqrt (ξ1) sqrt (ξ1 ) " " Δk χ (xk) χ (s) νInv
260+ @info @sprintf " %6d %8d %8.1e %8.1e %7.1e %7.1e %8s %7.1e %7.1e %7.1e %7.1e" k 1 fk hk sqrt (ξ1/ ν ) sqrt (ξ / ν ) " " Δk χ (xk) χ (s) νInv
260261 # ! format: on
261- @info " TR: terminating with √ξ1 = $(sqrt (ξ1)) "
262+ @info " TR: terminating with √(ξ1/ν) = $(sqrt (ξ1/ ν )) "
262263 end
263264 end
264265
@@ -276,7 +277,7 @@ function TR(
276277 set_status! (stats, status)
277278 set_solution! (stats, xk)
278279 set_objective! (stats, fk + hk)
279- set_residuals! (stats, zero (eltype (xk)), ξ1 ≥ 0 ? sqrt (ξ1) : ξ1)
280+ set_residuals! (stats, zero (eltype (xk)), ξ1 ≥ 0 ? sqrt (ξ1/ ν ) : ξ1)
280281 set_iter! (stats, k)
281282 set_time! (stats, elapsed_time)
282283 set_solver_specific! (stats, :Fhist , Fobj_hist[1 : k])
0 commit comments