21 const ::idol::Robust::Description &m_robust_description;
22 const ::idol::Bilevel::Description &m_bilevel_description;
23 std::unique_ptr<OptimizerFactory> m_master_optimizer;
24 std::unique_ptr<idol::CCG::Formulation> m_formulation;
25 bool m_check_for_repeated_scenarios;
26 unsigned int m_n_iterations = 0;
29 std::vector<Point<Var>> m_initial_scenarios;
30 std::unique_ptr<OptimizerFactory> m_initial_scenario_by_minimization;
31 std::unique_ptr<OptimizerFactory> m_initial_scenario_by_maximization;
34 const bool m_with_annotation_for_infeasible_scenario =
true;
35 std::vector<std::unique_ptr<idol::Robust::CCG::Separation>> m_separations;
36 unsigned int m_separation_index = 0;
38 std::optional<PrimalPoint> m_last_master_solution;
42 Timer m_separation_timer;
45 const ::idol::Robust::Description &t_robust_description,
46 const ::idol::Bilevel::Description &t_bilevel_description,
51 const std::list<std::unique_ptr<idol::Robust::CCG::Separation>>& t_separations,
52 bool t_check_for_repeated_scenarios);
54 [[nodiscard]] std::string name()
const override;
56 [[nodiscard]]
double get_var_primal(
const Var &t_var)
const override;
57 [[nodiscard]]
double get_var_reduced_cost(
const Var &t_var)
const override;
58 [[nodiscard]]
double get_var_ray(
const Var &t_var)
const override;
59 [[nodiscard]]
double get_ctr_dual(
const Ctr &t_ctr)
const override;
60 [[nodiscard]]
double get_ctr_farkas(
const Ctr &t_ctr)
const override;
61 [[nodiscard]]
const PrimalPoint& get_last_master_solution()
const;
63 [[nodiscard]]
unsigned int get_n_solutions()
const override;
64 [[nodiscard]]
unsigned int get_solution_index()
const override;
65 [[nodiscard]]
unsigned int get_n_scenarios()
const {
return m_formulation->n_added_scenarios(); }
66 [[nodiscard]]
unsigned int get_n_iterations()
const {
return m_n_iterations; }
67 [[nodiscard]]
const Timer& get_master_timer()
const {
return m_master_timer; }
68 [[nodiscard]]
const Timer& get_separation_timer()
const {
return m_separation_timer; }
69 [[nodiscard]]
bool check_for_repeated_scenarios()
const {
return m_check_for_repeated_scenarios; }
76 void add(
const Var &t_var)
override;
77 void add(
const Ctr &t_ctr)
override;
78 void add(
const QCtr &t_ctr)
override;
79 void remove(
const Var &t_var)
override;
80 void remove(
const Ctr &t_ctr)
override;
81 void remove(
const QCtr &t_ctr)
override;
82 void update()
override;
83 void write(
const std::string &t_name)
override;
84 void hook_before_optimize()
override;
85 void hook_optimize()
override;
86 void set_solution_index(
unsigned int t_index)
override;
87 void update_obj_sense()
override;
88 void update_obj()
override;
89 void update_rhs()
override;
90 void update_obj_constant()
override;
91 void update_mat_coeff(
const Ctr &t_ctr,
const Var &t_var)
override;
92 void update_ctr_type(
const Ctr &t_ctr)
override;
93 void update_ctr_rhs(
const Ctr &t_ctr)
override;
94 void update_var_type(
const Var &t_var)
override;
95 void update_var_lb(
const Var &t_var)
override;
96 void update_var_ub(
const Var &t_var)
override;
97 void update_var_obj(
const Var &t_var)
override;
99 void add_initial_scenarios();
100 void add_initial_scenario_by_min_or_max(
const OptimizerFactory& t_optimizer,
double t_coefficient);
101 void solve_master_problem();
102 void check_termination_criteria();
105 void log_iteration();
106 void log_iteration_separator();
108 void solve_adversarial_problem();