A C++ Framework for Optimization
Loading...
Searching...
No Matches
Optimizers_ColumnAndConstraintGeneration.h
1//
2// Created by henri on 11.12.24.
3//
4
5#ifndef IDOL_OPTIMIZERS_COLUMNANDCONSTRAINTGENERATION_H
6#define IDOL_OPTIMIZERS_COLUMNANDCONSTRAINTGENERATION_H
7
8#include "idol/robust/modeling/Description.h"
9#include "idol/general/optimizers/Algorithm.h"
10#include "idol/general/optimizers/OptimizerFactory.h"
11#include "Formulation.h"
12#include "idol/bilevel/modeling/Description.h"
13#include "separation/Separation.h"
14
15namespace idol::Optimizers::Robust {
16 class ColumnAndConstraintGeneration;
17}
18
20
21 const ::idol::Robust::Description &m_robust_description;
22 const ::idol::Bilevel::Description &m_bilevel_description;
23 std::unique_ptr<OptimizerFactory> m_master_optimizer;
24 std::unique_ptr<idol::CCG::Formulation> m_formulation;
25 bool m_check_for_repeated_scenarios;
26 unsigned int m_n_iterations = 0;
27
28 // Initial scenarios
29 std::vector<Point<Var>> m_initial_scenarios;
30 std::unique_ptr<OptimizerFactory> m_initial_scenario_by_minimization;
31 std::unique_ptr<OptimizerFactory> m_initial_scenario_by_maximization;
32
33 // Separation
34 const bool m_with_annotation_for_infeasible_scenario = true;
35 std::vector<std::unique_ptr<idol::Robust::CCG::Separation>> m_separations;
36 unsigned int m_separation_index = 0;
37
38 std::optional<PrimalPoint> m_last_master_solution;
39
40 // Timers
41 Timer m_master_timer;
42 Timer m_separation_timer;
43public:
45 const ::idol::Robust::Description &t_robust_description,
46 const ::idol::Bilevel::Description &t_bilevel_description,
47 const OptimizerFactory &t_master_optimizer,
48 std::vector<Point<Var>> t_initial_scenarios,
49 OptimizerFactory* t_initial_scenario_by_minimization,
50 OptimizerFactory* t_initial_scenario_by_maximization,
51 const std::list<std::unique_ptr<idol::Robust::CCG::Separation>>& t_separations,
52 bool t_check_for_repeated_scenarios);
53
54 [[nodiscard]] std::string name() const override;
55
56 [[nodiscard]] double get_var_primal(const Var &t_var) const override;
57 [[nodiscard]] double get_var_reduced_cost(const Var &t_var) const override;
58 [[nodiscard]] double get_var_ray(const Var &t_var) const override;
59 [[nodiscard]] double get_ctr_dual(const Ctr &t_ctr) const override;
60 [[nodiscard]] double get_ctr_farkas(const Ctr &t_ctr) const override;
61 [[nodiscard]] const PrimalPoint& get_last_master_solution() const;
62
63 [[nodiscard]] unsigned int get_n_solutions() const override;
64 [[nodiscard]] unsigned int get_solution_index() const override;
65 [[nodiscard]] unsigned int get_n_scenarios() const { return m_formulation->n_added_scenarios(); }
66 [[nodiscard]] unsigned int get_n_iterations() const { return m_n_iterations; }
67 [[nodiscard]] const Timer& get_master_timer() const { return m_master_timer; }
68 [[nodiscard]] const Timer& get_separation_timer() const { return m_separation_timer; }
69 [[nodiscard]] bool check_for_repeated_scenarios() const { return m_check_for_repeated_scenarios; }
70
71 [[nodiscard]] const idol::CCG::Formulation& get_formulation() const { return *m_formulation; }
72 [[nodiscard]] const idol::Robust::Description& get_robust_description() const { return m_robust_description; }
73 [[nodiscard]] const idol::Bilevel::Description& get_bilevel_description() const { return m_bilevel_description; }
74
75protected:
76 void add(const Var &t_var) override;
77 void add(const Ctr &t_ctr) override;
78 void add(const QCtr &t_ctr) override;
79 void remove(const Var &t_var) override;
80 void remove(const Ctr &t_ctr) override;
81 void remove(const QCtr &t_ctr) override;
82 void update() override;
83 void write(const std::string &t_name) override;
84 void hook_before_optimize() override;
85 void hook_optimize() override;
86 void set_solution_index(unsigned int t_index) override;
87 void update_obj_sense() override;
88 void update_obj() override;
89 void update_rhs() override;
90 void update_obj_constant() override;
91 void update_mat_coeff(const Ctr &t_ctr, const Var &t_var) override;
92 void update_ctr_type(const Ctr &t_ctr) override;
93 void update_ctr_rhs(const Ctr &t_ctr) override;
94 void update_var_type(const Var &t_var) override;
95 void update_var_lb(const Var &t_var) override;
96 void update_var_ub(const Var &t_var) override;
97 void update_var_obj(const Var &t_var) override;
98
99 void add_initial_scenarios();
100 void add_initial_scenario_by_min_or_max(const OptimizerFactory& t_optimizer, double t_coefficient);
101 void solve_master_problem();
102 void check_termination_criteria();
103
104 void log_banner();
105 void log_iteration();
106 void log_iteration_separator();
107
108 void solve_adversarial_problem();
109
110};
111
112
113#endif //IDOL_OPTIMIZERS_COLUMNANDCONSTRAINTGENERATION_H