7#ifndef IDOL_IMPL_MIBS_FROM_API_H
8#define IDOL_IMPL_MIBS_FROM_API_H
10#include "idol/mixed-integer/modeling/models/Model.h"
11#include "MibSModel.hpp"
12#include "idol/bilevel/modeling/Description.h"
14#include "idol/mixed-integer/optimizers/callbacks/Callback.h"
23class idol::impl::MibSFromAPI :
public idol::impl::MibS {
26 const std::list<std::unique_ptr<Callback>>& m_callbacks;
28 const bool m_use_cplex_for_feasibility;
31 std::unique_ptr<AlpsKnowledgeBroker> m_broker;
32 std::unique_ptr<OsiSolverInterface> m_osi_solver;
34 std::vector<std::vector<unsigned int>> m_ctr_indices_in_mibs;
35 unsigned int m_n_ctr_in_mibs = 0;
37 static char to_mibs_type(VarType t_type);
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);
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();
53 OsiSolverInterface* t_osi_solver,
54 const std::list<std::unique_ptr<Callback>>& t_callbacks,
55 bool t_use_cplex_for_feasibility,
58 void solve()
override;
60 [[nodiscard]]
double get_best_obj()
const override;
62 [[nodiscard]]
double get_best_bound()
const override;
64 [[nodiscard]]
double get_var_primal(
const Var& t_var)
const override;
66 [[nodiscard]] idol::SolutionStatus get_status()
const override;
68 [[nodiscard]] idol::SolutionReason get_reason()
const override;
70 friend class ::idol::MibSCallbackI;