Loading...
Searching...
No Matches
impl_MibSFromAPI.h
1//
2// Created by henri on 01.02.24.
3//
4
5#ifndef IDOL_IMPL_MIBS_FROM_API_H
6#define IDOL_IMPL_MIBS_FROM_API_H
7
8#include "idol/mixed-integer/modeling/models/Model.h"
9#include "idol/bilevel/modeling/Description.h"
10#include "impl_MibS.h"
11#include "idol/mixed-integer/optimizers/callbacks/Callback.h"
12
13namespace idol::impl {
14 class MibSFromAPI;
15}
16
17class idol::impl::MibSFromAPI : public idol::impl::MibS {
18 const idol::Model& m_model;
19 const idol::Bilevel::Description& m_description;
20 const std::list<std::unique_ptr<Callback>>& m_callbacks;
21 const bool m_logs;
22 const std::string m_native_feasibility_checker;
23 const bool m_use_native_feasibility_checker;
24
25 void* m_mibs = nullptr; // MibSModel
26 void* m_broker = nullptr; // AlpsKnowledgeBroker
27 void* m_osi_solver = nullptr; // OsiSolverInterface
28
29 std::vector<std::vector<unsigned int>> m_ctr_indices_in_mibs;
30 unsigned int m_n_ctr_in_mibs = 0;
31
32 static char to_mibs_type(VarType t_type);
33
34 void load_auxiliary_data();
35 std::pair<std::vector<int>, std::vector<int>> dispatch_variable_indices();
36 std::pair<std::vector<int>, std::vector<int>> dispatch_constraint_indices();
37 std::vector<double> find_lower_level_objective_coefficients(const std::vector<int>& t_lower_level_variables_indices);
38 std::pair<std::vector<double>, std::vector<double>> find_lower_level_bounds(const std::vector<int>& t_lower_level_variables_indices);
39
40 void load_problem_data();
41 std::tuple<std::vector<double>, std::vector<double>, std::vector<char>> parse_variables();
42 std::tuple<std::vector<double>, std::vector<double>, std::vector<char>> parse_constraints();
43 void* parse_matrix(); // returns a CoinPackedMatrix
44 std::vector<double> parse_objective();
45public:
46 MibSFromAPI(const idol::Model& t_model,
47 const idol::Bilevel::Description& t_description,
48 const std::list<std::unique_ptr<Callback>>& t_callbacks,
49 std::string t_native_feasibility_checker,
50 OptimizerFactory* t_optimizer_factory,
51 bool t_logs);
52
53 ~MibSFromAPI() override;
54
55 void solve() override;
56
57 [[nodiscard]] double get_best_obj() const override;
58
59 [[nodiscard]] double get_best_bound() const override;
60
61 [[nodiscard]] double get_var_primal(const Var& t_var) const override;
62
63 [[nodiscard]] idol::SolutionStatus get_status() const override;
64
65 [[nodiscard]] idol::SolutionReason get_reason() const override;
66
67};
68
69#endif //IDOL_IMPL_MIBS_FROM_API_H