22 DefaultNodeInfo() =
default;
24 virtual ~DefaultNodeInfo() =
default;
26 [[nodiscard]] SolutionStatus status()
const {
return m_primal_solution.status(); }
28 [[nodiscard]] SolutionReason reason()
const {
return m_primal_solution.reason(); }
30 [[nodiscard]]
bool has_best_obj()
const {
return m_primal_solution.has_objective_value(); }
32 [[nodiscard]]
double best_obj()
const {
return m_primal_solution.objective_value(); }
34 [[nodiscard]]
double best_bound()
const {
return m_best_bound; }
36 [[nodiscard]]
double sum_of_infeasibilities()
const {
return m_sum_of_infeasibilities.value(); }
38 [[nodiscard]]
const auto& primal_solution()
const {
return m_primal_solution; }
40 auto& primal_solution() {
return m_primal_solution; }
42 void set_primal_solution(PrimalPoint t_primal_solution) { m_primal_solution = std::move(t_primal_solution); }
44 virtual void save(
const Model& t_original_formulation,
const Model& t_model);
46 [[nodiscard]]
virtual DefaultNodeInfo* create_child()
const;
48 void add_branching_variable(
const Var& t_var, CtrType t_type,
double t_bound);
50 void add_branching_constraint(
const Ctr &t_ctr,
TempCtr t_temporary_constraint);
52 [[nodiscard]]
auto variable_branching_decisions()
const {
return ConstIteratorForward(m_variable_branching_decisions); }
54 [[nodiscard]]
auto constraint_branching_decisions()
const {
return ConstIteratorForward(m_constraint_branching_decisions); }
58 [[nodiscard]]
virtual DefaultNodeInfo* clone()
const;
60 virtual void compute_sum_of_infeasibilities();
62 PrimalPoint m_primal_solution;
63 double m_best_bound = -Inf;
64 std::optional<double> m_sum_of_infeasibilities;
65 std::list<VarBranchingDecision> m_variable_branching_decisions;
66 std::list<CtrBranchingDecision> m_constraint_branching_decisions;