Skip to content

Commit af57c36

Browse files
add sparse matrix option
1 parent 33a583d commit af57c36

2 files changed

Lines changed: 9 additions & 2 deletions

File tree

src/R2N.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ function R2NSolver(
7070
has_bnds ? shifted(reg_nlp.h, xk, l_bound_m_x, u_bound_m_x, reg_nlp.selected) :
7171
shifted(reg_nlp.h, xk)
7272

73+
sparse = isa(reg_nlp.model, QuasiNewtonModel) ? false : sparse
7374
Bk = sparse ? hess(reg_nlp, xk) : hess_op(reg_nlp, xk)
7475
sub_nlp = QuadraticModel(∇fk, Bk, σ = T(1), x0 = x0)
7576
subpb = RegularizedNLPModel(sub_nlp, ψ)
@@ -465,6 +466,8 @@ function SolverCore.solve!(
465466
qn_update_y!(nlp, solver, stats)
466467
push!(nlp, s, solver.y)
467468
qn_copy!(nlp, solver, stats)
469+
elseif isa(solver.subpb.model.data.H, AbstractMatrix)
470+
hess_coord!(reg_nlp, xk, solver.subpb.model.data.H.nzval)
468471
end
469472

470473
if opnorm_maxiter 0

src/TR_alg.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ function TRSolver(
3636
χ::X = NormLinf(one(T)),
3737
subsolver = R2Solver,
3838
m_monotone::Int = 1,
39+
sparse::Bool = false,
3940
) where {T, V, X}
4041
x0 = reg_nlp.model.meta.x0
4142
l_bound = reg_nlp.model.meta.lvar
@@ -69,8 +70,9 @@ function TRSolver(
6970
shifted(reg_nlp.h, xk, l_bound_m_x, u_bound_m_x, reg_nlp.selected) :
7071
shifted(reg_nlp.h, xk, T(1), χ)
7172

72-
Bk = hess_op(reg_nlp, xk)
73-
sub_nlp = QuadraticModel(∇fk, Bk, x0 = x0)
73+
sparse = isa(reg_nlp.model, QuasiNewtonModel) ? false : sparse
74+
Bk = sparse ? hess(reg_nlp, xk) : hess_op(reg_nlp, xk)
75+
sub_nlp = QuadraticModel(∇fk, Bk, σ = T(1), x0 = x0)
7476
subpb = RegularizedNLPModel(sub_nlp, ψ)
7577
substats = RegularizedExecutionStats(subpb)
7678
subsolver = subsolver(subpb)
@@ -468,6 +470,8 @@ function SolverCore.solve!(
468470
if quasiNewtTest
469471
@. ∇fk⁻ = ∇fk - ∇fk⁻
470472
push!(nlp, s, ∇fk⁻) # update QN operator
473+
elseif isa(solver.subpb.model.data.H, AbstractMatrix)
474+
hess_coord!(reg_nlp, xk, solver.subpb.model.data.H.nzval)
471475
end
472476

473477
if opnorm_maxiter 0

0 commit comments

Comments
 (0)