Skip to content

Commit 02a1199

Browse files
committed
fix: initial objective for termination conditions
1 parent 9ac5ca0 commit 02a1199

File tree

3 files changed

+28
-7
lines changed

3 files changed

+28
-7
lines changed

lib/NonlinearSolveBase/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "NonlinearSolveBase"
22
uuid = "be0214bd-f91f-a760-ac4e-3421ce2b2da0"
33
authors = ["Avik Pal <avikpal@mit.edu> and contributors"]
4-
version = "1.5.2"
4+
version = "1.5.3"
55

66
[deps]
77
ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"

lib/NonlinearSolveBase/src/termination_conditions.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ function CommonSolve.init(
4949

5050
if mode isa AbstractSafeNonlinearTerminationMode
5151
if mode isa AbsNormSafeTerminationMode || mode isa AbsNormSafeBestTerminationMode
52-
initial_objective = Linf_NORM(du)
52+
initial_objective = Utils.apply_norm(mode.internalnorm, du)
5353
u0_norm = nothing
5454
else
55-
initial_objective = Linf_NORM(du) /
56-
(Utils.nonallocating_maximum(+, du, u) + eps(TT))
55+
initial_objective = Utils.apply_norm(mode.internalnorm, du) /
56+
(Utils.apply_norm(mode.internalnorm, du, u) + eps(reltol))
5757
u0_norm = mode.max_stalled_steps === nothing ? nothing : L2_NORM(u)
5858
end
5959
objectives_trace = Vector{TT}(undef, mode.patience_steps)
@@ -107,10 +107,10 @@ function SciMLBase.reinit!(
107107

108108
if mode isa AbstractSafeNonlinearTerminationMode
109109
if mode isa AbsNormSafeTerminationMode || mode isa AbsNormSafeBestTerminationMode
110-
cache.initial_objective = Linf_NORM(du)
110+
cache.initial_objective = Utils.apply_norm(mode.internalnorm, du)
111111
else
112-
cache.initial_objective = Linf_NORM(du) /
113-
(Utils.nonallocating_maximum(+, du, u) + eps(TT))
112+
cache.initial_objective = Utils.apply_norm(mode.internalnorm, du) /
113+
(Utils.apply_norm(mode.internalnorm, du, u) + eps(TT))
114114
cache.max_stalled_steps !== nothing && (cache.u0_norm = L2_NORM(u))
115115
end
116116
cache.best_objective_value = cache.initial_objective

lib/NonlinearSolveFirstOrder/test/least_squares_tests.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,24 @@ end
5454
@test norm(sol.resid, 2) < 1e-6
5555
end
5656
end
57+
58+
@testitem "Correct Best Solution: #565" setup=[CoreNLLSTesting] tags=[:core] begin
59+
using StableRNGs
60+
61+
x = collect(0:0.1:10)
62+
63+
line_fct(x, p) = p[1] .+ p[2] .* x
64+
65+
y_line = line_fct(x, [1, 3])
66+
y_line_n = line_fct(x, [1, 3]) + randn(StableRNG(0), length(x))
67+
68+
res(β, (x, y)) = line_fct(x, β) .- y
69+
70+
prob = NonlinearLeastSquaresProblem(res, [1, 3], p = (x, y_line_n))
71+
sol1 = solve(prob; maxiters = 1000)
72+
73+
prob = NonlinearLeastSquaresProblem(res, [1, 5], p = (x, y_line_n))
74+
sol2 = solve(prob; maxiters = 1000)
75+
76+
@test sol1.u sol2.u
77+
end

0 commit comments

Comments
 (0)