1111#include < mip_heuristics/mip_constants.hpp>
1212#include < mip_heuristics/presolve/third_party_presolve.hpp>
1313
14+ #include < mip_heuristics/presolve/block_bve.cuh>
1415#include < mip_heuristics/presolve/conflict_graph/clique_table.cuh>
1516#include < mip_heuristics/presolve/probing_cache.cuh>
1617#include < mip_heuristics/presolve/trivial_presolve.cuh>
1718#include < mip_heuristics/problem/problem_helpers.cuh>
1819
1920#include < pdlp/solve.cuh>
2021
22+ #include < utilities/copy_helpers.hpp>
2123#include < utilities/scope_guard.hpp>
2224
2325#include < chrono>
@@ -307,7 +309,10 @@ bool diversity_manager_t<i_t, f_t>::run_presolve(f_t time_limit, timer_t global_
307309 CUOPT_LOG_INFO (" Probing-cache step disabled via %s=false" , CUOPT_MIP_PROBING );
308310 run_probing_cache = false ;
309311 }
310- if (run_probing_cache) {
312+ const bool remap_cache_ids = true ;
313+ problem_ptr->related_vars_time_limit = context.settings .heuristic_params .related_vars_time_limit ;
314+
315+ if (run_probing_cache && !global_timer.check_time_limit () && !presolve_timer.check_time_limit ()) {
311316 log_presolve_budget (" PROBING" , probing_features, probing_budget);
312317 f_t time_for_probing_cache = std::min (time_limit, (f_t )global_timer.remaining_time ());
313318 timer_t probing_timer{time_for_probing_cache};
@@ -324,9 +329,17 @@ bool diversity_manager_t<i_t, f_t>::run_presolve(f_t time_limit, timer_t global_
324329 std::chrono::duration<double >(std::chrono::steady_clock::now () - probing_t0).count ());
325330 if (problem_is_infeasible) { return false ; }
326331 }
327- const bool remap_cache_ids = true ;
328- problem_ptr->related_vars_time_limit = context.settings .heuristic_params .related_vars_time_limit ;
332+
329333 if (!global_timer.check_time_limit ()) { trivial_presolve (*problem_ptr, remap_cache_ids); }
334+
335+ if (context.settings .block_bve && run_probing_cache) {
336+ timer_t bve_deadline (std::min (global_timer.remaining_time (), presolve_timer.remaining_time ()));
337+ if (!block_bve_phase (ls.constraint_prop .bounds_update , *problem_ptr, bve_deadline)) {
338+ stats.presolve_time = timer.elapsed_time ();
339+ return false ;
340+ }
341+ }
342+
330343 if (!problem_ptr->empty && !check_bounds_sanity (*problem_ptr)) { return false ; }
331344 // if (!presolve_timer.check_time_limit() && !context.settings.heuristics_only &&
332345 // !problem_ptr->empty) {
0 commit comments