17 const Model& m_parent;
18 const ::idol::Robust::Description &m_robust_description;
19 const ::idol::Bilevel::Description &m_bilevel_description;
23 std::optional<::idol::Bilevel::Description> m_bilevel_description_master;
24 std::vector<Var> m_second_stage_variables;
25 std::vector<Ctr> m_second_stage_constraints;
26 std::vector<Ctr> m_linking_constraints;
27 std::vector<Ctr> m_coupling_constraints;
29 unsigned int m_n_added_scenario = 0;
30 bool m_has_second_stage_objective =
false;
31 std::optional<Var> m_second_stage_epigraph;
33 void parse_variables();
34 void parse_objective();
35 void parse_constraints();
36 void copy_bilevel_description(const ::idol::Bilevel::Description& t_src, const ::idol::Bilevel::Description& t_dest)
const;
41 const ::idol::Robust::Description &t_robust_description,
42 const ::idol::Bilevel::Description &t_bilevel_description
45 Model& master() {
return m_master; }
46 const Model& master()
const {
return m_master; }
47 void add_scenario_to_master(
const Point<Var>& t_scenario,
bool t_add_annotation);
49 std::pair<Model, std::vector<Var>> build_feasibility_separation_problem(
const Point<Var>& t_first_stage_decision);
50 std::pair<Model, std::vector<Var>> build_joint_separation_problem(
const Point<Var>& t_first_stage_decision);
51 unsigned int n_coupling_constraints()
const {
return m_coupling_constraints.size(); }
52 unsigned int n_added_scenarios()
const {
return m_n_added_scenario; }
53 const Bilevel::Description& bilevel_description_separation()
const {
return m_bilevel_description_separation; }
54 const Bilevel::Description& bilevel_description_master()
const {
return *m_bilevel_description_master; }
55 bool is_adjustable_robust_problem()
const;
56 bool is_wait_and_see_follower()
const {
return !is_adjustable_robust_problem(); }
57 bool should_have_epigraph_and_epigraph_is_not_in_master()
const;
58 const Var& second_stage_epigraph()
const {
return *m_second_stage_epigraph; }
59 void add_epigraph_to_master();