@@ -21,12 +21,7 @@ of specifying a trust region radius.
21
21
iteration ``i``. Reasonable choices for `b_uphill` are `1.0` or `2.0`, with
22
22
`b_uphill = 2.0` allowing higher uphill moves than `b_uphill = 1.0`. When
23
23
`b_uphill = 0.0`, no uphill moves will be accepted. Defaults to `1.0`. See Section 4 of
24
- [1].
25
-
26
- ### References
27
-
28
- [1] Transtrum, Mark K., and James P. Sethna. "Improvements to the Levenberg-Marquardt
29
- algorithm for nonlinear least-squares minimization." arXiv preprint arXiv:1201.5885 (2012).
24
+ [transtrum2012improvements](@ref).
30
25
"""
31
26
@concrete struct LevenbergMarquardtTrustRegion <: AbstractTrustRegionMethod
32
27
β_uphill
120
115
121
116
const T = AbstractRadiusUpdateScheme
122
117
118
+ struct __Simple <: AbstractRadiusUpdateScheme end
123
119
"""
124
120
RadiusUpdateSchemes.Simple
125
121
@@ -128,93 +124,70 @@ follows the conventional approach to update the trust region radius, i.e. if the
128
124
step is accepted it increases the radius by a fixed factor (bounded by a maximum radius)
129
125
and if the trial step is rejected, it shrinks the radius by a fixed factor.
130
126
"""
131
- struct __Simple <: AbstractRadiusUpdateScheme end
132
127
const Simple = __Simple ()
133
128
129
+ struct __NLsolve <: AbstractRadiusUpdateScheme end
134
130
"""
135
131
RadiusUpdateSchemes.NLsolve
136
132
137
133
The same updating scheme as in NLsolve's (https://github.com/JuliaNLSolvers/NLsolve.jl)
138
134
trust region dogleg implementation.
139
135
"""
140
- struct __NLsolve <: AbstractRadiusUpdateScheme end
141
136
const NLsolve = __NLsolve ()
142
137
138
+ struct __NocedalWright <: AbstractRadiusUpdateScheme end
143
139
"""
144
140
RadiusUpdateSchemes.NocedalWright
145
141
146
142
Trust region updating scheme as in Nocedal and Wright [see Alg 11.5, page 291].
147
143
"""
148
- struct __NocedalWright <: AbstractRadiusUpdateScheme end
149
144
const NocedalWright = __NocedalWright ()
150
145
146
+ struct __Hei <: AbstractRadiusUpdateScheme end
151
147
"""
152
148
RadiusUpdateSchemes.Hei
153
149
154
- This scheme is proposed by Hei, L. [1] . The trust region radius depends on the size
155
- (norm) of the current step size. The hypothesis is to let the radius converge to zero as
156
- the iterations progress, which is more reliable and robust for ill-conditioned as well
150
+ This scheme is proposed in [hei2003self](@citet) . The trust region radius depends on the
151
+ size (norm) of the current step size. The hypothesis is to let the radius converge to zero
152
+ as the iterations progress, which is more reliable and robust for ill-conditioned as well
157
153
as degenerate problems.
158
-
159
- ### References
160
-
161
- [1] Hei, Long. "A self-adaptive trust region algorithm." Journal of Computational
162
- Mathematics (2003): 229-236.
163
154
"""
164
- struct __Hei <: AbstractRadiusUpdateScheme end
165
155
const Hei = __Hei ()
166
156
157
+ struct __Yuan <: AbstractRadiusUpdateScheme end
167
158
"""
168
159
RadiusUpdateSchemes.Yuan
169
160
170
- This scheme is proposed by Yuan, Y [1]. Similar to Hei's scheme, the trust region is
171
- updated in a way so that it converges to zero, however here, the radius depends on the
172
- size (norm) of the current gradient of the objective (merit) function. The hypothesis is
173
- that the step size is bounded by the gradient size, so it makes sense to let the radius
174
- depend on the gradient.
175
-
176
- ### References
177
-
178
- [1] Fan, Jinyan, Jianyu Pan, and Hongyan Song. "A retrospective trust region algorithm
179
- with trust region converging to zero." Journal of Computational Mathematics 34.4 (2016):
180
- 421-436.
161
+ This scheme is proposed by [yuan2015recent](@citet). Similar to Hei's scheme, the
162
+ trust region is updated in a way so that it converges to zero, however here, the radius
163
+ depends on the size (norm) of the current gradient of the objective (merit) function. The
164
+ hypothesis is that the step size is bounded by the gradient size, so it makes sense to let
165
+ the radius depend on the gradient.
181
166
"""
182
- struct __Yuan <: AbstractRadiusUpdateScheme end
183
167
const Yuan = __Yuan ()
184
168
169
+ struct __Bastin <: AbstractRadiusUpdateScheme end
185
170
"""
186
171
RadiusUpdateSchemes.Bastin
187
172
188
- This scheme is proposed by Bastin, et al. [1] . The scheme is called a retrospective
189
- update scheme as it uses the model function at the current iteration to compute the
190
- ratio of the actual reduction and the predicted reduction in the previous trial step,
191
- and use this ratio to update the trust region radius. The hypothesis is to exploit the
173
+ This scheme is proposed by [bastin2010retrospective](@citet) . The scheme is called a
174
+ retrospective update scheme as it uses the model function at the current iteration to
175
+ compute the ratio of the actual reduction and the predicted reduction in the previous trial
176
+ step, and use this ratio to update the trust region radius. The hypothesis is to exploit the
192
177
information made available during the optimization process in order to vary the accuracy
193
178
of the objective function computation.
194
-
195
- ### References
196
-
197
- [1] Bastin, Fabian, et al. "A retrospective trust-region method for unconstrained
198
- optimization." Mathematical programming 123 (2010): 395-418.
199
179
"""
200
- struct __Bastin <: AbstractRadiusUpdateScheme end
201
180
const Bastin = __Bastin ()
202
181
182
+ struct __Fan <: AbstractRadiusUpdateScheme end
203
183
"""
204
184
RadiusUpdateSchemes.Fan
205
185
206
- This scheme is proposed by Fan, J. [1] . It is very much similar to Hei's and Yuan 's
207
- schemes as it lets the trust region radius depend on the current size (norm) of the
208
- objective (merit) function itself. These new update schemes are known to improve local
186
+ This scheme is proposed by [fan2006convergence](@citet) . It is very much similar to Hei's
187
+ and Yuan's schemes as it lets the trust region radius depend on the current size (norm) of
188
+ the objective (merit) function itself. These new update schemes are known to improve local
209
189
convergence.
210
-
211
- ### References
212
-
213
- [1] Fan, Jinyan. "Convergence rate of the trust region method for nonlinear equations
214
- under local error bound condition." Computational Optimization and Applications 34.2
215
- (2006): 215-227.
216
190
"""
217
- struct __Fan <: AbstractRadiusUpdateScheme end
218
191
const Fan = __Fan ()
219
192
220
193
end
@@ -248,13 +221,11 @@ the value used in the respective paper.
248
221
- `step_threshold`: the threshold for taking a step. In every iteration, the threshold is
249
222
compared with a value `r`, which is the actual reduction in the objective function
250
223
divided by the predicted reduction. If `step_threshold > r` the model is not a good
251
- approximation, and the step is rejected. Defaults to `nothing`. For more details, see
252
- [2].
224
+ approximation, and the step is rejected. Defaults to `nothing`.
253
225
- `shrink_threshold`: the threshold for shrinking the trust region radius. In every
254
226
iteration, the threshold is compared with a value `r` which is the actual reduction in
255
227
the objective function divided by the predicted reduction. If `shrink_threshold > r` the
256
- trust region radius is shrunk by `shrink_factor`. Defaults to `nothing`. For more
257
- details, see [2].
228
+ trust region radius is shrunk by `shrink_factor`. Defaults to `nothing`.
258
229
- `expand_threshold`: the threshold for expanding the trust region radius. If a step is
259
230
taken, i.e `step_threshold < r` (with `r` defined in `shrink_threshold`), a check is
260
231
also made to see if `expand_threshold < r`. If that is true, the trust region radius is
@@ -263,13 +234,6 @@ the value used in the respective paper.
263
234
`shrink_threshold > r` (with `r` defined in `shrink_threshold`). Defaults to `0.25`.
264
235
- `expand_factor`: the factor to expand the trust region radius with if
265
236
`expand_threshold < r` (with `r` defined in `shrink_threshold`). Defaults to `2.0`.
266
-
267
- ### References
268
-
269
- [1] Yuan, Ya-xiang. "Recent advances in trust region algorithms." Mathematical Programming
270
- 151 (2015): 249-281.
271
- [2] Rahpeymaii, Farzad. "An efficient line search trust-region for systems of nonlinear
272
- equations." Mathematical Sciences 14.3 (2020): 257-268.
273
237
"""
274
238
@kwdef @concrete struct GenericTrustRegionScheme{
275
239
M <: RadiusUpdateSchemes.AbstractRadiusUpdateScheme }
358
322
u0_norm, fu_norm) where {T}
359
323
method isa RUS. __NLsolve && return T (ifelse (u0_norm > 0 , u0_norm, 1 ))
360
324
(method isa RUS. __Hei || method isa RUS. __Bastin) && return T (1 )
361
- method isa RUS. __Fan && return T ((fu_norm^ 0.99 ) // 10 )
325
+ method isa RUS. __Fan && return T ((fu_norm^ 0.99 ) / 10 )
362
326
return T (max_tr / 11 )
363
327
end
364
328
0 commit comments