JuliaNLSolvers / LineSearches.jl

Line search methods for optimization and root-finding
Other
115 stars 33 forks source link

AssertionError: isfinite(phi_c) && isfinite(dphi_c) #157

Open ErikLW opened 2 years ago

ErikLW commented 2 years ago

Hi, I have seen, that this issue has come up before, but since this was some time ago I thought it might be helpful to start another issue: I am optimizing a function using the Optim package with uses LineSearch.jl for the line search. Can you explain to me how I should interpret the following error and what I could do to avoid it? Thanks in advance

AssertionError: isfinite(phi_c) && isfinite(dphi_c)

Stacktrace:
  [1] secant2!(ϕdϕ::LineSearches.var"#ϕdϕ#6"{Optim.ManifoldObjective{OnceDifferentiable{Float64, Array{Float64, 5}, Array{Float64, 5}}}, Array{Float64, 5}, Array{Float64, 5}, Array{Float64, 5}}, alphas::Vector{Float64}, values::Vector{Float64}, slopes::Vector{Float64}, ia::Int64, ib::Int64, phi_lim::Float64, delta::Float64, sigma::Float64, display::Int64)
    @ LineSearches C:\Users\weerd\.julia\packages\LineSearches\Ki4c5\src\hagerzhang.jl:369
  [2] (::HagerZhang{Float64, Base.RefValue{Bool}})(ϕ::Function, ϕdϕ::LineSearches.var"#ϕdϕ#6"{Optim.ManifoldObjective{OnceDifferentiable{Float64, Array{Float64, 5}, Array{Float64, 5}}}, Array{Float64, 5}, Array{Float64, 5}, Array{Float64, 5}}, c::Float64, phi_0::Float64, dphi_0::Float64)
    @ LineSearches C:\Users\weerd\.julia\packages\LineSearches\Ki4c5\src\hagerzhang.jl:269
  [3] HagerZhang
    @ C:\Users\weerd\.julia\packages\LineSearches\Ki4c5\src\hagerzhang.jl:101 [inlined]
  [4] perform_linesearch!(state::Optim.LBFGSState{Array{Float64, 5}, Vector{Array{Float64, 5}}, Vector{Array{Float64, 5}}, Float64, Array{Float64, 5}}, method::LBFGS{Nothing, InitialStatic{Float64}, HagerZhang{Float64, Base.RefValue{Bool}}, Optim.var"#20#22"}, d::Optim.ManifoldObjective{OnceDifferentiable{Float64, Array{Float64, 5}, Array{Float64, 5}}})
    @ Optim C:\Users\weerd\.julia\packages\Optim\LScFu\src\utilities\perform_linesearch.jl:59
  [5] update_state!(d::OnceDifferentiable{Float64, Array{Float64, 5}, Array{Float64, 5}}, state::Optim.LBFGSState{Array{Float64, 5}, Vector{Array{Float64, 5}}, Vector{Array{Float64, 5}}, Float64, Array{Float64, 5}}, method::LBFGS{Nothing, InitialStatic{Float64}, HagerZhang{Float64, Base.RefValue{Bool}}, Optim.var"#20#22"})
    @ Optim C:\Users\weerd\.julia\packages\Optim\LScFu\src\multivariate\solvers\first_order\l_bfgs.jl:204
  [6] optimize(d::OnceDifferentiable{Float64, Array{Float64, 5}, Array{Float64, 5}}, initial_x::Array{Float64, 5}, method::LBFGS{Nothing, InitialStatic{Float64}, HagerZhang{Float64, Base.RefValue{Bool}}, Optim.var"#20#22"}, options::Optim.Options{Float64, Nothing}, state::Optim.LBFGSState{Array{Float64, 5}, Vector{Array{Float64, 5}}, Vector{Array{Float64, 5}}, Float64, Array{Float64, 5}})
    @ Optim C:\Users\weerd\.julia\packages\Optim\LScFu\src\multivariate\optimize\optimize.jl:54
  [7] optimize
    @ C:\Users\weerd\.julia\packages\Optim\LScFu\src\multivariate\optimize\optimize.jl:36 [inlined]
  [8] optimize(f::Function, g::Function, initial_x::Array{Float64, 5}, method::LBFGS{Nothing, InitialStatic{Float64}, HagerZhang{Float64, Base.RefValue{Bool}}, Optim.var"#20#22"}, options::Optim.Options{Float64, Nothing}; inplace::Bool, autodiff::Symbol)
    @ Optim C:\Users\weerd\.julia\packages\Optim\LScFu\src\multivariate\optimize\interface.jl:155
jbrea commented 4 months ago

I'm facing the same issue. Any ideas what is causing this?

timholy commented 1 month ago

Once #177 merges you should be able to gain more insight. But in general terms, your objective function seems to be returning non-finite values or derivatives. (@assert means "the following is supposed to be true," and if you get an AssertionError it means that it was not true.)

pkofod commented 1 month ago

It's merged and you can use it on master. I will try to put out a new version soon.