12 double m_best_bound_stop;
14 SolutionStatus m_status = Loaded;
15 SolutionReason m_reason = NotSpecified;
16 std::optional<PrimalPoint> m_master_primal_solution;
17 std::optional<DualPoint> m_last_master_solution;
18 std::vector<DantzigWolfe::SubProblem::PhaseId> m_sub_problems_phases;
19 double m_best_obj = -Inf;
20 double m_best_bound = +Inf;
22 const bool m_use_farkas_for_infeasibility;
23 unsigned int m_iteration_count = 0;
24 unsigned int m_n_generated_columns = 0;
25 bool m_solve_dual_master =
false;
26 bool m_is_terminated =
false;
27 bool m_current_iteration_is_using_farkas =
false;
29 void initialize_sub_problem_phases();
30 void solve_dual_master();
31 bool gap_is_closed()
const;
32 bool check_stopping_criterion();
33 void update_sub_problems();
34 void solve_sub_problems_in_parallel();
35 void analyze_sub_problems();
41 void log_sub_problems();
50 SolutionStatus status()
const {
return m_status; }
52 SolutionReason reason()
const {
return m_reason; }
54 double best_obj()
const {
return m_best_obj; }
56 double best_bound()
const {
return m_best_bound; }
58 const PrimalPoint& primal_solution()
const {
return m_master_primal_solution.value(); }
60 void set_best_bound_stop(
double t_best_bound_stop) { m_best_bound_stop = t_best_bound_stop; }