@@ -86,7 +86,7 @@ function preprocess(
8686 α,
8787)
8888 max_hprod = stp. meta. max_cntrs[:neval_hprod ]
89- Hx = stp . current_state . Hx
89+ Hx = workspace . Hstruct . H
9090 PData = preprocess (PData, Hx, ∇f, norm_∇f, neval_hprod (stp. pb), max_hprod, α)
9191 return PData
9292end
@@ -101,7 +101,7 @@ function compute_direction(
101101 solve_model,
102102)
103103 max_hprod = stp. meta. max_cntrs[:neval_hprod ]
104- Hx = stp . current_state . Hx
104+ Hx = workspace . Hstruct . H
105105 return solve_model (PData, Hx, ∇f, norm_∇f, neval_hprod (stp. pb), max_hprod, α)
106106end
107107
@@ -162,11 +162,11 @@ end
162162
163163Update `Δq = -(∇f + 0.5 * (Hx * d)) ⋅ d` in-place.
164164"""
165- function compute_Δq (workspace, Hx, d, ∇f) # -(∇f + 0.5 * (nlp_at_x.Hx * d)) ⋅ d
166- mul! (workspace. Hd, Hx, d)
167- workspace. Hd .*= 0.5
168- workspace. Hd .+ = ∇f
169- return - dot (workspace. Hd, d)
165+ function compute_Δq (workspace, Hx, d, ∇f)
166+ mul! (workspace. Hd, Hx, d)
167+ workspace. Hd .*= 0.5
168+ workspace. Hd .+ = ∇f
169+ return - dot (workspace. Hd, d)
170170end
171171
172172function TRARC (
@@ -180,8 +180,8 @@ function TRARC(
180180 kwargs... ,
181181) where {Pb,M,SRC,MStp,LoS,S,T,Hess,ParamData}
182182 nlp, nlp_at_x = nlp_stop. pb, nlp_stop. current_state
183- xt, xtnext, d, ∇f, ∇fnext =
184- workspace. xt, workspace . xtnext, workspace . d, workspace.∇f, workspace.∇fnext
183+ xt, xtnext, ∇f, ∇fnext = workspace . xt, workspace . xtnext, workspace.∇f, workspace.∇fnext
184+ d, Hx = workspace. d, workspace. Hstruct . H
185185
186186 α = TR. α₀
187187 max_unsuccinarow = TR. max_unsuccinarow
@@ -197,7 +197,8 @@ function TRARC(
197197
198198 Stopping. _smart_update! (nlp_at_x, x = xt, fx = ft, gx = ∇f)
199199 OK = start! (nlp_stop)
200- ! OK && Stopping. _smart_update! (nlp_at_x, Hx = hessian! (workspace, nlp, xt))
200+ Hx = hessian! (workspace, nlp, xt)
201+ ! OK && Stopping. _smart_update! (nlp_at_x, Hx = Hx)
201202
202203 iter = 0 # counter different than stop count
203204 succ, unsucc, verysucc, unsuccinarow = 0 , 0 , 0 , 0
@@ -222,7 +223,7 @@ function TRARC(
222223 compute_direction (nlp_stop, PData, workspace, ∇f, norm_∇f, α, solve_model)
223224
224225 slope = ∇f ⋅ d
225- Δq = compute_Δq (workspace, nlp_at_x . Hx, d, ∇f) # -(∇f + 0.5 * (nlp_at_x.Hx * d)) ⋅ d
226+ Δq = compute_Δq (workspace, Hx, d, ∇f)
226227
227228 xtnext .= xt .+ d
228229 ftnext = obj (nlp, xtnext, workspace)
@@ -238,7 +239,8 @@ function TRARC(
238239 unsucc += 1
239240 unsuccinarow += 1
240241 η = (1 - acceptance_threshold) / 10 # ∈ (acceptance_threshold, 1)
241- qksk = ft + slope + ((nlp_at_x. Hx * d) ⋅ d) / 2
242+ mul! (workspace. Hd, Hx, d)
243+ qksk = ft + slope + (workspace. Hd ⋅ d) / 2
242244 αbad = (1 - η) * slope / ((1 - η) * (ft + slope) + η * qksk - ftnext)
243245 α = min (decrease (PData, α, TR), max (TR. large_decrease_factor, αbad) * α)
244246 elseif r < acceptance_threshold # unsucessful
@@ -276,7 +278,8 @@ function TRARC(
276278 nlp_stop. meta. nb_of_stop = iter
277279 Stopping. _smart_update! (nlp_at_x, x = xt, fx = ft, gx = ∇f)
278280 OK = stop! (nlp_stop)
279- success && Stopping. _smart_update! (nlp_at_x, Hx = hessian! (workspace, nlp, xt))
281+ Hx = hessian! (workspace, nlp, xt)
282+ success && Stopping. _smart_update! (nlp_at_x, Hx = Hx)
280283 end # while !OK
281284
282285 return nlp_stop
0 commit comments