5#ifndef IDOL_IMPL_MIBS_FROM_API_H
6#define IDOL_IMPL_MIBS_FROM_API_H
8#include "idol/mixed-integer/modeling/models/Model.h"
9#include "idol/bilevel/modeling/Description.h"
11#include "idol/mixed-integer/optimizers/callbacks/Callback.h"
17class idol::impl::MibSFromAPI :
public idol::impl::MibS {
20 const std::list<std::unique_ptr<Callback>>& m_callbacks;
22 const bool m_use_cplex_for_feasibility;
24 void* m_mibs =
nullptr;
25 void* m_broker =
nullptr;
26 void* m_osi_solver =
nullptr;
28 std::vector<std::vector<unsigned int>> m_ctr_indices_in_mibs;
29 unsigned int m_n_ctr_in_mibs = 0;
31 static char to_mibs_type(VarType t_type);
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);
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();
43 std::vector<double> parse_objective();
48 const std::list<std::unique_ptr<Callback>>& t_callbacks,
49 bool t_use_cplex_for_feasibility,
52 ~MibSFromAPI()
override;
54 void solve()
override;
56 [[nodiscard]]
double get_best_obj()
const override;
58 [[nodiscard]]
double get_best_bound()
const override;
60 [[nodiscard]]
double get_var_primal(
const Var& t_var)
const override;
62 [[nodiscard]] idol::SolutionStatus get_status()
const override;
64 [[nodiscard]] idol::SolutionReason get_reason()
const override;