TCPSPSuite
All Classes Functions Pages
instance.hpp
1 #ifndef INSTANCE_HPP
2 #define INSTANCE_HPP
3 
4 #include "job.hpp" // for Job
5 #include "traits.hpp" // for Traits
6 
7 #include <cstddef> // for ptrdiff_t, size_t
8 #include <iterator> // for input_iterator_tag
9 #include <memory> // IWYU pragma: keep
10 #include <string> // for string
11 #include <vector> // for vector
12 class LagGraph;
13 class Resource;
14 class ResVec;
15 
24 class Instance {
25 public:
26  class JobContainer {
27  public:
28  JobContainer(const Instance * instance);
29 
30  class iterator {
31  public:
32  typedef std::input_iterator_tag iterator_category;
33  typedef Job value_type;
34  typedef Job * pointer;
35  typedef Job & reference;
36  typedef size_t size_type;
37  typedef std::ptrdiff_t difference_type;
38 
39  iterator(const JobContainer & c);
40  iterator(const JobContainer & c, unsigned int pos);
41 
42  const value_type & operator*();
43  const value_type * operator->();
44 
45  iterator operator++(int);
46  iterator & operator++();
47  iterator operator--(int);
48  iterator & operator--();
49 
50  bool operator==(const iterator & other) const;
51  bool operator!=(const iterator & other) const;
52 
53  private:
54  const JobContainer & c;
55  unsigned int i;
56  };
57 
58  iterator begin() const;
59  iterator end() const;
60 
61  bool operator==(const JobContainer & other) const;
62 
63  private:
64  const Instance * instance;
65  };
66 
67  // copy & move assignment / construction need to *not* copy the cached
68  // container
69  void swap(Instance & other);
70  Instance & operator=(Instance other);
71  Instance(const Instance & other);
72  Instance(Instance && other);
73 
78  Instance();
79 
87  Instance(const std::string instance_id, Traits wanted_traits);
88 
89  // copy-and-substitute
98  Instance(const Instance & origin, std::vector<bool> && job_is_substituted,
99  std::vector<Job> && substitutions);
100 
101  ~Instance();
102 
108  LagGraph & get_laggraph();
109 
115  const LagGraph & get_laggraph() const;
116 
123  unsigned int add_job(Job && job);
124 
131  unsigned int add_resource(Resource && resource);
132 
138  unsigned int job_count() const;
139 
145  const Job & get_job(unsigned int i) const;
146 
152  const JobContainer & get_jobs() const;
153 
159  unsigned int resource_count() const;
160 
166  const Resource & get_resource(unsigned int i) const;
167 
173  const Traits & get_traits() const;
174 
180  void compute_traits();
181 
187  const std::string & get_id() const;
188 
194  Instance clone() const;
195 
203  bool check_feasibility() const;
204 
213  void set_window_extension(unsigned int window_extension_limit,
214  unsigned int window_extension_job_limit);
215  void set_window_extension_hard_deadline(Maybe<unsigned int> deadline);
216 
217  unsigned int get_window_extension_limit() const;
218  unsigned int get_window_extension_job_limit() const;
219  Maybe<unsigned int> get_window_extension_hard_deadline() const;
220 
231  double
232  calculate_max_costs(const std::vector<unsigned int> & start_times) const;
233 
247  double calculate_costs(const ResVec & ressource_usage,
248  const ResVec & additional_usage) const;
249 
260  double calculate_costs(const ResVec & ressource_usage) const;
261 
267  unsigned int get_latest_deadline() const;
268 
269 private:
270  // These things are shared across substituted instances
271  std::shared_ptr<std::vector<Resource>> resources;
272  std::shared_ptr<std::vector<Job>> jobs;
273  std::shared_ptr<std::string> instance_id;
274  std::shared_ptr<LagGraph> laggraph;
275 
276  std::vector<bool> job_is_substituted;
277  std::vector<Job> substitutions;
278  JobContainer cached_container;
279 
280  unsigned int window_extension_limit;
281  unsigned int window_extension_job_limit;
282  Maybe<unsigned int> window_extension_hard_deadline;
283 
284  Traits wanted_traits;
285  Traits computed_traits;
286 };
287 
288 #endif
Instance::get_jobs
const JobContainer & get_jobs() const
Definition: instance.cpp:139
Instance::get_id
const std::string & get_id() const
Definition: instance.cpp:133
Instance::compute_traits
void compute_traits()
Definition: instance.cpp:204
Instance
a TCPSP instance
Definition: instance.hpp:24
Job
A job of an TCPSP instance.
Definition: job.hpp:21
Instance::job_count
unsigned int job_count() const
Definition: instance.cpp:227
Instance::get_job
const Job & get_job(unsigned int i) const
Definition: instance.cpp:233
Instance::calculate_costs
double calculate_costs(const ResVec &ressource_usage, const ResVec &additional_usage) const
Definition: instance.cpp:422
Instance::clone
Instance clone() const
Definition: instance.cpp:104
Instance::check_feasibility
bool check_feasibility() const
Definition: instance.cpp:348
Instance::resource_count
unsigned int resource_count() const
Definition: instance.cpp:243
Instance::get_latest_deadline
unsigned int get_latest_deadline() const
Helper to return the latest deadline in the instance.
Definition: instance.cpp:455
Instance::get_resource
const Resource & get_resource(unsigned int i) const
Definition: instance.cpp:249
Instance::calculate_max_costs
double calculate_max_costs(const std::vector< unsigned int > &start_times) const
Definition: instance.cpp:398
Instance::get_traits
const Traits & get_traits() const
Definition: instance.cpp:198
Instance::add_resource
unsigned int add_resource(Resource &&resource)
Definition: instance.cpp:187
Instance::add_job
unsigned int add_job(Job &&job)
Definition: instance.cpp:145
Instance::set_window_extension
void set_window_extension(unsigned int window_extension_limit, unsigned int window_extension_job_limit)
Setter for the window extension parameters.
Definition: instance.cpp:366
Instance::get_laggraph
LagGraph & get_laggraph()
Definition: instance.cpp:215
Instance::Instance
Instance()
Definition: instance.cpp:18