Skip to content

Commit cd01951

Browse files
Remove R2NModels (#311)
* remove R2NModels * remove skip_sigma * solve mk function in R2N * remove regularization in TR quadratic model * improve mk syntax in R2N * update obj name
1 parent 7286dc8 commit cd01951

5 files changed

Lines changed: 29 additions & 68 deletions

File tree

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ NLPModelsModifiers = "e01155f1-5c6f-4375-a9d8-616dd036575f"
1919
Percival = "01435c0c-c90d-11e9-3788-63660f8fbccc"
2020
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
2121
ProximalOperators = "a725b495-10eb-56fe-b38b-717eba820537"
22+
QuadraticModels = "f468eda6-eac5-11e8-05a5-ff9e497bcd19"
2223
RegularizedProblems = "ea076b23-609f-44d2-bb12-a4ae45328278"
2324
ShiftedProximalOperators = "d4fd37fa-580c-4e43-9b30-361c21aae263"
2425
SolverCore = "ff4d7338-4cf1-434d-91df-b86cb86fb843"
@@ -33,6 +34,7 @@ NLPModelsModifiers = "0.7"
3334
OptimizationProblems = "0.9.2"
3435
Percival = "0.7.2"
3536
ProximalOperators = "0.15"
37+
QuadraticModels = "0.9.15"
3638
RegularizedProblems = "0.1.3"
3739
ShiftedProximalOperators = "0.2"
3840
SolverCore = "0.3.10"

src/R2N.jl

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ mutable struct R2NSolver{
1919
s::V
2020
s1::V
2121
v0::V
22+
v1::V
2223
has_bnds::Bool
2324
l_bound::V
2425
u_bound::V
@@ -50,6 +51,7 @@ function R2NSolver(
5051

5152
v0 = [(-1.0)^i for i = 0:(reg_nlp.model.meta.nvar - 1)]
5253
v0 ./= sqrt(reg_nlp.model.meta.nvar)
54+
v1 = similar(v0)
5355

5456
has_bnds = any(l_bound .!= T(-Inf)) || any(u_bound .!= T(Inf))
5557
if has_bnds
@@ -68,7 +70,7 @@ function R2NSolver(
6870
shifted(reg_nlp.h, xk)
6971

7072
Bk = hess_op(reg_nlp, xk)
71-
sub_nlp = R2NModel(Bk, ∇fk, T(1), x0)
73+
sub_nlp = QuadraticModel(∇fk, Bk, σ = T(1), x0 = x0)
7274
subpb = RegularizedNLPModel(sub_nlp, ψ)
7375
substats = RegularizedExecutionStats(subpb)
7476
subsolver = subsolver(subpb)
@@ -84,6 +86,7 @@ function R2NSolver(
8486
s,
8587
s1,
8688
v0,
89+
v1,
8790
has_bnds,
8891
l_bound,
8992
u_bound,
@@ -98,7 +101,7 @@ end
98101

99102
function SolverCore.reset!(solver::R2NSolver)
100103
_reset_power_method!(solver.v0)
101-
B = solver.subpb.model.B
104+
B = solver.subpb.model.data.H
102105
isa(B, AbstractLinearOperator) && LinearOperators.reset!(B)
103106
end
104107

@@ -306,9 +309,9 @@ function SolverCore.solve!(
306309
found_λ = true
307310

308311
if opnorm_maxiter 0
309-
λmax, found_λ = opnorm(solver.subpb.model.B)
312+
λmax, found_λ = opnorm(solver.subpb.model.data.H)
310313
else
311-
λmax = power_method!(solver.subpb.model.B, solver.v0, solver.subpb.model.v, opnorm_maxiter)
314+
λmax = power_method!(solver.subpb.model.data.H, solver.v0, solver.v1, opnorm_maxiter)
312315
end
313316
found_λ || error("operator norm computation failed")
314317

@@ -337,8 +340,14 @@ function SolverCore.solve!(
337340
d -> φ1(d) + ψ(d)::T
338341
end
339342

340-
mk = let ψ = ψ, solver = solver
341-
d -> obj(solver.subpb.model, d, skip_sigma = true) + ψ(d)::T
343+
mk = let ψ = ψ, model = solver.subpb.model
344+
d -> begin
345+
temp_σ = model.data.σ
346+
model.data.σ = zero(T)
347+
_obj = obj(model, d) + ψ(d)
348+
model.data.σ = temp_σ
349+
return _obj
350+
end
342351
end
343352

344353
prox!(s1, ψ, mν∇fk, ν₁)
@@ -372,7 +381,7 @@ function SolverCore.solve!(
372381
while !done
373382
sub_atol = stats.iter == 0 ? 1.0e-3 : min(sqrt_ξ1_νInv ^ (1.5), sqrt_ξ1_νInv * 1e-3)
374383

375-
solver.subpb.model.σ = σk
384+
solver.subpb.model.data.σ = σk
376385
isa(solver.subsolver, R2DHSolver) && (solver.subsolver.D.d[1] = 1/ν₁)
377386
if isa(solver.subsolver, R2Solver) #FIXME
378387
solve!(
@@ -458,9 +467,9 @@ function SolverCore.solve!(
458467
end
459468

460469
if opnorm_maxiter 0
461-
λmax, found_λ = opnorm(solver.subpb.model.B)
470+
λmax, found_λ = opnorm(solver.subpb.model.data.H)
462471
else
463-
λmax = power_method!(solver.subpb.model.B, solver.v0, solver.subpb.model.v, opnorm_maxiter)
472+
λmax = power_method!(solver.subpb.model.data.H, solver.v0, solver.v1, opnorm_maxiter)
464473
end
465474
found_λ || error("operator norm computation failed")
466475
set_step_status!(stats, :accepted)

src/R2NModel.jl

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/RegularizedOptimization.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ using LinearOperators,
1111
ManualNLPModels,
1212
NLPModels,
1313
NLPModelsModifiers,
14+
QuadraticModels,
1415
RegularizedProblems,
1516
ShiftedProximalOperators,
1617
SolverCore
@@ -45,7 +46,6 @@ include("LMModel.jl")
4546
include("LM_alg.jl")
4647
include("LMTR_alg.jl")
4748
include("R2DH.jl")
48-
include("R2NModel.jl")
4949
include("R2N.jl")
5050
include("AL_alg.jl")
5151

src/TR_alg.jl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ mutable struct TRSolver{
1919
xkn::V
2020
s::V
2121
v0::V
22+
v1::V
2223
has_bnds::Bool
2324
l_bound::V
2425
u_bound::V
@@ -61,14 +62,15 @@ function TRSolver(
6162

6263
v0 = [(-1.0)^i for i = 0:(reg_nlp.model.meta.nvar - 1)]
6364
v0 ./= sqrt(reg_nlp.model.meta.nvar)
65+
v1 = similar(v0)
6466

6567
ψ =
6668
has_bnds || subsolver == TRDHSolver ?
6769
shifted(reg_nlp.h, xk, l_bound_m_x, u_bound_m_x, reg_nlp.selected) :
6870
shifted(reg_nlp.h, xk, T(1), χ)
6971

7072
Bk = hess_op(reg_nlp, xk)
71-
sub_nlp = R2NModel(Bk, ∇fk, zero(T), x0) #FIXME
73+
sub_nlp = QuadraticModel(∇fk, Bk, x0 = x0)
7274
subpb = RegularizedNLPModel(sub_nlp, ψ)
7375
substats = RegularizedExecutionStats(subpb)
7476
subsolver = subsolver(subpb)
@@ -83,6 +85,7 @@ function TRSolver(
8385
xkn,
8486
s,
8587
v0,
88+
v1,
8689
has_bnds,
8790
l_bound,
8891
u_bound,
@@ -307,9 +310,9 @@ function SolverCore.solve!(
307310
found_λ = true
308311

309312
if opnorm_maxiter 0
310-
λmax, found_λ = opnorm(solver.subpb.model.B)
313+
λmax, found_λ = opnorm(solver.subpb.model.data.H)
311314
else
312-
λmax = power_method!(solver.subpb.model.B, solver.v0, solver.subpb.model.v, opnorm_maxiter)
315+
λmax = power_method!(solver.subpb.model.data.H, solver.v0, solver.v1, opnorm_maxiter)
313316
end
314317
found_λ || error("operator norm computation failed")
315318

@@ -468,9 +471,9 @@ function SolverCore.solve!(
468471
end
469472

470473
if opnorm_maxiter 0
471-
λmax, found_λ = opnorm(solver.subpb.model.B)
474+
λmax, found_λ = opnorm(solver.subpb.model.data.H)
472475
else
473-
λmax = power_method!(solver.subpb.model.B, solver.v0, solver.subpb.model.v, opnorm_maxiter)
476+
λmax = power_method!(solver.subpb.model.data.H, solver.v0, solver.v1, opnorm_maxiter)
474477
end
475478
found_λ || error("operator norm computation failed")
476479

0 commit comments

Comments
 (0)