MineLink
 All Data Structures Functions Variables Pages
swheuristics.h
1 #ifndef __SWHEURISTICS_H__
2 #define __SWHEURISTICS_H__
3 
4 #include "heuristics.h"
5 
6 #include "../fractional_scheduler/fractional_scheduler.h"
7 #include "../../../data_structures/bm/functors.h"
8 #ifndef NO_GUROBI
9  #include "gurobi_model.h"
10  #include "../ipscheduler/gurobimipscheduler.h"
11 #endif
12 #ifdef CBC
13  #include "cbc_model.h"
14  #include "../ipscheduler/cbcmipscheduler.h"
15 #endif
16 #include <map>
17 #include <typeinfo>
18 
19 using namespace std;
20 
21 
22 
23 namespace delphos {
24 
25 //void mycallback(const double& percentage);
26 
34 private:
35  unsigned int _window_size;
36  unsigned int _sub_window_size;
37  unsigned int _step;
38  bool _verbose;
39  string _path;
40  Model::Emphasis _emph;
41  float _gap;
42  Model::OptimizationSense _sense;
43  unsigned int _numthread;
44  double _subpb_timelimit;
45  bool _bno_output;
46 
47 protected :
48  string _sched_name;
49  const unsigned int GetWindowSize() const;
50  const unsigned int GetSubWindowSize() const;
51  const unsigned int GetStep() const;
52 
53  SchedulingInstance* GenerateWindowInstance(
54  BlockSelection & win_bs,
55  unsigned int & from,
56  unsigned int & end,
57  map<string, double> & tonnages);
58 
59  void CopyToFullSchedule(
60  SchedulingInstance * winsi,
61  const Schedule & winsch,
62  unsigned int from,
63  unsigned to,
64  map<string, double> & tonnages);
65 
66 
67 public:
84  const unsigned int & window_size,
85  const unsigned int & sub_window_size,
86  const unsigned int & step,
87 #ifndef NO_GUROBI
88  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
89 #else
90  const string& sched_name=Scheduler::CBC_MIPScheduler);
91 #endif
92 
105  SchedulingInstance & si,
106  const unsigned int & window_size,
107  const unsigned int & sub_window_size,
108 #ifndef NO_GUROBI
109  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
110 #else
111  const string& sched_name=Scheduler::CBC_MIPScheduler);
112 #endif
113 
130  const unsigned int & window_size,
131 #ifndef NO_GUROBI
132  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
133 #else
134  const string& sched_name=Scheduler::CBC_MIPScheduler);
135 #endif
136 
140  virtual bool Run();
141 
142 
146  void SetVerbose();
147 
152  void SetVerbose(const string & path);
153 
158  void SetSupPBTimeLimit(const double& tlimit);
159 
164  const bool GetVerbose() const;
165 
169  const string GetPath() const;
170 
175  void SetGap(const float & gap);
176 
180  const float GetGap() const;
181 
187  void SetEmphasis(const Model::Emphasis & emphasis);
188 
192  const Model::Emphasis GetEmphasis() const;
193 
199  void SetSense(const Model::OptimizationSense & sense);
200 
204  const Model::OptimizationSense GetSense() const;
205 
209  const string & GetLogFileName() const;
210 
214  void SetNumThread(const unsigned int& nthread);
215 
219  void SetNoOutput();
220 
221 };
222 
223 
230 protected:
231 
232  bool RelaxSecondWindowVariables(MIPScheduler& mip, const unsigned int & from, const unsigned int & to, const unsigned int & current);
233 
234 
235 public:
254  const unsigned int & window_size,
255  const unsigned int & sub_window_size,
256  const unsigned int & step,
257  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
258 
276  const unsigned int & window_size,
277  const unsigned int & sub_window_size,
278  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
279 
297  const unsigned int & window_size,
298  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
299 
300  virtual bool Run();
301 
302  //bool Create(MIPScheduler & mip, const bool relax = false);
303 
304 };
305 
313 private:
314  bool _bz;
315  bool SetUserConstraintsAndPenalizations(
316  MIPScheduler* mip,
317  const unsigned int & big_window_to,
318  const unsigned int & sub_window_to,
319  const unsigned int & current_from ,
320  map<string,double> & duals );
321  map<string,double> GetDualMap(FractionalScheduler& lp);
322 
323 public:
345  const unsigned int & sub_window_size,
346  const unsigned int & step,
347  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
348 
369  const unsigned int & step,
370  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
371 
375  virtual bool Run();
376 
380  void SetBZ();
381 
382 };
383 
384 #ifndef DOXYGEN
385 class SlidingTimeWindowHeuristicRegret: public SlidingTimeWindowHeuristic {
386 protected:
387  vector<double> _esperate_times;
388 
389 public:
399  SlidingTimeWindowHeuristicRegret(
401  const unsigned int & window_size,
402  const unsigned int & sub_window_size,
403  const unsigned int & step,
404  const vector<double>& esperate_times,
405  const string& sched_name=Scheduler::GUROBI_MIPScheduler);
406 
407  virtual bool Run();
408 
409 };
410 #endif
411 
412 }
413 #endif
Abstracts a set of blocks (subset of a blockmodel).
Definition: blocksel.h:33
Class that defines relaxed sliding time window heuristic that solve a scheduling instance.
Definition: swheuristics.h:229
Class that defines a sliding time window heuristic with lagrangean relaxion that solve a scheduling i...
Definition: swheuristics.h:312
Defines a scheduling instance to be solved.
Definition: instance.h:41
Class that defines sliding time window heuristic that solve a scheduling instance.
Definition: swheuristics.h:33
Dummy class that define required methods for a heuristic that solve a scheduling instance.
Definition: heuristics.h:18
Dummy class that define required methods for a MIP solver of a scheduling instance.
Definition: mip_scheduler.h:24
Defines a scheduling of blocks.
Definition: schedule.h:23
Dummy class that define required methods for a solver of a scheduling instance.
Definition: fractional_scheduler.h:14