idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
DefaultNodeInfo.h
1//
2// Created by henri on 18.10.23.
3//
4
5#ifndef IDOL_DEFAULTNODEINFO_H
6#define IDOL_DEFAULTNODEINFO_H
7
8#include "idol/mixed-integer/modeling/models/Model.h"
9#include "DefaultNodeUpdator.h"
10#include "BranchingDecision.h"
11
12namespace idol {
13 class DefaultNodeInfo;
14
15 namespace Optimizers {
16 template<class NodeInfoT> class BranchAndBound;
17 }
18}
19
21public:
22 DefaultNodeInfo() = default;
23
24 virtual ~DefaultNodeInfo() = default;
25
26 [[nodiscard]] SolutionStatus status() const { return m_primal_solution.status(); }
27
28 [[nodiscard]] SolutionReason reason() const { return m_primal_solution.reason(); }
29
30 [[nodiscard]] bool has_objective_value() const { return m_primal_solution.has_objective_value(); }
31
32 [[nodiscard]] double objective_value() const { return m_primal_solution.objective_value(); }
33
34 [[nodiscard]] double sum_of_infeasibilities() const { return m_sum_of_infeasibilities.value(); }
35
36 [[nodiscard]] const auto& primal_solution() const { return m_primal_solution; }
37
38 void set_primal_solution(PrimalPoint t_primal_solution) { m_primal_solution = std::move(t_primal_solution); }
39
40 virtual void save(const Model& t_original_formulation, const Model& t_model);
41
42 [[nodiscard]] virtual DefaultNodeInfo* create_child() const;
43
44 void add_branching_variable(const Var& t_var, CtrType t_type, double t_bound);
45
46 void add_branching_constraint(const Ctr &t_ctr, TempCtr t_temporary_constraint);
47
48 [[nodiscard]] auto variable_branching_decisions() const { return ConstIteratorForward(m_variable_branching_decisions); }
49
50 [[nodiscard]] auto constraint_branching_decisions() const { return ConstIteratorForward(m_constraint_branching_decisions); }
51
52 static DefaultNodeUpdator<DefaultNodeInfo>* create_updator(const Model& t_src_model, Model& t_relaxation);
53
54private:
55 PrimalPoint m_primal_solution;
56 std::optional<double> m_sum_of_infeasibilities;
57 std::list<VarBranchingDecision> m_variable_branching_decisions;
58 std::list<CtrBranchingDecision> m_constraint_branching_decisions;
59};
60
61#endif //IDOL_DEFAULTNODEINFO_H