Skip to content

Commit f85deac

Browse files
solve function signature bugs
1 parent 576bb88 commit f85deac

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

src/LM_alg.jl

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ mutable struct LMSolver{
1717
mν∇fk::V
1818
Fk::V
1919
Fkn::V
20+
Jv::V
21+
Jtv::V
2022
ψ::G
2123
xkn::V
2224
s::V
@@ -43,6 +45,8 @@ function LMSolver(
4345
mν∇fk = similar(x0)
4446
Fk = similar(x0, reg_nls.model.nls_meta.nequ)
4547
Fkn = similar(Fk)
48+
Jv = similar(Fk)
49+
Jtv = similar(x0)
4650
xkn = similar(x0)
4751
s = similar(x0)
4852
has_bnds = any(l_bound .!= T(-Inf)) || any(u_bound .!= T(Inf)) || subsolver == TRDHSolver
@@ -78,6 +82,8 @@ function LMSolver(
7882
mν∇fk,
7983
Fk,
8084
Fkn,
85+
Jv,
86+
Jtv,
8187
ψ,
8288
xkn,
8389
s,
@@ -171,7 +177,7 @@ function LM(
171177
x0 = pop!(kwargs_dict, :x0, nls.meta.x0)
172178
reg_nls = RegularizedNLPModel(nls, h, selected)
173179
return LM(
174-
reg_nls,
180+
reg_nls;
175181
x = x0,
176182
atol = options.ϵa,
177183
rtol = options.ϵr,
@@ -188,11 +194,11 @@ function LM(
188194
)
189195
end
190196

191-
function LM(reg_nls::AbstractRegularizedNLPModel, kwargs...)
197+
function LM(reg_nls::AbstractRegularizedNLPModel; kwargs...)
192198
kwargs_dict = Dict(kwargs...)
193199
subsolver = pop!(kwargs_dict, :subsolver, R2Solver)
194200
solver = LMSolver(reg_nls, subsolver = subsolver)
195-
stats = RegularizedExecutionStats(reg_nls.model)
201+
stats = RegularizedExecutionStats(reg_nls)
196202
solve!(solver, reg_nls, stats; kwargs_dict...)
197203
return stats
198204
end
@@ -232,6 +238,8 @@ function SolverCore.solve!(
232238

233239
Fk = solver.Fk
234240
Fkn = solver.Fkn
241+
Jv = solver.Jv
242+
Jtv = solver.Jtv
235243
∇fk = solver.∇fk
236244
mν∇fk = solver.mν∇fk
237245
ψ = solver.ψ
@@ -284,7 +292,7 @@ function SolverCore.solve!(
284292
jtprod_residual!(nls, xk, Fk, ∇fk)
285293
fk = dot(Fk, Fk) / 2
286294

287-
σmax, found_σ = opnorm(solver.subpb.model.J)
295+
σmax, found_σ = opnorm(jac_op_residual!(nls, xk, Jv, Jtv))
288296
found_σ || error("operator norm computation failed")
289297
ν = θ / (σmax^2 + σk) # ‖J'J + σₖ I‖ = ‖J‖² + σₖ
290298
sqrt_ξ1_νInv = one(T)
@@ -417,7 +425,7 @@ function SolverCore.solve!(
417425

418426
# update opnorm if not linear least squares
419427
if nonlinear == true
420-
σmax, found_σ = opnorm(solver.subpb.model.J)
428+
σmax, found_σ = opnorm(jac_op_residual!(nls, xk, Jv, Jtv))
421429
found_σ || error("operator norm computation failed")
422430
end
423431
end

test/test_bounds.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@ for (h, h_name) ∈ ((NormL0(λ), "l0"),)
100100
x0 = zeros(bpdn_nls2.meta.nvar)
101101
@test has_bounds(bpdn_nls2)
102102
LM_out =
103-
LM(bpdn_nls2, h, options, x0 = x0, subsolver = R2DH, subsolver_options = subsolver_options)
103+
LM(bpdn_nls2, h, options, x0 = x0, subsolver = R2DHSolver)#, subsolver_options = subsolver_options)
104104
@test typeof(LM_out.solution) == typeof(bpdn.meta.x0)
105105
@test length(LM_out.solution) == bpdn.meta.nvar
106-
@test typeof(LM_out.dual_feas) == eltype(out.solution)
106+
@test typeof(LM_out.dual_feas) == eltype(LM_out.solution)
107107
@test LM_out.status == :first_order
108108
end
109109
end

0 commit comments

Comments
 (0)