MineLink
 All Data Structures Functions Variables Pages
mip_scheduler.h
1 
2 #ifndef __MIP_SCHEDULER_H__
3 #define __MIP_SCHEDULER_H__
4 
5 #include <string>
6 #include <sstream>
7 #include <map>
8 #include <typeinfo>
9 #include "../scheduler.h"
10 #include "../../../problems/scheduling/filtering.h"
11 #include "model.h"
12 #include <iostream>
13 
14 
15 namespace delphos{
16 
17 
24 class MIPScheduler : public Scheduler {
25 private:
26 
27  //bool CreateVariables(const bool type = false);
28 
29  virtual bool CreateGoalFunction();
30  virtual bool CreateCoreConstraints();
31  virtual bool CreateUserConstraints();
32 
33 
34  virtual void ApplyPrecedenceConstraint(const PrecedenceConstraint& pc);
35  virtual void ApplyAttributeSumConstraint(const AttributeSumConstraint& asc);
36  virtual void ApplyAttributeAvgConstraint(const AttributeAvgConstraint& asc);
37  virtual void ApplyDoNotMineBeforeConstraint(const DoNotMineBeforeConstraint& dc);
38  virtual void ApplyForceMiningByConstraint(const ForceMiningByConstraint& fc);
39  virtual void ApplyDoNotSendToConstraint(const DoNotSendToConstraint& dnsc);
40  virtual void ApplyGeometricConstraint(const GeometricConstraint& gc);
41  virtual void ApplyMinExtractPeriodConstraint(const MinExtractPeriodConstraint& mepc);
42  virtual void ApplyBlockSelectionPrecedenceConstraint(const BlockSelectionPrecedenceConstraint& bsprc);
43 
44 protected:
45  Schedule * _schedule;
46 
47  bool _created_vars;
48  bool _updated_ctrs;
49  bool _stocks;
50  bool _optimized;
51 
52  Model::OptimizationSense _optimization_sense;
53  Model::Emphasis _mip_emphasis;
54  float _mipgap;
55  float _timelimit;
56  string _logfile;
57  bool _bno_output;
58  unsigned int _numthread;
59  virtual void ApplyConstraint(const Constraint& ctr);
60 
61 public:
68 
72  virtual ~MIPScheduler();
73 
79  virtual bool Run();
80 
86  virtual void Optimize();
87 
93  virtual bool CreateModel();
94 
100  virtual bool CreateVariables();
107  virtual void WriteLP(const string outfile);
108 
115  virtual void WriteSol(const string outfile);
116 
117  //virtual void WriteInfeasibleLP(const string outfile);
118 
122  virtual const delphos::Schedule & GetSchedule();
123 
128  virtual bool SetSchedule();
129 
134  virtual double GetObjValue();
135 
141  void SetOptimizationSense(const Model::OptimizationSense& sense);
142 
147  void SetLogFile(const string& name);
148 
155  void SetGap(const float& gap);
156 
162  void SetTimeLimit(const float& value);
163 
169  void SetMIPEmphasis(const Model::Emphasis& emphasis);
170 
174  void SetNoOutput();
175 
179  const bool CreatedVars() const;
180 
184  const bool Optimized();
185 
191  virtual const double GetDual(const string& cname);
192 
197  void SetNumThread(const unsigned int& nthreads);
198 
199  #ifndef DOXYGEN
200  string ProcVarName(
201  const BlockIndexType& block_index,
202  const unsigned int& period,
203  const unsigned int& destination);
204 
205  string StockVarName(
206  const unsigned long& stock_index,
207  const unsigned int& period,
208  const unsigned int& destination);
209  #endif
210 };
211 }
212 #endif
213 
virtual void WriteSol(const string outfile)
Writes the solution in given file.
Definition: mip_scheduler.cpp:165
void SetTimeLimit(const float &value)
Sets a time limit for the optimization.
Definition: mip_scheduler.cpp:157
void SetNoOutput()
Sets that no output is desired meanwhile optimization.
Definition: mip_scheduler.cpp:171
virtual bool CreateModel()
Creates the model.
Definition: mip_scheduler.cpp:57
virtual bool CreateVariables()
Creates the variables.
Definition: mip_scheduler.cpp:30
A constraint on the addition of the attributes of a block.
Definition: constraint.h:264
A constraint limiting the period at which a block should be mined.
Definition: filtering.h:62
Defines a scheduling instance to be solved.
Definition: instance.h:41
A constraint that prevents certain blocks to be sent to given processes.
Definition: filtering.h:107
virtual bool SetSchedule()
Set The result schedule This implementation is a dummy version that always returns false...
Definition: mip_scheduler.cpp:144
virtual void Optimize()
Optimizes the model.
Definition: mip_scheduler.cpp:61
A constraint on the average values of attributes of blocks.
Definition: constraint.h:426
void SetMIPEmphasis(const Model::Emphasis &emphasis)
Sets the MIP emphasis for the optimization.
Definition: mip_scheduler.cpp:160
void SetOptimizationSense(const Model::OptimizationSense &sense)
Sets the sense of the optimization model.
Definition: mip_scheduler.cpp:148
void SetNumThread(const unsigned int &nthreads)
Sets the number of threads used by the solver.
Definition: mip_scheduler.cpp:176
MIPScheduler(delphos::SchedulingInstance &si)
Creates a MIP scheduler with given scheduling instance.
Definition: mip_scheduler.cpp:5
A geometric constraint.
Definition: constraint.h:632
A constraint that forces a block to be mined before or at some period.
Definition: filtering.h:19
void SetLogFile(const string &name)
Sets the use of the log with given file name.
Definition: mip_scheduler.cpp:151
virtual const delphos::Schedule & GetSchedule()
Returns the result schedule.
Definition: mip_scheduler.cpp:65
virtual void WriteLP(const string outfile)
Writes the LP model in given file.
Definition: mip_scheduler.cpp:164
A constraint that prevents certain blocks that can't be extracted before a period due to capacities c...
Definition: filtering.h:178
virtual ~MIPScheduler()
The destructor.
Definition: mip_scheduler.cpp:7
virtual bool Run()
Creates the model and run the optimization.
Definition: mip_scheduler.cpp:51
Dummy class that define required methods for a solver of a scheduling instance.
Definition: scheduler.h:12
Dummy class that define required methods for a MIP solver of a scheduling instance.
Definition: mip_scheduler.h:24
Defines the base class for all constraints.
Definition: constraint.h:33
virtual double GetObjValue()
Returns the objective value of the optimized model. This implementation is a dummy version that alway...
Definition: mip_scheduler.cpp:70
A precedence constraint.
Definition: constraint.h:513
const bool Optimized()
Returns true only if the MIP have been succesfully optimized.
Definition: mip_scheduler.cpp:140
A block selection precedence constraint.
Definition: constraint.h:572
Defines a scheduling of blocks.
Definition: schedule.h:23
const bool CreatedVars() const
Returns true only if all the variables of the MIP are created.
Definition: mip_scheduler.cpp:46
virtual const double GetDual(const string &cname)
Returns the dual value of given constraint.
Definition: mip_scheduler.cpp:166
void SetGap(const float &gap)
Sets the desired gap for the optimization.
Definition: mip_scheduler.cpp:154