@@ -117,11 +117,11 @@ function TR(
117
117
Complex_hist = zeros (Int, maxIter)
118
118
if verbose > 0
119
119
# ! 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"
121
121
# ! format: on
122
122
end
123
123
124
- local ξ1
124
+ local ξ1, ξ
125
125
k = 0
126
126
127
127
fk = obj (f, xk)
@@ -133,6 +133,7 @@ function TR(
133
133
134
134
λmax = opnorm (Bk)
135
135
νInv = (1 + θ) * λmax
136
+ ν = 1 / νInv
136
137
137
138
optimal = false
138
139
tired = k ≥ maxIter || elapsed_time > maxTime
@@ -166,18 +167,18 @@ function TR(
166
167
ξ1 > 0 || error (" TR: first prox-gradient step should produce a decrease but ξ1 = $(ξ1) " )
167
168
168
169
if ξ1 ≥ 0 && k == 1
169
- ϵ_increment = ϵr * sqrt (ξ1)
170
+ ϵ_increment = ϵr * sqrt (ξ1)/ sqrt (ν)
170
171
ϵ += ϵ_increment # make stopping test absolute and relative
171
172
ϵ_subsolver += ϵ_increment
172
173
end
173
174
174
- if sqrt (ξ1) < ϵ
175
+ if sqrt (ξ1)/ sqrt (ν) < ϵ
175
176
# the current xk is approximately first-order stationary
176
177
optimal = true
177
178
continue
178
179
end
179
180
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)
181
182
∆_effective = min (β * χ (s), Δk)
182
183
(has_bounds (f) || subsolver == TRDH) ?
183
184
set_bounds! (ψ, max .(- ∆_effective, l_bound - xk), min .(∆_effective, u_bound - xk)) :
@@ -214,7 +215,7 @@ function TR(
214
215
215
216
if (verbose > 0 ) && (k % ptf == 0 )
216
217
# ! 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
218
219
# ! format: on
219
220
end
220
221
@@ -256,9 +257,9 @@ function TR(
256
257
@info @sprintf " %6d %8s %8.1e %8.1e" k " " fk hk
257
258
elseif optimal
258
259
# ! 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
260
261
# ! format: on
261
- @info " TR: terminating with √ξ1 = $(sqrt (ξ1)) "
262
+ @info " TR: terminating with √(ξ1/ν) = $(sqrt (ξ1/ ν )) "
262
263
end
263
264
end
264
265
@@ -276,7 +277,7 @@ function TR(
276
277
set_status! (stats, status)
277
278
set_solution! (stats, xk)
278
279
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)
280
281
set_iter! (stats, k)
281
282
set_time! (stats, elapsed_time)
282
283
set_solver_specific! (stats, :Fhist , Fobj_hist[1 : k])
0 commit comments