19 std::unique_ptr<OptimizerFactory> m_master_optimizer_factory;
20 std::unique_ptr<OptimizerFactory> m_deterministic_optimizer_factory;
21 const bool m_use_indicator;
23 std::unique_ptr<CVCCG::Formulation> m_formulation;
24 std::list<Var> m_branching_candidates;
25 unsigned int m_n_iterations = 0;
26 bool m_is_diving =
false;
28 CriticalValueColumnAndConstraintGeneration(
const Model& t_model,
35 [[nodiscard]] std::string name()
const override {
return "CVCCG"; }
36 [[nodiscard]]
double get_var_primal(
const Var& t_var)
const override;
37 [[nodiscard]]
double get_var_reduced_cost(
const Var& t_var)
const override;
38 [[nodiscard]]
double get_var_ray(
const Var& t_var)
const override;
39 [[nodiscard]]
double get_ctr_dual(
const Ctr& t_ctr)
const override;
40 [[nodiscard]]
double get_ctr_farkas(
const Ctr& t_ctr)
const override;
41 [[nodiscard]]
unsigned get_n_solutions()
const override;
42 [[nodiscard]]
unsigned get_solution_index()
const override;
45 [[nodiscard]]
const OptimizerFactory& get_master_optimizer_factory()
const {
return *m_master_optimizer_factory; }
46 [[nodiscard]]
const OptimizerFactory& get_deterministic_optimizer_factory()
const {
return *m_deterministic_optimizer_factory; }
47 [[nodiscard]]
bool use_indicator()
const {
return m_use_indicator; }
49 [[nodiscard]]
const CVCCG::Formulation& get_formulation()
const {
return *m_formulation; }
51 void declare_branching_on_unc_vars(std::list<Var> t_branching_candidates) { m_branching_candidates = std::move(t_branching_candidates); }
52 [[nodiscard]]
auto branching_candidates()
const {
return ConstIteratorForward(m_branching_candidates); }
53 void set_unc_var_lb(
const Var& t_var,
double t_lb);
54 void set_unc_var_ub(
const Var& t_var,
double t_ub);
56 void add(
const Var& t_var)
override { m_formulation.reset(); }
57 void add(
const Ctr& t_ctr)
override { m_formulation.reset(); }
58 void add(
const QCtr& t_ctr)
override { m_formulation.reset(); }
59 void add(
const SOSCtr& t_ctr)
override { m_formulation.reset(); }
60 void remove(
const Var& t_var)
override { m_formulation.reset(); }
61 void remove(
const Ctr& t_ctr)
override { m_formulation.reset(); }
62 void remove(
const QCtr& t_ctr)
override { m_formulation.reset(); }
63 void remove(
const SOSCtr& t_ctr)
override { m_formulation.reset(); }
64 void update()
override { }
65 void write(
const std::string& t_name)
override;
66 void hook_before_optimize()
override;
67 void hook_optimize()
override;
68 void set_solution_index(
unsigned t_index)
override;
69 void update_obj_sense()
override { m_formulation.reset(); }
70 void update_obj()
override { m_formulation.reset(); }
71 void update_rhs()
override { m_formulation.reset(); }
72 void update_obj_constant()
override { m_formulation.reset(); }
73 void update_mat_coeff(
const Ctr& t_ctr,
const Var& t_var)
override { m_formulation.reset(); }
74 void update_ctr_type(
const Ctr& t_ctr)
override { m_formulation.reset(); }
75 void update_ctr_rhs(
const Ctr& t_ctr)
override { m_formulation.reset(); }
76 void update_var_type(
const Var& t_var)
override { m_formulation.reset(); }
77 void update_var_lb(
const Var& t_var)
override { m_formulation.reset(); }
78 void update_var_ub(
const Var& t_var)
override { m_formulation.reset(); }
79 void update_var_obj(
const Var& t_var)
override { m_formulation.reset(); }
81 void solve_master_problem();
82 void analyze_master_problem();
83 void check_termination_criterion();
84 void solve_sub_problems();
86 void log_iteration_separator();