21 const ::idol::Robust::Description &m_robust_description;
22 const ::idol::Bilevel::Description &m_bilevel_description;
24 std::unique_ptr<OptimizerFactory> m_optimality_bilevel_optimizer;
25 std::unique_ptr<OptimizerFactory> m_feasibility_bilevel_optimizer;
26 bool m_with_first_stage_relaxation;
28 std::unique_ptr<idol::Robust::BBBB::Formulation> m_formulation;
32 const ::idol::Bilevel::Description& t_bilevel_description,
35 bool t_with_first_stage_relaxation
38 [[nodiscard]] std::string name()
const override;
39 [[nodiscard]]
double get_var_primal(
const Var& t_var)
const override;
40 [[nodiscard]]
double get_var_reduced_cost(
const Var& t_var)
const override;
41 [[nodiscard]]
double get_var_ray(
const Var& t_var)
const override;
42 [[nodiscard]]
double get_ctr_dual(
const Ctr& t_ctr)
const override;
43 [[nodiscard]]
double get_ctr_farkas(
const Ctr& t_ctr)
const override;
44 [[nodiscard]]
unsigned get_n_solutions()
const override;
45 [[nodiscard]]
unsigned get_solution_index()
const override;
51 [[nodiscard]]
const idol::OptimizerFactory& get_feasibility_bilevel_optimizer()
const {
return *m_feasibility_bilevel_optimizer; }
52 [[nodiscard]]
const idol::OptimizerFactory& get_optimality_bilevel_optimizer()
const {
return *m_optimality_bilevel_optimizer; }
53 [[nodiscard]]
bool relax_first_stage_decisions()
const {
return m_with_first_stage_relaxation; }
56 void add(
const Var& t_var)
override;
57 void add(
const Ctr& t_ctr)
override;
58 void add(
const QCtr& t_ctr)
override;
59 void remove(
const Var& t_var)
override;
60 void remove(
const Ctr& t_ctr)
override;
61 void remove(
const QCtr& t_ctr)
override;
62 void update()
override;
63 void write(
const std::string& t_name)
override;
64 void hook_before_optimize()
override;
65 void hook_optimize()
override;
66 void hook_after_optimize()
override;
67 void set_solution_index(
unsigned t_index)
override;
68 void update_obj_sense()
override;
69 void update_obj()
override;
70 void update_rhs()
override;
71 void update_obj_constant()
override;
72 void update_mat_coeff(
const Ctr& t_ctr,
const Var& t_var)
override;
73 void update_ctr_type(
const Ctr& t_ctr)
override;
74 void update_ctr_rhs(
const Ctr& t_ctr)
override;
75 void update_var_type(
const Var& t_var)
override;
76 void update_var_lb(
const Var& t_var)
override;
77 void update_var_ub(
const Var& t_var)
override;
78 void update_var_obj(
const Var& t_var)
override;
85 void save(
const Model& t_original_formulation,
const Model& t_model)
override;
86 [[nodiscard]]
Node* create_child()
const override;
87 [[nodiscard]]
Node* clone()
const override;