diff --git a/lib/OptimizationNLopt/src/OptimizationNLopt.jl b/lib/OptimizationNLopt/src/OptimizationNLopt.jl index 31f7642a9..3803cc46f 100644 --- a/lib/OptimizationNLopt/src/OptimizationNLopt.jl +++ b/lib/OptimizationNLopt/src/OptimizationNLopt.jl @@ -68,6 +68,14 @@ function __map_optimizer_args!(cache::OptimizationCache, opt::NLopt.Opt; local_maxtime::Union{Number, Nothing} = nothing, local_options::Union{NamedTuple, Nothing} = nothing, kwargs...) + + # Check if AUGLAG algorithm requires local_method + if opt.algorithm ∈ (NLopt.LN_AUGLAG, NLopt.LD_AUGLAG, NLopt.AUGLAG) && local_method === nothing + error("NLopt.$(opt.algorithm) requires a local optimization method. " * + "Please specify a local_method, e.g., solve(prob, NLopt.$(opt.algorithm)(); " * + "local_method = NLopt.LN_NELDERMEAD())") + end + if local_method !== nothing if isa(local_method, NLopt.Opt) if ndims(local_method) != length(cache.u0) diff --git a/lib/OptimizationNLopt/test/runtests.jl b/lib/OptimizationNLopt/test/runtests.jl index f295e80ab..44898bc56 100644 --- a/lib/OptimizationNLopt/test/runtests.jl +++ b/lib/OptimizationNLopt/test/runtests.jl @@ -149,6 +149,10 @@ using Test, Random # @test sol.retcode == ReturnCode.Success @test 10 * sol.objective < l1 + # Test that AUGLAG without local_method throws an error + @test_throws ErrorException solve(prob, NLopt.LN_AUGLAG()) + @test_throws ErrorException solve(prob, NLopt.LD_AUGLAG()) + function con2_c(res, x, p) res .= [x[1]^2 + x[2]^2 - 1.0, x[2] * sin(x[1]) - x[1] - 2.0] end