Loading...
Searching...
No Matches
Optimizers_Convexification.h
1//
2// Created by Henri on 26/05/2026.
3//
4
5#ifndef IDOL_OPTIMIZERS_CONVEXIFICATION_H
6#define IDOL_OPTIMIZERS_CONVEXIFICATION_H
7
8#include "idol/bilevel/modeling/Description.h"
9#include "idol/general/optimizers/Algorithm.h"
10
11namespace idol::Robust {
12 class Description;
13}
14
15namespace idol::Optimizers::Robust {
16 class Convexification;
17}
18
20 const idol::Robust::Description& m_robust_description;
21 const idol::Bilevel::Description& m_bilevel_description;
22 std::unique_ptr<OptimizerFactory> m_master_optimizer;
23 std::unique_ptr<OptimizerFactory> m_integer_master_heuristic_optimizer;
24 std::unique_ptr<OptimizerFactory> m_sub_problem_optimizer;
25
26 // Model
27 std::unique_ptr<Model> m_deterministic_model;
28 std::list<idol::Var> m_first_stage_variables;
29 std::optional<Annotation<unsigned int>> m_decomposition;
30
31 void throw_if_no_deterministic_model() const;
32 void build_deterministic_model();
33 void build_branch_and_price();
34public:
35 Convexification(const Model& t_parent,
36 const idol::Robust::Description& t_robust_description,
37 const idol::Bilevel::Description& t_bilevel_description,
38 const OptimizerFactory& t_master_optimizer,
39 const OptimizerFactory& t_sub_problem_optimizer,
40 const OptimizerFactory* t_integer_master_heuristic_optimizer);
41
42 [[nodiscard]] std::string name() const override;
43
44 [[nodiscard]] SolutionStatus get_status() const override;
45
46 [[nodiscard]] SolutionReason get_reason() const override;
47
48 [[nodiscard]] double get_best_obj() const override;
49
50 [[nodiscard]] double get_best_bound() const override;
51
52 [[nodiscard]] double get_var_primal(const Var &t_var) const override;
53
54 [[nodiscard]] double get_var_reduced_cost(const Var &t_var) const override;
55
56 [[nodiscard]] double get_var_ray(const Var &t_var) const override;
57
58 [[nodiscard]] double get_ctr_dual(const Ctr &t_ctr) const override;
59
60 [[nodiscard]] double get_ctr_farkas(const Ctr &t_ctr) const override;
61
62 [[nodiscard]] unsigned int get_n_solutions() const override;
63
64 [[nodiscard]] unsigned int get_solution_index() const override;
65
66 [[nodiscard]] const Model& deterministic_model() const;
67
68protected:
69 void add(const Var &t_var) override;
70
71 void add(const Ctr &t_ctr) override;
72
73 void add(const QCtr &t_ctr) override;
74
75 void remove(const Var &t_var) override;
76
77 void remove(const Ctr &t_ctr) override;
78
79 void remove(const QCtr &t_ctr) override;
80
81 void update() override;
82
83 void write(const std::string &t_name) override;
84
85 void hook_optimize() override;
86
87 void set_solution_index(unsigned int t_index) override;
88
89 void update_obj_sense() override;
90
91 void update_obj() override;
92
93 void update_rhs() override;
94
95 void update_obj_constant() override;
96
97 void update_mat_coeff(const Ctr &t_ctr, const Var &t_var) override;
98
99 void update_ctr_type(const Ctr &t_ctr) override;
100
101 void update_ctr_rhs(const Ctr &t_ctr) override;
102
103 void update_var_type(const Var &t_var) override;
104
105 void update_var_lb(const Var &t_var) override;
106
107 void update_var_ub(const Var &t_var) override;
108
109 void update_var_obj(const Var &t_var) override;
110};
111
112#endif //IDOL_OPTIMIZERS_CONVEXIFICATION_H