A C++ Framework for Optimization
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 bool m_use_cplex_for_feasibility;
23
24 void* m_mibs = nullptr; // MibSModel
25 void* m_broker = nullptr; // AlpsKnowledgeBroker
26 void* m_osi_solver = nullptr; // OsiSolverInterface
27
28 std::vector<std::vector<unsigned int>> m_ctr_indices_in_mibs;
29 unsigned int m_n_ctr_in_mibs = 0;
30
31 static char to_mibs_type(VarType t_type);
32
33 void load_auxiliary_data();
34 std::pair<std::vector<int>, std::vector<int>> dispatch_variable_indices();
35 std::pair<std::vector<int>, std::vector<int>> dispatch_constraint_indices();
36 std::vector<double> find_lower_level_objective_coefficients(const std::vector<int>& t_lower_level_variables_indices);
37 std::pair<std::vector<double>, std::vector<double>> find_lower_level_bounds(const std::vector<int>& t_lower_level_variables_indices);
38
39 void load_problem_data();
40 std::tuple<std::vector<double>, std::vector<double>, std::vector<char>> parse_variables();
41 std::tuple<std::vector<double>, std::vector<double>, std::vector<char>> parse_constraints();
42 void* parse_matrix(); // returns a CoinPackedMatrix
43 std::vector<double> parse_objective();
44public:
45 MibSFromAPI(const idol::Model& t_model,
46 const idol::Bilevel::Description& t_description,
47 void* t_osi_solver,
48 const std::list<std::unique_ptr<Callback>>& t_callbacks,
49 bool t_use_cplex_for_feasibility,
50 bool t_logs);
51
52 ~MibSFromAPI() override;
53
54 void solve() override;
55
56 [[nodiscard]] double get_best_obj() const override;
57
58 [[nodiscard]] double get_best_bound() const override;
59
60 [[nodiscard]] double get_var_primal(const Var& t_var) const override;
61
62 [[nodiscard]] idol::SolutionStatus get_status() const override;
63
64 [[nodiscard]] idol::SolutionReason get_reason() const override;
65
66};
67
68#endif //IDOL_IMPL_MIBS_FROM_API_H