Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TrustRegion(radius_update_scheme=RadiusUpdateSchemes.Bastin) doesn't respect autodiff setting . #360

Closed
oscardssmith opened this issue Jan 30, 2024 · 0 comments · Fixed by #361
Labels
bug Something isn't working

Comments

@oscardssmith
Copy link
Contributor

When solving a nonlinear problem that doesn't support autodiff, the Bastin update scheme uses autodiff anyways. This is especially problematic because Bastin is used in the default algorithm.

Minimal Reproducible Example 👇

Without MRE, we would only be able to help you to a limited extent, and attention to the issue would be limited. to know more about MRE refer to wikipedia and stackoverflow.

using NonlinearSolve
g(u::Vector{Float64},p) = u
p = NonlinearProblem(g, [1.])
solve(p, TrustRegion(autodiff=AutoFiniteDiff(), radius_update_scheme=RadiusUpdateSchemes.Bastin))

Error & Stacktrace ⚠️

ERROR: MethodError: no method matching g(::Vector{ForwardDiff.Dual{ForwardDiff.Tag{…}, Float64, 1}}, ::SciMLBase.NullParameters)
An arithmetic operation was performed on a NullParameters object. This means no parameters were passed
into the AbstractSciMLProblem (e.x.: ODEProblem) but the parameters object `p` was used in an arithmetic
expression. Two common reasons for this issue are:

1. Forgetting to pass parameters into the problem constructor. For example, `ODEProblem(f,u0,tspan)` should
be `ODEProblem(f,u0,tspan,p)` in order to use parameters.

2. Using the wrong function signature. For example, with `ODEProblem`s the function signature is always
`f(du,u,p,t)` for the in-place form or `f(u,p,t)` for the out-of-place form. Note that the `p` argument
will always be in the function signature regardless of if the problem is defined with parameters!


ERROR: MethodError: no method matching g(::Vector{ForwardDiff.Dual{ForwardDiff.Tag{…}, Float64, 1}}, ::SciMLBase.NullParameters)

Closest candidates are:
  g(::Vector{Float64}, ::Any)
   @ Main REPL[65]:1

Stacktrace:
  [1] (::NonlinearFunction{…})(::Vector{…}, ::Vararg{…})
    @ SciMLBase ~/.julia/packages/SciMLBase/bp17m/src/scimlfunctions.jl:2356
  [2] (::SciMLBase.JacobianWrapper{false, NonlinearFunction{…}, SciMLBase.NullParameters})(u::Vector{ForwardDiff.Dual{…}})
    @ SciMLBase ~/.julia/packages/SciMLBase/bp17m/src/function_wrappers.jl:97
  [3] auto_jacvec(f::SciMLBase.JacobianWrapper{…}, x::Vector{…}, v::Vector{…})
    @ SparseDiffTools ~/.julia/packages/SparseDiffTools/qxnHN/src/differentiation/jaches_products.jl:32
  [4] (::NonlinearSolve.var"#95#106"{})(v::Vector{…}, u::Vector{…}, p::SciMLBase.NullParameters)
    @ NonlinearSolve ~/.julia/packages/NonlinearSolve/7Y0dI/src/internal/operators.jl:114
  [5] (::NonlinearSolve.JacobianOperator{…})(Jv::Vector{…}, v::Vector{…}, u::Vector{…}, p::SciMLBase.NullParameters)
    @ NonlinearSolve ~/.julia/packages/NonlinearSolve/7Y0dI/src/internal/operators.jl:198
  [6] mul!(Jv::Vector{…}, J::NonlinearSolve.StatefulJacobianOperator{…}, v::Vector{…})
    @ NonlinearSolve ~/.julia/packages/NonlinearSolve/7Y0dI/src/internal/operators.jl:234
  [7] __mul!(C::Vector{…}, A::NonlinearSolve.StatefulJacobianOperator{…}, B::Vector{…})
    @ MaybeInplace ~/.julia/packages/MaybeInplace/DQx9o/src/MaybeInplace.jl:304
  [8] macro expansion
    @ ~/.julia/packages/MaybeInplace/DQx9o/src/MaybeInplace.jl:171 [inlined]
  [9] __internal_solve!(cache::NonlinearSolve.GenericTrustRegionSchemeCache{…}, J::Matrix{…}, fu::Vector{…}, u::Vector{…}, δu::Vector{…}, descent_stats::@NamedTuple{})
    @ NonlinearSolve ~/.julia/packages/NonlinearSolve/7Y0dI/src/globalization/trust_region.jl:519
 [10] __step!(cache::NonlinearSolve.GeneralizedFirstOrderAlgorithmCache{…}; recompute_jacobian::Nothing, kwargs::@Kwargs{})
    @ NonlinearSolve ~/.julia/packages/NonlinearSolve/7Y0dI/src/core/generalized_first_order.jl:244
 [11] __step!
    @ ~/.julia/packages/NonlinearSolve/7Y0dI/src/core/generalized_first_order.jl:203 [inlined]
 [12] #step!#207
    @ ~/.julia/packages/NonlinearSolve/7Y0dI/src/core/generic.jl:52 [inlined]
 [13] step!
    @ ~/.julia/packages/NonlinearSolve/7Y0dI/src/core/generic.jl:48 [inlined]
 [14] solve!(cache::NonlinearSolve.AbstractNonlinearSolveCache)
    @ NonlinearSolve ~/.julia/packages/NonlinearSolve/7Y0dI/src/core/generic.jl:13 [inlined]
 [15] __solve(::NonlinearProblem{…}, ::GeneralizedFirstOrderAlgorithm{…}; kwargs::@Kwargs{})
    @ NonlinearSolve ~/.julia/packages/NonlinearSolve/7Y0dI/src/core/generic.jl:4
 [16] __solve
    @ NonlinearSolve ~/.julia/packages/NonlinearSolve/7Y0dI/src/core/generic.jl:1 [inlined]
 [17] #solve_call#34
    @ DiffEqBase ~/.julia/packages/DiffEqBase/eLhx9/src/solve.jl:609 [inlined]
 [18] solve_call
    @ DiffEqBase ~/.julia/packages/DiffEqBase/eLhx9/src/solve.jl:567 [inlined]
 [19] #solve_up#42
    @ DiffEqBase ~/.julia/packages/DiffEqBase/eLhx9/src/solve.jl:1050 [inlined]
 [20] solve_up
    @ DiffEqBase ~/.julia/packages/DiffEqBase/eLhx9/src/solve.jl:1044 [inlined]
 [21] #solve#41
    @ DiffEqBase ~/.julia/packages/DiffEqBase/eLhx9/src/solve.jl:1038 [inlined]
 [22] solve(prob::NonlinearProblem{…}, args::GeneralizedFirstOrderAlgorithm{…})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/eLhx9/src/solve.jl:1028
 [23] top-level scope
    @ REPL[66]:1
@oscardssmith oscardssmith added the bug Something isn't working label Jan 30, 2024
@oscardssmith oscardssmith changed the title TrustRegion(radius_update_scheme=RadiusUpdateSchemes.Fan) doesn't respect autodiff setting . TrustRegion(radius_update_scheme=RadiusUpdateSchemes.Bastin) doesn't respect autodiff setting . Jan 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant