lanl-ansi / Alpine.jl

A Julia/JuMP-based Global Optimization Solver for Non-convex Programs
https://lanl-ansi.github.io/Alpine.jl/latest/
Other
244 stars 39 forks source link

Run against MOI.Test suite #152

Open blegat opened 4 years ago

blegat commented 4 years ago

We should add a test/MOI_wrapper.jl file following http://jump.dev/MathOptInterface.jl/dev/apimanual/#Testing-guideline-1

odow commented 2 years ago

This was a massive failure. It fails immediately:

julia> alpine = MOI.OptimizerWithAttributes(
           Alpine.Optimizer,
           "nlp_solver" => IPOPT,
           "mip_solver" => CBC,
       )
MathOptInterface.OptimizerWithAttributes(Alpine.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[MathOptInterface.RawOptimizerAttribute("nlp_solver") => MathOptInterface.OptimizerWithAttributes(Ipopt.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[MathOptInterface.Silent() => true, MathOptInterface.RawOptimizerAttribute("sb") => "yes", MathOptInterface.RawOptimizerAttribute("max_iter") => 9999]), MathOptInterface.RawOptimizerAttribute("mip_solver") => MathOptInterface.OptimizerWithAttributes(Cbc.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[MathOptInterface.Silent() => true])])

julia> model = MOI.Utilities.CachingOptimizer(
           MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
           MOI.instantiate(alpine; with_bridge_type = Float64),
       )
MOIU.CachingOptimizer{MOIB.LazyBridgeOptimizer{Alpine.Optimizer}, MOIU.UniversalFallback{MOIU.Model{Float64}}}
in state EMPTY_OPTIMIZER
in mode AUTOMATIC
with model cache MOIU.UniversalFallback{MOIU.Model{Float64}}
  fallback for MOIU.Model{Float64}
with optimizer MOIB.LazyBridgeOptimizer{Alpine.Optimizer}
  with 0 variable bridges
  with 0 constraint bridges
  with 0 objective bridges
  with inner model Alpine.Optimizer

julia> MOI.Test.runtests(
           model,
           MOI.Test.Config(),
           exclude = String[],
       )

Test Summary:                         | Pass  Total
test_add_constrained_variables_vector |    6      6
Test Summary:                |
test_attribute_NumberThreads | No tests
test_attribute_RawStatusString: Error During Test at /Users/oscar/.julia/packages/MathOptInterface/FHFUH/src/Test/Test.jl:208
  Got exception outside of a @test
  MethodError: no method matching initialize(::Nothing, ::Vector{Symbol})
  Closest candidates are:
    initialize(::MathOptInterface.Test.HS071, ::Vector{Symbol}) at /Users/oscar/.julia/packages/MathOptInterface/FHFUH/src/Test/test_nonlinear.jl:28
    initialize(::MathOptInterface.Test.FeasibilitySenseEvaluator, ::Vector{Symbol}) at /Users/oscar/.julia/packages/MathOptInterface/FHFUH/src/Test/test_nonlinear.jl:218
    initialize(::MathOptInterface.Test.InvalidEvaluator, ::Vector{Symbol}) at /Users/oscar/.julia/packages/MathOptInterface/FHFUH/src/Test/test_nonlinear.jl:1031
    ...
  Stacktrace:
    [1] load!(m::Alpine.Optimizer)
      @ Alpine ~/.julia/dev/Alpine/src/solver.jl:499
    [2] optimize!(m::Alpine.Optimizer)
      @ Alpine ~/.julia/dev/Alpine/src/algorithm.jl:17
    [3] optimize!
      @ ~/.julia/packages/MathOptInterface/FHFUH/src/Bridges/bridge_optimizer.jl:348 [inlined]
    [4] optimize!
      @ ~/.julia/packages/MathOptInterface/FHFUH/src/MathOptInterface.jl:81 [inlined]
    [5] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Alpine.Optimizer}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}})
      @ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/FHFUH/src/Utilities/cachingoptimizer.jl:313
    [6] test_attribute_RawStatusString(model::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Alpine.Optimizer}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}, config::MathOptInterface.Test.Config{Float64})
      @ MathOptInterface.Test ~/.julia/packages/MathOptInterface/FHFUH/src/Test/test_attribute.jl:44
    [7] macro expansion
      @ ~/.julia/packages/MathOptInterface/FHFUH/src/Test/Test.jl:214 [inlined]
    [8] macro expansion
      @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
    [9] runtests(model::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Alpine.Optimizer}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}, config::MathOptInterface.Test.Config{Float64}; include::Vector{String}, exclude::Vector{String}, warn_unsupported::Bool, exclude_tests_after::VersionNumber)
      @ MathOptInterface.Test ~/.julia/packages/MathOptInterface/FHFUH/src/Test/Test.jl:209
   [10] top-level scope
      @ REPL[14]:1
   [11] eval
      @ ./boot.jl:360 [inlined]
   [12] eval_user_input(ast::Any, backend::REPL.REPLBackend)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:139
   [13] repl_backend_loop(backend::REPL.REPLBackend)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:200
   [14] start_repl_backend(backend::REPL.REPLBackend, consumer::Any)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:185
   [15] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:317
   [16] run_repl(repl::REPL.AbstractREPL, consumer::Any)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:305
   [17] (::Base.var"#874#876"{Bool, Bool, Bool})(REPL::Module)
      @ Base ./client.jl:387
   [18] #invokelatest#2
      @ ./essentials.jl:708 [inlined]
   [19] invokelatest
      @ ./essentials.jl:706 [inlined]
   [20] run_main_repl(interactive::Bool, quiet::Bool, banner::Bool, history_file::Bool, color_set::Bool)
      @ Base ./client.jl:372
   [21] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:302
   [22] _start()
      @ Base ./client.jl:485
Test Summary:                  | Error  Total
test_attribute_RawStatusString |     1      1
ERROR: Some tests did not pass: 0 passed, 0 failed, 1 errored, 0 broken.

Because Alpine assumes the problem is nonlinear:

julia> using JuMP, Alpine, Cbc, Ipopt

julia> model = Model(Alpine.Optimizer)
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: EMPTY_OPTIMIZER
Solver name: Alpine

julia> set_optimizer_attribute(model, "nlp_solver", Ipopt.Optimizer)

julia> set_optimizer_attribute(model, "mip_solver", Cbc.Optimizer)

julia> @variable(model, x >= 0)
x

julia> optimize!(model)
ERROR: MethodError: no method matching initialize(::Nothing, ::Vector{Symbol})
Closest candidates are:
  initialize(::MathOptInterface.Test.HS071, ::Vector{Symbol}) at /Users/oscar/.julia/packages/MathOptInterface/FHFUH/src/Test/test_nonlinear.jl:28
  initialize(::MathOptInterface.Test.FeasibilitySenseEvaluator, ::Vector{Symbol}) at /Users/oscar/.julia/packages/MathOptInterface/FHFUH/src/Test/test_nonlinear.jl:218
  initialize(::MathOptInterface.Test.InvalidEvaluator, ::Vector{Symbol}) at /Users/oscar/.julia/packages/MathOptInterface/FHFUH/src/Test/test_nonlinear.jl:1031
  ...
Stacktrace:
 [1] load!(m::Alpine.Optimizer)
   @ Alpine ~/.julia/dev/Alpine/src/solver.jl:499
 [2] optimize!(m::Alpine.Optimizer)
   @ Alpine ~/.julia/dev/Alpine/src/algorithm.jl:17
 [3] optimize!
   @ ~/.julia/packages/MathOptInterface/FHFUH/src/Bridges/bridge_optimizer.jl:348 [inlined]
 [4] optimize!
   @ ~/.julia/packages/MathOptInterface/FHFUH/src/MathOptInterface.jl:81 [inlined]
 [5] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Alpine.Optimizer}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}})
   @ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/FHFUH/src/Utilities/cachingoptimizer.jl:313
 [6] optimize!(model::Model; ignore_optimize_hook::Bool, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
   @ JuMP ~/.julia/packages/JuMP/0STkJ/src/optimizer_interface.jl:161
 [7] optimize!(model::Model)
   @ JuMP ~/.julia/packages/JuMP/0STkJ/src/optimizer_interface.jl:143
 [8] top-level scope
   @ REPL[36]:1