4 #include "../manager/solvers.hpp"
5 #include "../util/log.hpp"
6 #include "generated_config.hpp"
11 class AdditionalResultStorage;
15 template <
unsigned int>
19 #if defined(GUROBI_FOUND)
20 #include "../contrib/ilpabstraction/src/ilpa_gurobi.hpp"
23 #if defined(CPLEX_FOUND)
24 #include "../contrib/ilpabstraction/src/ilpa_cplex.hpp"
27 template <
class SolverT>
28 class OBILP :
public ILPBase<SolverT> {
30 OBILP(
const Instance & instance, AdditionalResultStorage & additional,
31 const SolverConfig & sconf);
34 static std::string get_id();
39 using Base = ILPBase<SolverT>;
40 using MIPSolver =
typename Base::MIPSolver;
41 using Model =
typename Base::Model;
42 using Variable =
typename Base::Variable;
43 using Expression =
typename Base::Expression;
44 using VarType =
typename Base::VarType;
45 using ParamType =
typename Base::ParamType;
46 using ModelStatus =
typename Base::ModelStatus;
47 using Constraint =
typename Base::Constraint;
59 std::vector<Event> events;
60 std::vector<unsigned int> earliest_starts;
61 std::vector<unsigned int> latest_finishs;
62 void generate_events() noexcept;
71 std::vector<std::unordered_map<
unsigned int, Variable>> disjunct_vars;
80 std::vector<std::unordered_map<
unsigned int, Variable>> order_vars;
88 std::vector<std::vector<Expression>> start_usage;
91 std::vector<std::vector<Variable>> start_usage_var;
92 std::vector<Constraint> usage_constraints;
94 void prepare_variables();
97 void prepare_after_constraints();
100 void prepare_before_constraints();
103 void prepare_start_usage_exprs();
110 #if defined(GUROBI_FOUND)
112 struct registry_hook<
113 solvers::get_free_N<OBILP<ilpabstraction::GurobiInterface>>()>
115 constexpr
static unsigned int my_N =
116 solvers::get_free_N<OBILP<ilpabstraction::GurobiInterface>>();
121 return solvers::register_class<OBILP<ilpabstraction::GurobiInterface>,
127 #if defined(CPLEX_FOUND)
129 struct registry_hook<
130 solvers::get_free_N<OBILP<ilpabstraction::CPLEXInterface>>()>
132 constexpr
static unsigned int my_N =
133 solvers::get_free_N<OBILP<ilpabstraction::CPLEXInterface>>();
138 return solvers::register_class<OBILP<ilpabstraction::CPLEXInterface>,