4 #include "../contrib/ilpabstraction/src/common.hpp"
5 #include "../datastructures/maybe.hpp"
6 #include "../instance/solution.hpp"
7 #include "../manager/timer.hpp"
8 #include "../util/log.hpp"
14 class AdditionalResultStorage;
27 template <
class MIPSolverT>
30 ILPBase(
const Instance & instance, AdditionalResultStorage & additional,
31 const SolverConfig & sconf);
34 using MIPSolver = MIPSolverT;
35 using Model =
typename MIPSolverT::Model;
36 using Variable =
typename MIPSolverT::Variable;
37 using Expression =
typename MIPSolverT::Expression;
38 using VarType = ilpabstraction::VariableType;
39 using ParamType = ilpabstraction::ParamType;
40 using ModelStatus = ilpabstraction::ModelStatus;
41 using Constraint =
typename MIPSolverT::Constraint;
42 using MIPFeatures = ilpabstraction::Features;
44 Maybe<double> get_lower_bound();
46 static const Traits & get_requirements();
52 class Callback :
public MIPSolverT::Callback {
54 Callback(
const Timer & timer, AdditionalResultStorage & additional_storage,
56 virtual void on_poll(
typename MIPSolver::Callback::Context & ctx)
override;
57 virtual void on_message(
typename MIPSolver::Callback::Context & ctx,
58 std::string & message)
override;
61 const double LOG_INTERVAL = 10;
62 const int REPEAT_HEADER = 30;
64 void log_intermediate();
65 double last_intermediate_time = 0;
68 AdditionalResultStorage & additional_storage;
71 int lines_before_header;
75 void prepare_base_variables();
82 void prepare_edge_constraints();
87 void prepare_objective();
89 void do_initialization();
90 void solve(Maybe<unsigned int> time_limit);
91 void compute_values();
93 Solution get_solution_by_start_vars();
102 std::vector<Maybe<unsigned int>> computed_solution_start_times;
110 void generate_vars_start_points();
111 bool start_points_set;
112 std::vector<Variable> start_points;
116 std::vector<Variable> duration_variables;
120 std::vector<Variable> max_usage_variables;
124 std::vector<Variable> window_not_modified_var;
127 Variable overshoot_cost_variable;
128 Variable investment_cost_variable;
130 unsigned int earliest_release;
131 unsigned int latest_deadline;
137 bool initialize_with_early;
138 bool collect_kappa_stats;
140 decltype(std::chrono::high_resolution_clock::now()) prepare_started;
141 decltype(std::chrono::high_resolution_clock::now()) prepare_finished;
143 static const Traits required_traits;
145 AdditionalResultStorage & additional_storage;
146 const SolverConfig & sconf;