18 std::unique_ptr<OptimizerFactory> m_deterministic_optimizer;
19 std::unique_ptr<Model> m_deterministic_model;
20 std::unique_ptr<Model> m_lower_level_model;
21 std::unique_ptr<Reformulators::KKT::BoundProvider> m_bound_provider;
23 const bool m_skip_solving_lower_level =
false;
25 void throw_if_no_deterministic_model()
const;
26 void solve_lower_level();
28 void create_deterministic_model_if_not_exists();
33 const std::unique_ptr<Reformulators::KKT::BoundProvider>& t_bound_provider);
35 [[nodiscard]] std::string name()
const override;
37 [[nodiscard]] SolutionStatus get_status()
const override;
39 [[nodiscard]] SolutionReason get_reason()
const override;
41 [[nodiscard]]
double get_best_obj()
const override;
43 [[nodiscard]]
double get_best_bound()
const override;
45 [[nodiscard]]
double get_var_primal(
const Var &t_var)
const override;
47 [[nodiscard]]
double get_var_reduced_cost(
const Var &t_var)
const override;
49 [[nodiscard]]
double get_var_ray(
const Var &t_var)
const override;
51 [[nodiscard]]
double get_ctr_dual(
const Ctr &t_ctr)
const override;
53 [[nodiscard]]
double get_ctr_farkas(
const Ctr &t_ctr)
const override;
55 [[nodiscard]]
unsigned int get_n_solutions()
const override;
57 [[nodiscard]]
unsigned int get_solution_index()
const override;
60 void add(
const Var &t_var)
override;
62 void add(
const Ctr &t_ctr)
override;
64 void add(
const QCtr &t_ctr)
override;
66 void remove(
const Var &t_var)
override;
68 void remove(
const Ctr &t_ctr)
override;
70 void remove(
const QCtr &t_ctr)
override;
72 void update()
override;
74 void write(
const std::string &t_name)
override;
76 void hook_optimize()
override;
78 void set_solution_index(
unsigned int t_index)
override;
80 void update_obj_sense()
override;
82 void update_obj()
override;
84 void update_rhs()
override;
86 void update_obj_constant()
override;
88 void update_mat_coeff(
const Ctr &t_ctr,
const Var &t_var)
override;
90 void update_ctr_type(
const Ctr &t_ctr)
override;
92 void update_ctr_rhs(
const Ctr &t_ctr)
override;
94 void update_var_type(
const Var &t_var)
override;
96 void update_var_lb(
const Var &t_var)
override;
98 void update_var_ub(
const Var &t_var)
override;
100 void update_var_obj(
const Var &t_var)
override;