19 std::optional<double> m_root_node_obj;
20 std::optional<double> m_root_node_sum_of_infeasibilities;
24 const double node_obj = t_node.info().objective_value();
25 const double node_sum_of_infeasibilities = t_node.info().sum_of_infeasibilities();
26 const double incumbent_obj = this->parent().incumbent().info().objective_value();
28 return node_obj - ( m_root_node_obj.value() - incumbent_obj ) * node_sum_of_infeasibilities / m_root_node_sum_of_infeasibilities.value();
35 if (t_active_nodes.size() == 1 && t_active_nodes.by_objective_value().begin()->id() == 0) {
36 const auto& root_node_it = t_active_nodes.by_objective_value().begin();
37 m_root_node_obj = (double) root_node_it->info().objective_value();
38 m_root_node_sum_of_infeasibilities = root_node_it->info().sum_of_infeasibilities();
42 if (!this->parent().has_incumbent()) {
43 return t_active_nodes.by_objective_value().begin();
46 double max = std::numeric_limits<double>::lowest();
48 for (
auto it = t_active_nodes.by_objective_value().begin(),
49 end = t_active_nodes.by_objective_value().end() ; it != end ; ++it) {
51 const double score = compute_score(*it);