15 std::optional<PrimalPoint> call_local_mip(
const Model& t_model,
const PrimalPoint& t_primal_point,
double t_time_limit);
40 if (t_event != InvalidSolution) {
44 const bool is_root_node = this->
node().id() == 0;
48 if (m_n_calls % m_frequency > 0 || !m_found_feasible_at_root_node) {
53 const double relative_gap = idol::relative_gap(this->best_bound(), this->best_obj());
55 bool be_aggressive =
false;
56 if (is_root_node || relative_gap > 1) {
60 const double time_used_to_solve_node = this->
relaxation().optimizer().time().count();
61 const double factor_for_heuristic = be_aggressive ? 200 : 10;
62 const double heuristic_time_limit = std::min(this->
original_model().optimizer().get_remaining_time(), factor_for_heuristic * time_used_to_solve_node);
63 auto point = impl::call_local_mip(this->
original_model(), this->
node().info().primal_solution(), heuristic_time_limit);
69 m_found_feasible_at_root_node =
false;
72 if (m_n_submitted_points == 0) {
79 auto* info =
new NodeInfoT();
80 info->set_primal_solution(*point);
82 m_n_submitted_points++;