MineLink
 All Data Structures Functions Variables Pages
gurobi_fractional_scheduler.h
1 
2 #ifndef __GUROBIFRACTIONALSCHEDULER_H__
3 #define __GUROBIFRACTIONALSCHEDULER_H__
4 
5 #include <string>
6 #include <sstream>
7 #include <map>
8 #include <typeinfo>
9 #include "fractional_scheduler.h"
10 #include "../../../problems/scheduling/filtering.h"
11 #include "gurobi_model.h"
12 #include <iostream>
13 #include <algorithm>
14 
15 //using std::cerr;
16 //using std::endl;
17 
18 namespace delphos{
19 
20 //#ifndef GRB_MAXIMIZE
21 //#define GRB_MAXIMIZE -1
22 //#define GRB_MINIMIZE 1
23 //#endif
24 
29 private:
30  GurobiModel * _gmodel;
31 
32 
33  bool _created_vars;
34  bool _updated_ctrs;
35  bool _stocks;
36  bool _bmodelcreated;
37 
38  Model::OptimizationSense _optimization_sense;
39  string _logfile;
40 
41  bool CreateVariables();
42  bool CreateGoalFunction();
43  bool CreateCoreConstraints();
44  bool CreateUserConstraints();
45 
46  const bool CreatedVars() const;
47  const bool UpdatedConstrs() const;
48 
49  void ApplyPrecedenceConstraint(const PrecedenceConstraint& pc);
50  void ApplyAttributeSumConstraint(const AttributeSumConstraint& asc);
51  void ApplyAttributeAvgConstraint(const AttributeAvgConstraint& asc);
52  void ApplyDoNotMineBeforeConstraint(const DoNotMineBeforeConstraint& dc);
53  void ApplyForceMiningByConstraint(const ForceMiningByConstraint& fc);
54  void ApplyDoNotSendToConstraint(const DoNotSendToConstraint& dnsc);
55  void ApplyGeometricConstraint(const GeometricConstraint& gc);
56  void ApplyMinExtractPeriodConstraint(const MinExtractPeriodConstraint& mepc);
57  void ApplyBlockSelectionPrecedenceConstraint(const BlockSelectionPrecedenceConstraint& bspc);
58  void ApplyConstraint(const Constraint& ctr);
59 
60  vector<BlockIndexType> _index_in_bs;
61  Variable ProcVar(
62  const BlockIndexType& block_index,
63  const unsigned int& period,
64  const unsigned int& destination);
65 
66  Variable StockVar(
67  const unsigned int& stock_index,
68  const unsigned int& period,
69  const unsigned int& destination);
70 
71  LinearExpr RealProcVar(
72  const BlockIndexType& block_index,
73  const unsigned int& period,
74  const unsigned int& destination);
75 
76  LinearExpr RealProcVar2P(
77  const BlockIndexType & block_index,
78  const unsigned int & period,
79  const unsigned int & destination);
80 
81  bool SetFractionalSchedule();
82  unsigned long _nb_prec;
83 
84 public:
90 
95 
101  virtual bool Run();
102 
108  bool CreateModel();
109 
110  #ifndef DOXYGEN
111 
117  void Optimize();
118  #endif
119 
127  void WriteLP(const string outfile);
128 
136  void WriteSol(const string outfile);
137 
144  double GetSol(const BlockIndexType& block_index,
145  const unsigned int& period,
146  const unsigned int& destination);
147 
151  GurobiModel& GetMathematicalModel();
152 
156  double GetObjValue();
157 
163  void SetOptimizationSense(const Model::OptimizationSense& sense);
164 
169  void SetLogFile(const string& name);
170 
174  const bool IsStock();
175 
176  #ifndef DOXYGEN
177  static string ProcVarName(
178  const BlockIndexType& block_index,
179  const unsigned int& period,
180  const unsigned int& destination);
181  static string ProcVarName2P(
182  const BlockIndexType & block_index,
183  const unsigned int & period,
184  const unsigned int & destination);
185  static string StockVarName(
186  const unsigned long& stock_index,
187  const unsigned int& period,
188  const unsigned int& destination);
189  #endif
190 
198  const double GetDual(const string & cname);
199 
204  void ComputeExpectedTime(const string column);
205 
210 
211 };
212 }
213 #endif
214 
const delphos::FractionalSchedule & GetFractionalSchedule()
Returns the result fractional schedule.
Definition: gurobi_fractional_scheduler.cpp:1192
void WriteSol(const string outfile)
Writes the solution in given file.
Definition: gurobi_fractional_scheduler.cpp:995
void SetOptimizationSense(const Model::OptimizationSense &sense)
Set the sense of the optimization model.
Definition: gurobi_fractional_scheduler.cpp:980
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
double GetSol(const BlockIndexType &block_index, const unsigned int &period, const unsigned int &destination)
Returns the solution value for a block period and destination.
Definition: gurobi_fractional_scheduler.cpp:1004
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
Abstracts a Gurobi LP solver that can solve a scheduling instance.
Definition: gurobi_fractional_scheduler.h:28
A constraint on the average values of attributes of blocks.
Definition: constraint.h:426
double GetObjValue()
Returns the objective value of the optimized model.
Definition: gurobi_fractional_scheduler.cpp:316
void ComputeExpectedTime(const string column)
Computes the expected times.
Definition: gurobi_fractional_scheduler.cpp:1070
void SetLogFile(const string &name)
Set the use of the log with given file name.
Definition: gurobi_fractional_scheduler.cpp:983
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
GurobiFractionalScheduler(delphos::SchedulingInstance &si)
Creates a gurobi fractional scheduler with given scheduling instance.
Definition: gurobi_fractional_scheduler.cpp:5
Defines a fractional scheduling of blocks.
Definition: fractional_schedule.h:22
A constraint that prevents certain blocks that can't be extracted before a period due to capacities c...
Definition: filtering.h:178
void WriteLP(const string outfile)
Writes the LP model in given file.
Definition: gurobi_fractional_scheduler.cpp:988
virtual ~GurobiFractionalScheduler()
The destructor.
Definition: gurobi_fractional_scheduler.cpp:15
Defines the base class for all constraints.
Definition: constraint.h:33
bool CreateModel()
Inits the solver and load the model in gurobi.
Definition: gurobi_fractional_scheduler.cpp:1031
A precedence constraint.
Definition: constraint.h:513
virtual bool Run()
Generates the model in Gurobi and optimize it.
Definition: gurobi_fractional_scheduler.cpp:270
A block selection precedence constraint.
Definition: constraint.h:572
Dummy class that define required methods for a solver of a scheduling instance.
Definition: fractional_scheduler.h:14
GurobiModel & GetMathematicalModel()
Returns the mathematical model.
Definition: gurobi_fractional_scheduler.cpp:311
const double GetDual(const string &cname)
Returns the dual value of given constraint.
Definition: gurobi_fractional_scheduler.cpp:1018
const bool IsStock()
Return true only if the inner scheduling instance has stoks.
Definition: gurobi_fractional_scheduler.cpp:973