Skip to content

Commit 1ad7a3a

Browse files
authored
fix: remove uses of LineSearches.jl backtracking (#480)
* fix: remove uses of LineSearches.jl backtracking * docs: fix chunksize
1 parent e7e218b commit 1ad7a3a

File tree

6 files changed

+54
-45
lines changed

6 files changed

+54
-45
lines changed

.github/workflows/Downgrade.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
runs-on: ubuntu-latest
1616
strategy:
1717
matrix:
18-
version: ["1"]
18+
version: ["1.10"]
1919
steps:
2020
- uses: actions/checkout@v4
2121
- uses: julia-actions/setup-julia@v2

Project.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "NonlinearSolve"
22
uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
33
authors = ["SciML"]
4-
version = "3.15.1"
4+
version = "3.15.2"
55

66
[deps]
77
ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
@@ -80,7 +80,7 @@ Hwloc = "3"
8080
InteractiveUtils = "<0.0.1, 1"
8181
LazyArrays = "1.8.2, 2"
8282
LeastSquaresOptim = "0.8.5"
83-
LineSearch = "0.1.2"
83+
LineSearch = "0.1.4"
8484
LineSearches = "7.3"
8585
LinearAlgebra = "1.10"
8686
LinearSolve = "2.35"
@@ -96,7 +96,7 @@ Pkg = "1.10"
9696
PrecompileTools = "1.2"
9797
Preferences = "1.4"
9898
Printf = "1.10"
99-
Random = "1.91"
99+
Random = "1.10"
100100
ReTestItems = "1.24"
101101
RecursiveArrayTools = "3.27"
102102
Reexport = "1.2"

docs/src/tutorials/large_systems.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,12 @@ prob_brusselator_2d_autosparse = NonlinearProblem(
143143
u0, p; abstol = 1e-10, reltol = 1e-10)
144144
145145
@btime solve(prob_brusselator_2d_autosparse,
146-
NewtonRaphson(; autodiff = AutoForwardDiff(; chunksize = 32)));
146+
NewtonRaphson(; autodiff = AutoForwardDiff(; chunksize = 12)));
147147
@btime solve(prob_brusselator_2d_autosparse,
148-
NewtonRaphson(; autodiff = AutoForwardDiff(; chunksize = 32),
148+
NewtonRaphson(; autodiff = AutoForwardDiff(; chunksize = 12),
149149
linsolve = KLUFactorization()));
150150
@btime solve(prob_brusselator_2d_autosparse,
151-
NewtonRaphson(; autodiff = AutoForwardDiff(; chunksize = 32),
151+
NewtonRaphson(; autodiff = AutoForwardDiff(; chunksize = 12),
152152
linsolve = KrylovJL_GMRES()));
153153
nothing # hide
154154
```

src/NonlinearSolve.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ export NewtonDescent, SteepestDescent, Dogleg, DampedNewtonDescent, GeodesicAcce
176176
## Line Search Algorithms
177177
export LineSearchesJL, LiFukushimaLineSearch # FIXME: deprecated. use LineSearch.jl directly
178178
export Static, HagerZhang, MoreThuente, StrongWolfe, BackTracking # FIXME: deprecated
179-
export NoLineSearch, RobustNonMonotoneLineSearch
179+
export LineSearch, NoLineSearch, RobustNonMonotoneLineSearch
180180
## Trust Region Algorithms
181181
export RadiusUpdateSchemes
182182

src/default.jl

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,7 @@ function RobustMultiNewton(::Type{T} = Float64; concrete_jac = nothing, linsolve
364364
radius_update_scheme = RadiusUpdateSchemes.Bastin),
365365
NewtonRaphson(; concrete_jac, linsolve, precs, autodiff),
366366
NewtonRaphson(; concrete_jac, linsolve, precs,
367-
linesearch = LineSearch.LineSearchesJL(;
368-
method = LineSearches.BackTracking()),
369-
autodiff),
367+
linesearch = LineSearch.BackTracking(), autodiff),
370368
TrustRegion(; concrete_jac, linsolve, precs,
371369
radius_update_scheme = RadiusUpdateSchemes.NLsolve, autodiff),
372370
TrustRegion(; concrete_jac, linsolve, precs,
@@ -407,9 +405,7 @@ function FastShortcutNonlinearPolyalg(
407405
else
408406
algs = (NewtonRaphson(; concrete_jac, linsolve, precs, autodiff),
409407
NewtonRaphson(; concrete_jac, linsolve, precs,
410-
linesearch = LineSearch.LineSearchesJL(;
411-
method = LineSearches.BackTracking()),
412-
autodiff),
408+
linesearch = LineSearch.BackTracking(), autodiff),
413409
TrustRegion(; concrete_jac, linsolve, precs, autodiff),
414410
TrustRegion(; concrete_jac, linsolve, precs,
415411
radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff))
@@ -430,9 +426,7 @@ function FastShortcutNonlinearPolyalg(
430426
SimpleKlement(),
431427
NewtonRaphson(; concrete_jac, linsolve, precs, autodiff),
432428
NewtonRaphson(; concrete_jac, linsolve, precs,
433-
linesearch = LineSearch.LineSearchesJL(;
434-
method = LineSearches.BackTracking()),
435-
autodiff),
429+
linesearch = LineSearch.BackTracking(), autodiff),
436430
TrustRegion(; concrete_jac, linsolve, precs,
437431
radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff))
438432
end
@@ -451,9 +445,7 @@ function FastShortcutNonlinearPolyalg(
451445
Klement(; linsolve, precs, autodiff),
452446
NewtonRaphson(; concrete_jac, linsolve, precs, autodiff),
453447
NewtonRaphson(; concrete_jac, linsolve, precs,
454-
linesearch = LineSearch.LineSearchesJL(;
455-
method = LineSearches.BackTracking()),
456-
autodiff),
448+
linesearch = LineSearch.BackTracking(), autodiff),
457449
TrustRegion(; concrete_jac, linsolve, precs, autodiff),
458450
TrustRegion(; concrete_jac, linsolve, precs,
459451
radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff))
@@ -489,9 +481,7 @@ function FastShortcutNLLSPolyalg(
489481
linsolve, precs, disable_geodesic = Val(true), autodiff, kwargs...),
490482
TrustRegion(; concrete_jac, linsolve, precs, autodiff, kwargs...),
491483
GaussNewton(; concrete_jac, linsolve, precs,
492-
linesearch = LineSearch.LineSearchesJL(;
493-
method = LineSearches.BackTracking()),
494-
autodiff, kwargs...),
484+
linesearch = LineSearch.BackTracking(), autodiff, kwargs...),
495485
TrustRegion(; concrete_jac, linsolve, precs,
496486
radius_update_scheme = RadiusUpdateSchemes.Bastin, autodiff, kwargs...),
497487
LevenbergMarquardt(; linsolve, precs, autodiff, kwargs...))

test/core/rootfind_tests.jl

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,15 @@ end
5353
# --- NewtonRaphson tests ---
5454

5555
@testitem "NewtonRaphson" setup=[CoreRootfindTesting] tags=[:core] begin
56-
@testset "LineSearch: $(_nameof(lsmethod)) LineSearch AD: $(_nameof(ad))" for lsmethod in (
57-
Static(), StrongWolfe(), BackTracking(), HagerZhang(), MoreThuente()),
58-
ad in (AutoForwardDiff(), AutoZygote(), AutoFiniteDiff())
56+
@testset "LineSearch: $(_nameof(linesearch)) LineSearch AD: $(_nameof(ad))" for ad in (
57+
AutoForwardDiff(), AutoZygote(), AutoFiniteDiff()
58+
),
59+
linesearch in (
60+
Static(; autodiff = ad), StrongWolfe(; autodiff = ad),
61+
BackTracking(; autodiff = ad), LineSearch.BackTracking(; autodiff = ad),
62+
HagerZhang(; autodiff = ad), MoreThuente(; autodiff = ad)
63+
)
5964

60-
linesearch = LineSearchesJL(; method = lsmethod, autodiff = ad)
6165
u0s = ([1.0, 1.0], @SVector[1.0, 1.0], 1.0)
6266

6367
@testset "[OOP] u0: $(typeof(u0))" for u0 in u0s
@@ -463,14 +467,17 @@ end
463467
# --- Broyden tests ---
464468

465469
@testitem "Broyden" setup=[CoreRootfindTesting] tags=[:core] begin
466-
@testset "LineSearch: $(_nameof(lsmethod)) LineSearch AD: $(_nameof(ad)) Init Jacobian: $(init_jacobian) Update Rule: $(update_rule)" for lsmethod in (
467-
Static(), StrongWolfe(), BackTracking(),
468-
HagerZhang(), MoreThuente(), LiFukushimaLineSearch()),
469-
ad in (AutoForwardDiff(), AutoZygote(), AutoFiniteDiff()),
470+
@testset "LineSearch: $(_nameof(linesearch)) LineSearch AD: $(_nameof(ad)) Init Jacobian: $(init_jacobian) Update Rule: $(update_rule)" for ad in (
471+
AutoForwardDiff(), AutoZygote(), AutoFiniteDiff()
472+
),
473+
linesearch in (
474+
Static(; autodiff = ad), StrongWolfe(; autodiff = ad),
475+
BackTracking(; autodiff = ad), LineSearch.BackTracking(; autodiff = ad),
476+
HagerZhang(; autodiff = ad), MoreThuente(; autodiff = ad)
477+
),
470478
init_jacobian in (Val(:identity), Val(:true_jacobian)),
471479
update_rule in (Val(:good_broyden), Val(:bad_broyden), Val(:diagonal))
472480

473-
linesearch = LineSearchesJL(; method = lsmethod, autodiff = ad)
474481
u0s = ([1.0, 1.0], @SVector[1.0, 1.0], 1.0)
475482

476483
@testset "[OOP] u0: $(typeof(u0))" for u0 in u0s
@@ -513,12 +520,16 @@ end
513520
# --- Klement tests ---
514521

515522
@testitem "Klement" setup=[CoreRootfindTesting] tags=[:core] begin
516-
@testset "LineSearch: $(_nameof(lsmethod)) LineSearch AD: $(_nameof(ad)) Init Jacobian: $(init_jacobian)" for lsmethod in (
517-
Static(), StrongWolfe(), BackTracking(), HagerZhang(), MoreThuente()),
518-
ad in (AutoForwardDiff(), AutoZygote(), AutoFiniteDiff()),
523+
@testset "LineSearch: $(_nameof(linesearch)) LineSearch AD: $(_nameof(ad)) Init Jacobian: $(init_jacobian)" for ad in (
524+
AutoForwardDiff(), AutoZygote(), AutoFiniteDiff()
525+
),
526+
linesearch in (
527+
Static(; autodiff = ad), StrongWolfe(; autodiff = ad),
528+
BackTracking(; autodiff = ad), LineSearch.BackTracking(; autodiff = ad),
529+
HagerZhang(; autodiff = ad), MoreThuente(; autodiff = ad)
530+
),
519531
init_jacobian in (Val(:identity), Val(:true_jacobian), Val(:true_jacobian_diagonal))
520532

521-
linesearch = LineSearchesJL(; method = lsmethod, autodiff = ad)
522533
u0s = ([1.0, 1.0], @SVector[1.0, 1.0], 1.0)
523534

524535
@testset "[OOP] u0: $(typeof(u0))" for u0 in u0s
@@ -562,31 +573,39 @@ end
562573
# --- LimitedMemoryBroyden tests ---
563574

564575
@testitem "LimitedMemoryBroyden" setup=[CoreRootfindTesting] tags=[:core] begin
565-
@testset "LineSearch: $(_nameof(lsmethod)) LineSearch AD: $(_nameof(ad))" for lsmethod in (
566-
Static(), StrongWolfe(), BackTracking(),
567-
HagerZhang(), MoreThuente(), LiFukushimaLineSearch()),
568-
ad in (AutoForwardDiff(), AutoZygote(), AutoFiniteDiff())
576+
@testset "LineSearch: $(_nameof(linesearch)) LineSearch AD: $(_nameof(ad))" for ad in (
577+
AutoForwardDiff(), AutoZygote(), AutoFiniteDiff()
578+
),
579+
linesearch in (
580+
Static(; autodiff = ad), StrongWolfe(; autodiff = ad),
581+
BackTracking(; autodiff = ad), LineSearch.BackTracking(; autodiff = ad),
582+
HagerZhang(; autodiff = ad), MoreThuente(; autodiff = ad),
583+
LiFukushimaLineSearch()
584+
)
569585

570-
linesearch = LineSearchesJL(; method = lsmethod, autodiff = ad)
571586
u0s = ([1.0, 1.0], @SVector[1.0, 1.0], 1.0)
572587

573588
@testset "[OOP] u0: $(typeof(u0))" for u0 in u0s
589+
broken = linesearch isa BackTracking && ad isa AutoFiniteDiff && u0 isa Vector
590+
574591
solver = LimitedMemoryBroyden(; linesearch)
575592
sol = benchmark_nlsolve_oop(quadratic_f, u0; solver)
576-
@test SciMLBase.successful_retcode(sol)
577-
@test all(abs.(sol.u .* sol.u .- 2) .< 1e-9)
593+
@test SciMLBase.successful_retcode(sol) broken=broken
594+
@test all(abs.(sol.u .* sol.u .- 2) .< 1e-9) broken=broken
578595

579596
cache = init(NonlinearProblem{false}(quadratic_f, u0, 2.0),
580597
LimitedMemoryBroyden(; linesearch), abstol = 1e-9)
581598
@test (@ballocated solve!($cache)) < 200
582599
end
583600

584601
@testset "[IIP] u0: $(typeof(u0))" for u0 in ([1.0, 1.0],)
602+
broken = linesearch isa BackTracking && ad isa AutoFiniteDiff && u0 isa Vector
585603
ad isa AutoZygote && continue
604+
586605
solver = LimitedMemoryBroyden(; linesearch)
587606
sol = benchmark_nlsolve_iip(quadratic_f!, u0; solver)
588-
@test SciMLBase.successful_retcode(sol)
589-
@test all(abs.(sol.u .* sol.u .- 2) .< 1e-9)
607+
@test SciMLBase.successful_retcode(sol) broken=broken
608+
@test all(abs.(sol.u .* sol.u .- 2) .< 1e-9) broken=broken
590609

591610
cache = init(NonlinearProblem{true}(quadratic_f!, u0, 2.0),
592611
LimitedMemoryBroyden(; linesearch), abstol = 1e-9)

0 commit comments

Comments
 (0)