Loading...
Searching...
No Matches
Optimizers_CriticalValueColumnAndConstraintGeneration.h
1//
2// Created by Henri on 17/04/2026.
3//
4
5#ifndef IDOL_OPTIMIZERS_CRITICALVALUECOLUMNANDCONSTRAINTGENERATION_H
6#define IDOL_OPTIMIZERS_CRITICALVALUECOLUMNANDCONSTRAINTGENERATION_H
7
8#include "Formulation.h"
9#include "idol/general/optimizers/Algorithm.h"
10#include "idol/general/optimizers/OptimizerFactory.h"
11#include "idol/robust/modeling/Description.h"
12
13namespace idol::Optimizers::Robust {
15}
16
18 const idol::Robust::Description& m_description;
19 std::unique_ptr<OptimizerFactory> m_master_optimizer_factory;
20 std::unique_ptr<OptimizerFactory> m_deterministic_optimizer_factory;
21 std::unique_ptr<CVCCG::Formulation> m_formulation;
22public:
23 CriticalValueColumnAndConstraintGeneration(const Model& t_model,
24 const idol::Robust::Description& t_description,
25 const OptimizerFactory& t_master_optimizer,
26 const OptimizerFactory& t_deterministic_optimizer
27 );
28
29protected:
30 void add(const Var& t_var) override { m_formulation.reset(); }
31 void add(const Ctr& t_ctr) override { m_formulation.reset(); }
32 void add(const QCtr& t_ctr) override { m_formulation.reset(); }
33 void add(const SOSCtr& t_ctr) override { m_formulation.reset(); }
34 void remove(const Var& t_var) override { m_formulation.reset(); }
35 void remove(const Ctr& t_ctr) override { m_formulation.reset(); }
36 void remove(const QCtr& t_ctr) override { m_formulation.reset(); }
37 void remove(const SOSCtr& t_ctr) override { m_formulation.reset(); }
38 void update() override { m_formulation.reset(); }
39 void write(const std::string& t_name) override;
40 void hook_optimize() override;
41 void set_solution_index(unsigned t_index) override;
42 void update_obj_sense() override { m_formulation.reset(); }
43 void update_obj() override { m_formulation.reset(); }
44 void update_rhs() override { m_formulation.reset(); }
45 void update_obj_constant() override { m_formulation.reset(); }
46 void update_mat_coeff(const Ctr& t_ctr, const Var& t_var) override { m_formulation.reset(); }
47 void update_ctr_type(const Ctr& t_ctr) override { m_formulation.reset(); }
48 void update_ctr_rhs(const Ctr& t_ctr) override { m_formulation.reset(); }
49 void update_var_type(const Var& t_var) override { m_formulation.reset(); }
50 void update_var_lb(const Var& t_var) override { m_formulation.reset(); }
51 void update_var_ub(const Var& t_var) override { m_formulation.reset(); }
52 void update_var_obj(const Var& t_var) override { m_formulation.reset(); }
53
54 void solve_master_problem();
55 void analyze_master_problem();
56 bool check_stopping_criterion();
57 void solve_sub_problems();
58public:
59 [[nodiscard]] std::string name() const override { return "CVCCG"; }
60 [[nodiscard]] double get_var_primal(const Var& t_var) const override;
61 [[nodiscard]] double get_var_reduced_cost(const Var& t_var) const override;
62 [[nodiscard]] double get_var_ray(const Var& t_var) const override;
63 [[nodiscard]] double get_ctr_dual(const Ctr& t_ctr) const override;
64 [[nodiscard]] double get_ctr_farkas(const Ctr& t_ctr) const override;
65 [[nodiscard]] unsigned get_n_solutions() const override;
66 [[nodiscard]] unsigned get_solution_index() const override;
67
68 [[nodiscard]] const idol::Robust::Description& description() const { return m_description; }
69 [[nodiscard]] const OptimizerFactory& get_master_optimizer_factory() const { return *m_master_optimizer_factory; }
70 [[nodiscard]] const OptimizerFactory& get_deterministic_optimizer_factory() const { return *m_deterministic_optimizer_factory; }
71};
72
73#endif //IDOL_OPTIMIZERS_CRITICALVALUECOLUMNANDCONSTRAINTGENERATION_H