Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ NLPModelsModifiers = "e01155f1-5c6f-4375-a9d8-616dd036575f"
Percival = "01435c0c-c90d-11e9-3788-63660f8fbccc"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
ProximalOperators = "a725b495-10eb-56fe-b38b-717eba820537"
QuadraticModels = "f468eda6-eac5-11e8-05a5-ff9e497bcd19"
RegularizedProblems = "ea076b23-609f-44d2-bb12-a4ae45328278"
ShiftedProximalOperators = "d4fd37fa-580c-4e43-9b30-361c21aae263"
SolverCore = "ff4d7338-4cf1-434d-91df-b86cb86fb843"
Expand All @@ -33,6 +34,7 @@ NLPModelsModifiers = "0.7"
OptimizationProblems = "0.9.2"
Percival = "0.7.2"
ProximalOperators = "0.15"
QuadraticModels = "0.9.15"
RegularizedProblems = "0.1.3"
ShiftedProximalOperators = "0.2"
SolverCore = "0.3.10"
Expand Down
27 changes: 18 additions & 9 deletions src/R2N.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ mutable struct R2NSolver{
s::V
s1::V
v0::V
v1::V
has_bnds::Bool
l_bound::V
u_bound::V
Expand Down Expand Up @@ -50,6 +51,7 @@ function R2NSolver(

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

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

Bk = hess_op(reg_nlp, xk)
sub_nlp = R2NModel(Bk, ∇fk, T(1), x0)
sub_nlp = QuadraticModel(∇fk, Bk, σ = T(1), x0 = x0)
subpb = RegularizedNLPModel(sub_nlp, ψ)
substats = RegularizedExecutionStats(subpb)
subsolver = subsolver(subpb)
Expand All @@ -84,6 +86,7 @@ function R2NSolver(
s,
s1,
v0,
v1,
has_bnds,
l_bound,
u_bound,
Expand All @@ -98,7 +101,7 @@ end

function SolverCore.reset!(solver::R2NSolver)
_reset_power_method!(solver.v0)
B = solver.subpb.model.B
B = solver.subpb.model.data.H
isa(B, AbstractLinearOperator) && LinearOperators.reset!(B)
end

Expand Down Expand Up @@ -306,9 +309,9 @@ function SolverCore.solve!(
found_λ = true

if opnorm_maxiter ≤ 0
λmax, found_λ = opnorm(solver.subpb.model.B)
λmax, found_λ = opnorm(solver.subpb.model.data.H)
else
λmax = power_method!(solver.subpb.model.B, solver.v0, solver.subpb.model.v, opnorm_maxiter)
λmax = power_method!(solver.subpb.model.data.H, solver.v0, solver.v1, opnorm_maxiter)
end
found_λ || error("operator norm computation failed")

Expand Down Expand Up @@ -337,8 +340,14 @@ function SolverCore.solve!(
d -> φ1(d) + ψ(d)::T
end

mk = let ψ = ψ, solver = solver
d -> obj(solver.subpb.model, d, skip_sigma = true) + ψ(d)::T
mk = let ψ = ψ, model = solver.subpb.model
d -> begin
temp_σ = model.data.σ
model.data.σ = zero(T)
_obj = obj(model, d) + ψ(d)
model.data.σ = temp_σ
return _obj
end
end

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

solver.subpb.model.σ = σk
solver.subpb.model.data.σ = σk
isa(solver.subsolver, R2DHSolver) && (solver.subsolver.D.d[1] = 1/ν₁)
if isa(solver.subsolver, R2Solver) #FIXME
solve!(
Expand Down Expand Up @@ -458,9 +467,9 @@ function SolverCore.solve!(
end

if opnorm_maxiter ≤ 0
λmax, found_λ = opnorm(solver.subpb.model.B)
λmax, found_λ = opnorm(solver.subpb.model.data.H)
else
λmax = power_method!(solver.subpb.model.B, solver.v0, solver.subpb.model.v, opnorm_maxiter)
λmax = power_method!(solver.subpb.model.data.H, solver.v0, solver.v1, opnorm_maxiter)
end
found_λ || error("operator norm computation failed")
set_step_status!(stats, :accepted)
Expand Down
53 changes: 0 additions & 53 deletions src/R2NModel.jl

This file was deleted.

2 changes: 1 addition & 1 deletion src/RegularizedOptimization.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ using LinearOperators,
ManualNLPModels,
NLPModels,
NLPModelsModifiers,
QuadraticModels,
RegularizedProblems,
ShiftedProximalOperators,
SolverCore
Expand Down Expand Up @@ -45,7 +46,6 @@ include("LMModel.jl")
include("LM_alg.jl")
include("LMTR_alg.jl")
include("R2DH.jl")
include("R2NModel.jl")
include("R2N.jl")
include("AL_alg.jl")

Expand Down
13 changes: 8 additions & 5 deletions src/TR_alg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ mutable struct TRSolver{
xkn::V
s::V
v0::V
v1::V
has_bnds::Bool
l_bound::V
u_bound::V
Expand Down Expand Up @@ -61,14 +62,15 @@ function TRSolver(

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

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

Bk = hess_op(reg_nlp, xk)
sub_nlp = R2NModel(Bk, ∇fk, zero(T), x0) #FIXME
sub_nlp = QuadraticModel(∇fk, Bk, x0 = x0)
subpb = RegularizedNLPModel(sub_nlp, ψ)
substats = RegularizedExecutionStats(subpb)
subsolver = subsolver(subpb)
Expand All @@ -83,6 +85,7 @@ function TRSolver(
xkn,
s,
v0,
v1,
has_bnds,
l_bound,
u_bound,
Expand Down Expand Up @@ -307,9 +310,9 @@ function SolverCore.solve!(
found_λ = true

if opnorm_maxiter ≤ 0
λmax, found_λ = opnorm(solver.subpb.model.B)
λmax, found_λ = opnorm(solver.subpb.model.data.H)
else
λmax = power_method!(solver.subpb.model.B, solver.v0, solver.subpb.model.v, opnorm_maxiter)
λmax = power_method!(solver.subpb.model.data.H, solver.v0, solver.v1, opnorm_maxiter)
end
found_λ || error("operator norm computation failed")

Expand Down Expand Up @@ -468,9 +471,9 @@ function SolverCore.solve!(
end

if opnorm_maxiter ≤ 0
λmax, found_λ = opnorm(solver.subpb.model.B)
λmax, found_λ = opnorm(solver.subpb.model.data.H)
else
λmax = power_method!(solver.subpb.model.B, solver.v0, solver.subpb.model.v, opnorm_maxiter)
λmax = power_method!(solver.subpb.model.data.H, solver.v0, solver.v1, opnorm_maxiter)
end
found_λ || error("operator norm computation failed")

Expand Down
Loading