23 std::optional<Ctr> m_constraint;
25 [[nodiscard]]
bool is_constraint()
const {
return m_constraint.has_value(); }
26 [[nodiscard]]
const Ctr& ctr()
const {
return m_constraint.value(); }
28 Uncertainty() =
default;
29 Uncertainty(
const Ctr& t_ctr) : m_constraint(t_ctr) {}
32 struct GeneratedScenario {
34 PrimalPoint master_solution;
37 struct LinkingConstraint {
38 Ctr ctr_in_uncertainty_set;
39 Map<long int, Var> critical_values;
41 LinkingConstraint(
Ctr t_ctr) : ctr_in_uncertainty_set(std::move(t_ctr)) {}
47 std::list<Var> m_linking_variables;
48 std::list<LinkingConstraint> m_linking_constraints;
49 std::vector<Uncertainty> m_uncertainties;
50 bool m_all_linking_variables_are_binary =
true;
51 bool m_all_data_in_linking_constraints_is_integer =
true;
52 bool m_use_indicator =
false;
58 std::list<GeneratedScenario> m_scenario_pool;
59 std::list<std::list<GeneratedScenario>::iterator> m_currently_present_scenarios;
61 void check_assumptions();
62 void initialize_master();
63 void initialize_sub_problem();
65 void add_scenario_to_master(
const std::list<GeneratedScenario>::iterator& t_iterator_in_pool, Uncertainty& t_uncertainty);
69 Model& master() {
return m_master; }
70 Model& sub_problem() {
return m_sub_problem; }
72 void update_sub_problem_constraints(
const PrimalPoint& t_master_solution);
73 unsigned int n_uncertainties()
const {
return m_uncertainties.size(); }
74 void update_sub_problem_objective(
const PrimalPoint& t_master_solution,
unsigned int t_index);
75 std::list<GeneratedScenario>::iterator add_scenario_to_pool(PrimalPoint&& t_scenario, PrimalPoint&& t_master_scenario);
76 void add_scenario_to_master(
const std::list<GeneratedScenario>::iterator& t_iterator_in_pool);