ZIB-IOL/Boscia.jl

PG and n5-3 MPS examples crash

pokutta opened this issue · 0 comments

assigning to @mathieu -> please reassign if appropriate. See below for n5-3; same happens for pg. Seems like the solutions are not feasible that we get back from the lmo or there is something off with the rounding we recently introduced.

julia> include("examples/mps-examples/mip-examples.jl")
seed = 0xcdb99f13e55d59f1
Example n5-3

Boscia Algorithm.

Parameter settings.
	 Tree traversal strategy: Move best bound
	 Branching strategy: Most infeasible
	 Absolute dual gap tolerance: 1.000000e-06
	 Relative dual gap tolerance: 1.000000e-02
	 Frank-Wolfe subproblem tolerance: 1.000000e-01
	 Frank-Wolfe dual gap decay factor: 8.000000e-01
	 Additional kwargs: 
	 Total number of variables: 2550
	 Number of integer variables: 150
	 Number of binary variables: 0


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   Iter  Open          Bound      Incumbent      Gap (abs)      Gap (rel)       Time (s)      Nodes/sec      FW (ms)   LMO (ms)  LMO (calls c)   FW (its) #activeset  #shadow
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MPS n5-3 instance: Error During Test at /Users/x_bas/Documents/Mathematik/projects/2022_branchWolfe/BranchWolfe.jl/examples/mps-examples/mip-examples.jl:89
  Got exception outside of a @test
  AssertionError: is_linear_feasible(lmo, v)
  Stacktrace:
    [1] compute_extreme_point(lmo::Boscia.TimeTrackingLMO{FrankWolfe.MathOptLMO{SCIP.Optimizer}}, d::Vector{Float64}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
      @ Boscia ~/Documents/Mathematik/projects/2022_branchWolfe/BranchWolfe.jl/src/time_tracking_lmo.jl:38
    [2] compute_extreme_point
      @ ~/Documents/Mathematik/projects/2022_branchWolfe/BranchWolfe.jl/src/time_tracking_lmo.jl:31 [inlined]
    [3] blended_pairwise_conditional_gradient(f::var"#f#11"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, grad!::var"#grad!#12"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, lmo::Boscia.TimeTrackingLMO{FrankWolfe.MathOptLMO{SCIP.Optimizer}}, active_set::FrankWolfe.ActiveSet{Vector{Float64}, Float64, Vector{Float64}}; line_search::FrankWolfe.Adaptive{Float64, Int64}, epsilon::Float64, max_iteration::Int64, print_iter::Int64, trajectory::Bool, verbose::Bool, memory_mode::FrankWolfe.InplaceEmphasis, gradient::Nothing, callback::Boscia.var"#fw_callback#16"{Bonobo.BnBTree{Boscia.FrankWolfeNode{FrankWolfe.ActiveSet{Vector{Float64}, Float64, Vector{Float64}}, FrankWolfe.DeletedVertexStorage{Vector{Float64}}, Boscia.IntegerBounds}, NamedTuple{(:problem, :current_node_id, :updated_incumbent, :global_tightening_rhs, :global_tightening_root_info, :global_tightenings, :options), Tuple{Boscia.SimpleOptimizationProblem{var"#f#11"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, var"#grad!#12"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, Boscia.TimeTrackingLMO{FrankWolfe.MathOptLMO{SCIP.Optimizer}}, Boscia.IntegerBounds}, Base.RefValue{Int64}, Base.RefValue{Bool}, Base.RefValue{Float64}, NamedTuple{(:lower_bounds, :upper_bounds), Tuple{Dict{Int64, Tuple{Float64, MathOptInterface.GreaterThan{Float64}}}, Dict{Int64, Tuple{Float64, MathOptInterface.LessThan{Float64}}}}}, Boscia.IntegerBounds, Dict{Symbol, Any}}}, Vector{Float64}, Boscia.FrankWolfeSolution{Boscia.FrankWolfeNode{FrankWolfe.ActiveSet{Vector{Float64}, Float64, Vector{Float64}}, FrankWolfe.DeletedVertexStorage{Vector{Float64}}, Boscia.IntegerBounds}, Vector{Float64}}}, Float64, Bool, Vector{Int64}, Int64, Vector{MathOptInterface.VariableIndex}}, traj_data::Vector{Any}, timeout::Float64, renorm_interval::Int64, lazy::Bool, linesearch_workspace::Nothing, lazy_tolerance::Float64, extra_vertex_storage::FrankWolfe.DeletedVertexStorage{Vector{Float64}}, add_dropped_vertices::Bool, use_extra_vertex_storage::Bool, recompute_last_vertex::Bool)
      @ FrankWolfe ~/.julia/packages/FrankWolfe/bjdf1/src/pairwise.jl:280
    [4] evaluate_node!(tree::Bonobo.BnBTree{Boscia.FrankWolfeNode{FrankWolfe.ActiveSet{Vector{Float64}, Float64, Vector{Float64}}, FrankWolfe.DeletedVertexStorage{Vector{Float64}}, Boscia.IntegerBounds}, NamedTuple{(:problem, :current_node_id, :updated_incumbent, :global_tightening_rhs, :global_tightening_root_info, :global_tightenings, :options), Tuple{Boscia.SimpleOptimizationProblem{var"#f#11"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, var"#grad!#12"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, Boscia.TimeTrackingLMO{FrankWolfe.MathOptLMO{SCIP.Optimizer}}, Boscia.IntegerBounds}, Base.RefValue{Int64}, Base.RefValue{Bool}, Base.RefValue{Float64}, NamedTuple{(:lower_bounds, :upper_bounds), Tuple{Dict{Int64, Tuple{Float64, MathOptInterface.GreaterThan{Float64}}}, Dict{Int64, Tuple{Float64, MathOptInterface.LessThan{Float64}}}}}, Boscia.IntegerBounds, Dict{Symbol, Any}}}, Vector{Float64}, Boscia.FrankWolfeSolution{Boscia.FrankWolfeNode{FrankWolfe.ActiveSet{Vector{Float64}, Float64, Vector{Float64}}, FrankWolfe.DeletedVertexStorage{Vector{Float64}}, Boscia.IntegerBounds}, Vector{Float64}}}, node::Boscia.FrankWolfeNode{FrankWolfe.ActiveSet{Vector{Float64}, Float64, Vector{Float64}}, FrankWolfe.DeletedVertexStorage{Vector{Float64}}, Boscia.IntegerBounds})
      @ Boscia ~/Documents/Mathematik/projects/2022_branchWolfe/BranchWolfe.jl/src/node.jl:266
    [5] optimize!(tree::Bonobo.BnBTree{Boscia.FrankWolfeNode{FrankWolfe.ActiveSet{Vector{Float64}, Float64, Vector{Float64}}, FrankWolfe.DeletedVertexStorage{Vector{Float64}}, Boscia.IntegerBounds}, NamedTuple{(:problem, :current_node_id, :updated_incumbent, :global_tightening_rhs, :global_tightening_root_info, :global_tightenings, :options), Tuple{Boscia.SimpleOptimizationProblem{var"#f#11"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, var"#grad!#12"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, Boscia.TimeTrackingLMO{FrankWolfe.MathOptLMO{SCIP.Optimizer}}, Boscia.IntegerBounds}, Base.RefValue{Int64}, Base.RefValue{Bool}, Base.RefValue{Float64}, NamedTuple{(:lower_bounds, :upper_bounds), Tuple{Dict{Int64, Tuple{Float64, MathOptInterface.GreaterThan{Float64}}}, Dict{Int64, Tuple{Float64, MathOptInterface.LessThan{Float64}}}}}, Boscia.IntegerBounds, Dict{Symbol, Any}}}, Vector{Float64}, Boscia.FrankWolfeSolution{Boscia.FrankWolfeNode{FrankWolfe.ActiveSet{Vector{Float64}, Float64, Vector{Float64}}, FrankWolfe.DeletedVertexStorage{Vector{Float64}}, Boscia.IntegerBounds}, Vector{Float64}}}; callback::Boscia.var"#callback#45"{Boscia.var"#callback#42#46"{Dates.DateTime, Vector{Float64}, Vector{Float64}, Vector{Float64}, Vector{Int64}, Vector{Int64}, Bool, Vector{Int64}, Vector{Int64}, Vector{Int64}, Dict{Symbol, Any}, Vector{Vector{Int64}}, Vector{Vector{Int64}}, Vector{Vector{Int64}}, Vector{Int64}, Nothing, Vector{Int64}, Vector{Int64}, Vector{Int64}, Int64, String, Vector{String}}})
      @ Boscia ~/Documents/Mathematik/projects/2022_branchWolfe/BranchWolfe.jl/src/custom_bonobo.jl:36
    [6] solve(f::var"#f#11"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, grad!::var"#grad!#12"{Float64, Vector{Float64}, Vector{Vector{Float64}}}, lmo::FrankWolfe.MathOptLMO{SCIP.Optimizer}; traverse_strategy::Bonobo.BFS, branching_strategy::Bonobo.MOST_INFEASIBLE, fw_epsilon::Float64, verbose::Bool, dual_gap::Float64, rel_dual_gap::Float64, time_limit::Int64, print_iter::Int64, dual_gap_decay_factor::Float64, max_fw_iter::Int64, min_number_lower::Float64, min_node_fw_epsilon::Float64, use_postsolve::Bool, min_fw_iterations::Int64, max_iteration_post::Int64, dual_tightening::Bool, global_dual_tightening::Bool, bnb_callback::Nothing, strong_convexity::Float64, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
      @ Boscia ~/Documents/Mathematik/projects/2022_branchWolfe/BranchWolfe.jl/src/interface.jl:249
    [7] macro expansion
      @ ~/Documents/Mathematik/projects/2022_branchWolfe/BranchWolfe.jl/examples/mps-examples/mip-examples.jl:92 [inlined]
    [8] macro expansion
      @ /Applications/Julia-1.8.app/Contents/Resources/julia/share/julia/stdlib/v1.8/Test/src/Test.jl:1363 [inlined]
    [9] top-level scope
      @ ~/Documents/Mathematik/projects/2022_branchWolfe/BranchWolfe.jl/examples/mps-examples/mip-examples.jl:90
   [10] include(fname::String)
      @ Base.MainInclude ./client.jl:476
   [11] top-level scope
      @ REPL[1]:1
   [12] eval
      @ ./boot.jl:368 [inlined]
   [13] eval_user_input(ast::Any, backend::REPL.REPLBackend)
      @ REPL /Applications/Julia-1.8.app/Contents/Resources/julia/share/julia/stdlib/v1.8/REPL/src/REPL.jl:151
   [14] repl_backend_loop(backend::REPL.REPLBackend)
      @ REPL /Applications/Julia-1.8.app/Contents/Resources/julia/share/julia/stdlib/v1.8/REPL/src/REPL.jl:247
   [15] start_repl_backend(backend::REPL.REPLBackend, consumer::Any)
      @ REPL /Applications/Julia-1.8.app/Contents/Resources/julia/share/julia/stdlib/v1.8/REPL/src/REPL.jl:232
   [16] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool)
      @ REPL /Applications/Julia-1.8.app/Contents/Resources/julia/share/julia/stdlib/v1.8/REPL/src/REPL.jl:369
   [17] run_repl(repl::REPL.AbstractREPL, consumer::Any)
      @ REPL /Applications/Julia-1.8.app/Contents/Resources/julia/share/julia/stdlib/v1.8/REPL/src/REPL.jl:355
   [18] (::Base.var"#967#969"{Bool, Bool, Bool})(REPL::Module)
      @ Base ./client.jl:419
   [19] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [20] invokelatest
      @ ./essentials.jl:726 [inlined]
   [21] run_main_repl(interactive::Bool, quiet::Bool, banner::Bool, history_file::Bool, color_set::Bool)
      @ Base ./client.jl:404
   [22] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:318
   [23] _start()
      @ Base ./client.jl:522
Test Summary:     | Error  Total     Time
MPS n5-3 instance |     1      1  1m22.5s
ERROR: LoadError: Some tests did not pass: 0 passed, 0 failed, 1 errored, 0 broken.