Skip to content

Commit 652701d

Browse files
Change R2_alg so that it returns list of times
1 parent b6cd089 commit 652701d

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

src/R2DH.jl

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,11 @@ function R2DH(
143143
s = zero(xk)
144144
ψ = has_bnds ? shifted(h, xk, l_bound - xk, u_bound - xk, selected) : shifted(h, xk)
145145

146-
Fobj_hist = zeros(maxIter)
147-
Hobj_hist = zeros(maxIter)
148-
time_hist = zeros(maxIter)
146+
Fobj_hist = zeros(maxIter+1)
147+
Hobj_hist = zeros(maxIter+1)
148+
time_hist = zeros(maxIter+1)
149149
FHobj_hist = fill!(Vector{R}(undef, Mmonotone), R(-Inf))
150-
Complex_hist = zeros(Int, maxIter)
150+
Complex_hist = zeros(Int, maxIter+1)
151151
if verbose > 0
152152
#! format: off
153153
@info @sprintf "%6s %8s %8s %7s %8s %7s %7s %7s %1s" "iter" "f(x)" "h(x)" "√(ξ/ν)" "ρ" "σ" "‖x‖" "‖s‖" ""
@@ -181,6 +181,8 @@ function R2DH(
181181
time_hist[k] = elapsed_time
182182
Mmonotone > 0 && (FHobj_hist[mod(k-1, Mmonotone) + 1] = fk + hk)
183183

184+
#Dkσk .= max.(Dkσk, eps(R))
185+
184186
# model with diagonal hessian
185187
φ(d) = ∇fk' * d + (d' * (Dkσk .* d)) / 2
186188
mk(d) = φ(d) + ψ(d)
@@ -190,8 +192,9 @@ function R2DH(
190192
else
191193
iprox!(s, ψ, ∇fk, Dkσk)
192194
end
195+
mks = mk(s)
193196

194-
if mk(s) > 1/eps(R)
197+
if mks < -1e5
195198
σk = σk * γ
196199
Dkσk .= D.d .+ σk
197200
DNorm = norm(D.d, Inf)
@@ -208,8 +211,8 @@ function R2DH(
208211

209212
fhmax = Mmonotone > 0 ? maximum(FHobj_hist) : fk + hk
210213
Δobj = fhmax - (fkn + hkn) + max(1, abs(fhmax)) * 10 * eps()
211-
Δmod = fhmax - (fk + mk(s)) + max(1, abs(hk)) * 10 * eps()
212-
ξ = hk - mk(s) + max(1, abs(hk)) * 10 * eps()
214+
Δmod = fhmax - (fk + mks) + max(1, abs(hk)) * 10 * eps()
215+
ξ = hk - mks + max(1, abs(hk)) * 10 * eps()
213216
sqrt_ξ_νInv = ξ 0 ? sqrt/ ν) : sqrt(-ξ / ν)
214217

215218
if ξ 0 && k == 1
@@ -257,7 +260,6 @@ function R2DH(
257260
end
258261

259262
Dkσk .= D.d .+ σk
260-
DNorm = norm(D.d, Inf)
261263
ν = 1 / ((DNorm + σk) * (1 + θ))
262264

263265
tired = maxIter > 0 && k maxIter

src/R2_alg.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ mutable struct R2Solver{
2121
Fobj_hist::Vector{R}
2222
Hobj_hist::Vector{R}
2323
Complex_hist::Vector{Int}
24+
Time_hist::Vector{R}
2425
end
2526

2627
function R2Solver(
@@ -46,6 +47,7 @@ function R2Solver(
4647
end
4748
Fobj_hist = zeros(R, maxIter + 2)
4849
Hobj_hist = zeros(R, maxIter + 2)
50+
Time_hist = zeros(R, maxIter + 2)
4951
Complex_hist = zeros(Int, maxIter + 2)
5052
return R2Solver(
5153
xk,
@@ -62,6 +64,7 @@ function R2Solver(
6264
Fobj_hist,
6365
Hobj_hist,
6466
Complex_hist,
67+
Time_hist,
6568
)
6669
end
6770

@@ -87,6 +90,7 @@ function R2Solver(reg_nlp::AbstractRegularizedNLPModel{T, V}; max_iter::Int = 10
8790
end
8891
Fobj_hist = zeros(T, max_iter + 2)
8992
Hobj_hist = zeros(T, max_iter + 2)
93+
Time_hist = zeros(T, max_iter + 2)
9094
Complex_hist = zeros(Int, max_iter + 2)
9195

9296
ψ =
@@ -107,6 +111,7 @@ function R2Solver(reg_nlp::AbstractRegularizedNLPModel{T, V}; max_iter::Int = 10
107111
Fobj_hist,
108112
Hobj_hist,
109113
Complex_hist,
114+
Time_hist,
110115
)
111116
end
112117

@@ -201,6 +206,7 @@ function R2(
201206
ν = options.ν,
202207
γ = options.γ,
203208
)
209+
return stats
204210
end
205211

206212
function R2(
@@ -232,6 +238,7 @@ function R2(
232238
outdict = Dict(
233239
:Fhist => stats.solver_specific[:Fhist],
234240
:Hhist => stats.solver_specific[:Hhist],
241+
:Time_hist => stats.solver_specific[:Time_hist],
235242
:Chist => stats.solver_specific[:SubsolverCounter],
236243
:NonSmooth => h,
237244
:status => stats.status,
@@ -274,6 +281,7 @@ function R2(
274281
outdict = Dict(
275282
:Fhist => stats.solver_specific[:Fhist],
276283
:Hhist => stats.solver_specific[:Hhist],
284+
:Time_hist => stats.solver_specific[:Time_hist],
277285
:Chist => stats.solver_specific[:SubsolverCounter],
278286
:NonSmooth => h,
279287
:status => stats.status,
@@ -295,10 +303,12 @@ function R2(reg_nlp::AbstractRegularizedNLPModel; kwargs...)
295303
solver.Fobj_hist[stats.iter + 1] = stats.solver_specific[:smooth_obj]
296304
solver.Hobj_hist[stats.iter + 1] = stats.solver_specific[:nonsmooth_obj]
297305
solver.Complex_hist[stats.iter + 1] += 1
306+
solver.Time_hist[stats.iter + 1] = stats.elapsed_time
298307
end
299308
solve!(solver, reg_nlp, stats; callback = cb, max_iter = max_iter, kwargs...)
300309
set_solver_specific!(stats, :Fhist, solver.Fobj_hist[1:(stats.iter + 1)])
301310
set_solver_specific!(stats, :Hhist, solver.Hobj_hist[1:(stats.iter + 1)])
311+
set_solver_specific!(stats, :Time_hist, solver.Time_hist[1:(stats.iter + 1)])
302312
set_solver_specific!(stats, :SubsolverCounter, solver.Complex_hist[1:(stats.iter + 1)])
303313
return stats
304314
end

0 commit comments

Comments
 (0)