MineLink
 All Data Structures Functions Variables Pages
constraint.h
1 #ifndef __CONSTRAINT_H__
2 #define __CONSTRAINT_H__
3 
4 #include <string>
5 #include <cstdio>
6 #include <cstring>
7 #include <typeinfo>
8 #include "../../data_structures/bm/blockmodel.h"
9 #include "../../data_structures/bm/blocksel.h"
10 #include "schedule.h"
11 #include "../../solvers/scheduling/fractional_scheduler/fractional_schedule.h"
12 #include "../../data_structures/precs/arcs.h"
13 #include "../../data_structures/precs/precs.h"
14 #include "ramps.h"
15 #include "named.h"
16 
17 using std::string;
18 
19 
20 namespace delphos{
33 class Constraint : public Named {
34 public:
42  Constraint(const string & name);
43 
49  virtual ~Constraint();
50 
61  virtual bool Check(const delphos::Schedule & sch) const;
62 
73  virtual bool Check(const delphos::FractionalSchedule & fsch) const;
74 
83  virtual string ToXML(const unsigned int identation_level = 0) const;
84 
88  const char * TypeName() const;
89 protected:
97  virtual string XMLHeading(const unsigned int & identation_level=0) const;
98 
106  virtual string XMLBody(const unsigned int & identation_level=0) const;
107 
115  virtual string XMLFooting(const unsigned int & identation_level=0) const;
116 
125  static string XMLIdentation(const unsigned int & identation_level);
126 
137  static string XMLAttribute(const string & attr_name, const double & value);
138 
149  static string XMLAttribute(const string & attr_name, const string & value);
150 };
151 
158 class BlockConstraint : virtual public Constraint
159 {
160 private:
161  BlockSelection * _bs;
162  bool _bs_todelete;
163 public:
172  BlockConstraint(const string & name,delphos::BlockModel& bm);
179  BlockConstraint(const string & name, delphos::BlockSelection * bs);
180 
185 
189  virtual ~BlockConstraint();
190 
191 protected:
192  virtual string XMLHeading(const unsigned int & identation_level=0) const;
193  virtual string XMLBody(const unsigned int & identation_level=0) const;
194  virtual string XMLFooting(const unsigned int & identation_level=0) const;
195 };
196 
203 class TimedConstraint : virtual public Constraint {
204 protected:
205  const unsigned int _period;
206 public:
216  TimedConstraint(const string & name, const unsigned int & period);
217 
221  virtual ~TimedConstraint();
222 
228  const unsigned int GetPeriod() const;
229 };
230 
235  public BlockConstraint, public TimedConstraint
236 {
237 public:
245  BlockTimingConstraint(const string & name, const unsigned int& period,delphos::BlockModel& bm);
246 
255  BlockTimingConstraint(const string & name, const unsigned int& period, delphos::BlockSelection * bs);
256 };
257 
265 private:
266  const string _attr;
267  const double _min, _max;
268  vector<string> _dest;
269 public:
276  static const double NegativeInfinite;
277 
284  static const double PositiveInfinite;
285 
298  const string & name,
299  const unsigned int & period,
300  const string & attribute,
301  const vector<string> & destinations,
302  const double min_value = NegativeInfinite,
303  const double max_value = PositiveInfinite,
304  delphos::BlockSelection * bs=NULL);
305  virtual ~AttributeSumConstraint();
306 
314  virtual bool Check(const delphos::Schedule & sch) const;
315 #ifndef MAC
316 
325  virtual bool Check(const delphos::FractionalSchedule & sch) const;
326 #endif
327 
333  const string SumAttribute() const;
334 
340  const string GetSumAttribute() const;
341 
346  const double MinValue() const;
347 
352  const double GetMinValue() const;
353 
358  const double MaxValue() const;
359 
364  const double GetMaxValue() const;
365 
371  const bool IsLowerBounded() const;
372 
378  const bool IsUpperBounded() const;
379 
386  const unsigned int NumAffectedDestinations() const;
387 
393  const unsigned int GetNumAffectedDestinations() const;
394 
401  string GetAffectedDestination(const unsigned int& i) const;
402 
406  const vector<string>& GetAffectedDestinations() const;
407 
408 protected:
409  virtual string XMLHeading(const unsigned int & identation_level=0) const;
410  virtual string XMLBody(const unsigned int & identation_level=0) const;
411  virtual string XMLFooting(const unsigned int & identation_level=0) const;
412 
413 };
414 
427 private:
428  const string _weight_attr;
429  const double _term_min;
430  const double _term_max;
431 public:
432 
446  const string & name,
447  const unsigned int & period,
448  const string & sum_attr,
449  const string & weight_attr,
450  const vector<string> & destinations,
451  const double min_value = NegativeInfinite,
452  const double max_value = PositiveInfinite,
453  delphos::BlockSelection * bs=NULL,
454  const double term_min =0.0,
455  const double term_max =0.0);
456 
460  virtual ~AttributeAvgConstraint();
461 
469  virtual bool Check(const delphos::Schedule & sch) const;
470 #ifndef MAC
471 
479  virtual bool Check(const delphos::FractionalSchedule & sch) const;
480 #endif
481 
486  const string WeightAttribute() const;
487 
492  const string GetWeightAttribute() const;
493 
497  const double GetFixedTermMin() const;
501  const double GetFixedTermMax() const;
502 protected:
503  virtual string XMLHeading(const unsigned int & identation_level=0) const;
504  virtual string XMLBody(const unsigned int & identation_level=0) const;
505  virtual string XMLFooting(const unsigned int & identation_level=0) const;
506 };
507 
514 private:
515  const Precedence & _prec;
516 public:
527  PrecedenceConstraint(const string & name, const delphos::Precedence & prec);
528 
532  virtual ~PrecedenceConstraint();
533 
539  virtual const delphos::Precedence & GetPrecedence() const;
540 
547  virtual bool Check(const delphos::Schedule & sch) const;
548 #ifndef MAC
549 
557  virtual bool Check(const delphos::FractionalSchedule & sch) const;
558 #endif
559 protected:
560  virtual string XMLHeading(const unsigned int & identation_level=0) const;
561  virtual string XMLBody(const unsigned int & identation_level=0) const;
562  virtual string XMLFooting(const unsigned int & identation_level=0) const;
563 };
564 
565 
573 private:
574  const BlockSelection& _bs_first;
575  const BlockSelection& _bs_second;
576 public:
582  BlockSelectionPrecedenceConstraint(const string & name,const BlockSelection& bs_first, const BlockSelection& bs_second);
583 
588 
592  virtual const delphos::BlockSelection& GetFirstBlockSelection() const;
593 
597  virtual const delphos::BlockSelection& GetSecondBlockSelection() const;
598 
605  virtual bool Check(const delphos::Schedule & sch) const;
606 #ifndef MAC
607 
615  virtual bool Check(const delphos::FractionalSchedule & sch) const;
616 #endif
617 protected:
618  virtual string XMLHeading(const unsigned int & identation_level=0) const;
619  virtual string XMLBody(const unsigned int & identation_level=0) const;
620  virtual string XMLFooting(const unsigned int & identation_level=0) const;
621 };
622 
623 
633 private:
634  //const RampPrecedence & _rprec;
635  const unsigned int _delta;
636 public:
651  GeometricConstraint(const string & name, const delphos::RampPrecedence & rprec, const unsigned int delta);
652 
656  virtual ~GeometricConstraint();
657 
663  virtual const delphos::RampPrecedence & GetPrecedence() const;
664 
671  virtual bool Check(const delphos::Schedule & sch) const;
672 #ifndef MAC
673 
681  virtual bool Check(const delphos::FractionalSchedule & sch) const;
682 #endif
683 
691  const unsigned int GetTimeDifference() const;
692 
693 protected:
694  virtual string XMLHeading(const unsigned int & identation_level=0) const;
695  virtual string XMLBody(const unsigned int & identation_level=0) const;
696  virtual string XMLFooting(const unsigned int & identation_level=0) const;
697 };
698 
699 
700 }
701 #endif
702 
virtual ~GeometricConstraint()
Destroys the precedence constraint.
Definition: constraint.cpp:790
virtual bool Check(const delphos::Schedule &sch) const
Checks if the constraint is satisfied.
Definition: constraint.cpp:802
TimedConstraint(const string &name, const unsigned int &period)
Creates a new timed constraint.
Definition: constraint.cpp:72
delphos::BlockSelection * GetBlockSelection() const
Returns the selection of blocks being constrained.
Definition: constraint.cpp:102
const unsigned int NumAffectedDestinations() const
Returns the number of destinations affected by the constraint.
Definition: constraint.cpp:359
PrecedenceConstraint(const string &name, const delphos::Precedence &prec)
Creates a new precedence constraint.
Definition: constraint.cpp:586
Abstracts a set of blocks (subset of a blockmodel).
Definition: blocksel.h:33
virtual bool Check(const delphos::Schedule &sch) const
Checks if the constraint is satisfied.
Definition: constraint.cpp:597
const double MinValue() const
Returns the lower limit set by the constraint. Return the lower limit set by the constraint.
Definition: constraint.cpp:353
virtual bool Check(const delphos::Schedule &sch) const
Checks if the constraint is satisfied.
Definition: constraint.cpp:694
A constraint on the addition of the attributes of a block.
Definition: constraint.h:264
const double MaxValue() const
Returns the upper limit set by the constraint. Return the upper limit set by the constraint.
Definition: constraint.cpp:356
const vector< string > & GetAffectedDestinations() const
Returns the affected destinations.
Definition: constraint.cpp:370
virtual bool Check(const delphos::Schedule &sch) const
Checks if the schedule satisfies the constraint.
Definition: constraint.cpp:211
virtual ~PrecedenceConstraint()
Destroys the precedence constraint.
Definition: constraint.cpp:590
const string GetSumAttribute() const
Returns the attribute to be added up and limited.
Definition: constraint.cpp:349
virtual const delphos::Precedence & GetPrecedence() const
Returns the precedence object associated to the constraint.
Definition: constraint.cpp:593
virtual ~BlockSelectionPrecedenceConstraint()
Destroy the block selection precedence constraint.
Definition: constraint.cpp:680
const unsigned int GetTimeDifference() const
Returns the constraint's extraction time difference.
Definition: constraint.cpp:797
virtual const delphos::RampPrecedence & GetPrecedence() const
Returns the precedence object associated to the constraint.
Definition: constraint.cpp:792
A base class for constraints that apply to subsets of blocks.
Definition: constraint.h:158
BlockTimingConstraint(const string &name, const unsigned int &period, delphos::BlockModel &bm)
Creates a constraint limiting the period .
Definition: constraint.cpp:127
A constraint on the average values of attributes of blocks.
Definition: constraint.h:426
Constraint(const string &name)
Creates a constraint with given name.
Definition: constraint.cpp:10
virtual bool Check(const delphos::Schedule &sch) const
Checks if the given schedule satisfies the constraint.
Definition: constraint.cpp:19
BlockSelectionPrecedenceConstraint(const string &name, const BlockSelection &bs_first, const BlockSelection &bs_second)
Creates a block selection precedence constraint.
Definition: constraint.cpp:675
virtual string ToXML(const unsigned int identation_level=0) const
A XML string describing the constraint.
Definition: constraint.cpp:39
virtual ~BlockConstraint()
Destroys a block constraint.
Definition: constraint.cpp:95
horizontal precedence class with utility methods.
Definition: ramps.h:25
virtual ~Constraint()
Destructor.
Definition: constraint.cpp:13
Abstracts a container of blocks as a table with arbitrary number of attributes that can be accessed b...
Definition: blockmodel.h:62
A base class for constraints indexed by time-period.
Definition: constraint.h:203
const double GetFixedTermMin() const
Returns the fixed term on minimum bound.
Definition: constraint.cpp:411
const unsigned int GetNumAffectedDestinations() const
Returns the number of destinations affected by the constraint.
Definition: constraint.cpp:362
A geometric constraint.
Definition: constraint.h:632
Implements a precedence as an explicit set of arcs between blocks. Provides utility functions...
Definition: precs.h:22
Defines a fractional scheduling of blocks.
Definition: fractional_schedule.h:22
virtual const delphos::BlockSelection & GetFirstBlockSelection() const
Returns the first block selection to be extracted.
Definition: constraint.cpp:684
string GetAffectedDestination(const unsigned int &i) const
Returns the name of the i-th destinations affected by the constraint.
Definition: constraint.cpp:366
virtual const delphos::BlockSelection & GetSecondBlockSelection() const
Returns the second block selection to be extracted.
Definition: constraint.cpp:689
const double GetFixedTermMax() const
Returns the fixed term on the maximum bound.
Definition: constraint.cpp:414
const double GetMaxValue() const
Returns the upper limit set by the constraint. Return the upper limit set by the constraint.
Definition: constraint.cpp:357
GeometricConstraint(const string &name, const delphos::RampPrecedence &rprec, const unsigned int delta)
Creates a new geometric constraint.
Definition: constraint.cpp:786
AttributeSumConstraint(const string &name, const unsigned int &period, const string &attribute, const vector< string > &destinations, const double min_value=NegativeInfinite, const double max_value=PositiveInfinite, delphos::BlockSelection *bs=NULL)
Creates a new sum constraint.
Definition: constraint.cpp:143
BlockConstraint(const string &name, delphos::BlockModel &bm)
Creates a new block selection constraint.
Definition: constraint.cpp:89
const bool IsLowerBounded() const
Checks if the lower limit applies or not.
Definition: constraint.cpp:162
const string GetWeightAttribute() const
The attribute to be used as weight for the average of the attribute. The attribute to be used as weig...
Definition: constraint.cpp:407
const unsigned int GetPeriod() const
Returns the time-period that the constraint applies at.
Definition: constraint.cpp:78
Defines a constraint that limits processing periods or destinations for blocks.
Definition: constraint.h:234
Defines the base class for all constraints.
Definition: constraint.h:33
A precedence constraint.
Definition: constraint.h:513
static const double NegativeInfinite
Useful constant for 'negative infinite'.
Definition: constraint.h:276
const string SumAttribute() const
Returns the attribute to be added up and limited.
Definition: constraint.cpp:345
AttributeAvgConstraint(const string &name, const unsigned int &period, const string &sum_attr, const string &weight_attr, const vector< string > &destinations, const double min_value=NegativeInfinite, const double max_value=PositiveInfinite, delphos::BlockSelection *bs=NULL, const double term_min=0.0, const double term_max=0.0)
Definition: constraint.cpp:379
A block selection precedence constraint.
Definition: constraint.h:572
const char * TypeName() const
a char string used a identifier in the XML representation of the constraint.
Definition: constraint.cpp:15
Defines a scheduling of blocks.
Definition: schedule.h:23
virtual ~AttributeAvgConstraint()
Destroys the attribute average constraint.
Definition: constraint.cpp:402
const string WeightAttribute() const
The attribute to be used as weight for the average of the attribute. The attribute to be used as weig...
Definition: constraint.cpp:404
virtual bool Check(const delphos::Schedule &sch) const
Checks if the constraint is satisfied by the schedule.
Definition: constraint.cpp:440
static const double PositiveInfinite
Useful constant for 'positive infinite'.
Definition: constraint.h:284
virtual ~TimedConstraint()
destroys a timed constraint.
Definition: constraint.cpp:77
const double GetMinValue() const
Returns the lower limit set by the constraint. Return the lower limit set by the constraint.
Definition: constraint.cpp:354
const bool IsUpperBounded() const
Checks if the upper bound limit applies or not.
Definition: constraint.cpp:167