@@ -1506,7 +1506,7 @@ dual_status_t branch_and_bound_t<i_t, f_t>::solve_node_lp(
15061506 branch_and_bound_worker_t <i_t , f_t >* worker,
15071507 branch_and_bound_stats_t <i_t , f_t >& stats,
15081508 logger_t & log,
1509- i_t iter_limit)
1509+ int64_t iter_limit)
15101510{
15111511 raft::common::nvtx::range scope (" BB::solve_node" );
15121512#ifdef DEBUG_BRANCHING
@@ -2212,6 +2212,7 @@ void branch_and_bound_t<i_t, f_t>::solve_submip(diving_worker_t<i_t, f_t>* worke
22122212 submip_settings.strong_branching_simplex_iteration_limit = 50 ;
22132213 submip_settings.submip_settings .level = submip_level;
22142214 submip_settings.log .log = false ;
2215+ submip_settings.benchmark_info_ptr = nullptr ;
22152216
22162217#ifdef DEBUG_SUBMIP
22172218 submip_settings.log .log_prefix = std::format (" {}{}" , settings_.log .log_prefix , worker->worker_id );
@@ -2314,7 +2315,12 @@ void branch_and_bound_t<i_t, f_t>::solve_submip(diving_worker_t<i_t, f_t>* worke
23142315 std::vector<f_t > presolved_incumbent;
23152316 presolver.crush_primal_solution (submip_problem, current_incumbent, presolved_incumbent);
23162317 submip_bnb.set_initial_guess (presolved_incumbent);
2317- submip_bnb.set_initial_upper_bound (upper_bound_.load ());
2318+
2319+ const f_t user_upper = compute_user_objective (original_lp_, upper_bound_.load ());
2320+ const f_t submip_cutoff =
2321+ user_upper / submip_bnb.original_lp_ .obj_scale - submip_bnb.original_lp_ .obj_constant ;
2322+ submip_bnb.set_initial_upper_bound (submip_cutoff);
2323+
23182324 submip_bnb.set_initial_pseudocost (pc_, presolver.get_reduced_to_original_map ());
23192325
23202326 if (submip_halt_callback_) {
0 commit comments