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