idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
Optimizers_MinMax_Dualize.h
1//
2// Created by henri on 29.11.24.
3//
4
5#ifndef IDOL_OPTIMIZERS_MINMAX_DUALIZE_H
6#define IDOL_OPTIMIZERS_MINMAX_DUALIZE_H
7
8#include "idol/bilevel/modeling/Description.h"
9#include "idol/general/optimizers/Algorithm.h"
10#include "idol/mixed-integer/modeling/models/KKT.h"
11
12namespace idol::Optimizers::Bilevel::MinMax {
13 class Dualize;
14}
15
17 const idol::Bilevel::Description& m_description;
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;
22
23 const bool m_skip_solving_lower_level = false;
24
25 void throw_if_no_deterministic_model() const;
26 void solve_lower_level();
27
28 void create_deterministic_model_if_not_exists();
29public:
30 Dualize(const Model& t_parent,
31 const idol::Bilevel::Description& t_description,
32 const OptimizerFactory& t_deterministic_optimizer,
33 const std::unique_ptr<Reformulators::KKT::BoundProvider>& t_bound_provider);
34
35 [[nodiscard]] std::string name() const override;
36
37 [[nodiscard]] SolutionStatus get_status() const override;
38
39 [[nodiscard]] SolutionReason get_reason() const override;
40
41 [[nodiscard]] double get_best_obj() const override;
42
43 [[nodiscard]] double get_best_bound() const override;
44
45 [[nodiscard]] double get_var_primal(const Var &t_var) const override;
46
47 [[nodiscard]] double get_var_reduced_cost(const Var &t_var) const override;
48
49 [[nodiscard]] double get_var_ray(const Var &t_var) const override;
50
51 [[nodiscard]] double get_ctr_dual(const Ctr &t_ctr) const override;
52
53 [[nodiscard]] double get_ctr_farkas(const Ctr &t_ctr) const override;
54
55 [[nodiscard]] unsigned int get_n_solutions() const override;
56
57 [[nodiscard]] unsigned int get_solution_index() const override;
58
59protected:
60 void add(const Var &t_var) override;
61
62 void add(const Ctr &t_ctr) override;
63
64 void add(const QCtr &t_ctr) override;
65
66 void remove(const Var &t_var) override;
67
68 void remove(const Ctr &t_ctr) override;
69
70 void remove(const QCtr &t_ctr) override;
71
72 void update() override;
73
74 void write(const std::string &t_name) override;
75
76 void hook_optimize() override;
77
78 void set_solution_index(unsigned int t_index) override;
79
80 void update_obj_sense() override;
81
82 void update_obj() override;
83
84 void update_rhs() override;
85
86 void update_obj_constant() override;
87
88 void update_mat_coeff(const Ctr &t_ctr, const Var &t_var) override;
89
90 void update_ctr_type(const Ctr &t_ctr) override;
91
92 void update_ctr_rhs(const Ctr &t_ctr) override;
93
94 void update_var_type(const Var &t_var) override;
95
96 void update_var_lb(const Var &t_var) override;
97
98 void update_var_ub(const Var &t_var) override;
99
100 void update_var_obj(const Var &t_var) override;
101};
102
103#endif //IDOL_OPTIMIZERS_MINMAX_DUALIZE_H