FLOPC++
MP_constraint.hpp
Go to the documentation of this file.
1 // ******************** FlopCpp **********************************************
2 // File: MP_constraint.hpp
3 // $Id$
4 // Author: Tim Helge Hultberg (thh@mat.ua.pt)
5 // Copyright (C) 2003 Tim Helge Hultberg
6 // All Rights Reserved.
7 // ****************************************************************************
8 
9 #ifndef _MP_constraint_hpp_
10 #define _MP_constraint_hpp_
11 
12 #include <set>
13 #include <string>
14 
15 #include "MP_set.hpp"
16 #include "MP_domain.hpp"
17 #include "MP_utilities.hpp"
18 #include "MP_expression.hpp"
19 #include "MP_boolean.hpp"
20 #include "MP_data.hpp"
21 
22 namespace flopc {
23 
24  class MP_constraint;
25  class Constant;
26  class MP_model;
27  class MP_variable;
28 
32  enum Sense_enum {LE,GE,EQ};
33 
39  class Constraint {
40  friend class MP_constraint;
41  friend class MP_model;
42  friend Constraint operator<=(const MP_expression& l, const MP_expression& r);
43  friend Constraint operator<=(const Constant& l, const MP_expression& r);
44  friend Constraint operator<=(const MP_expression& l, const Constant& r);
45  friend Constraint operator<=(const VariableRef& l, const VariableRef& r);
46 
47  friend Constraint operator>=(const MP_expression& l, const MP_expression& r);
48  friend Constraint operator>=(const Constant& l, const MP_expression& r);
49  friend Constraint operator>=(const MP_expression& l, const Constant& r);
50  friend Constraint operator>=(const VariableRef& l, const VariableRef& r);
51 
52  friend Constraint operator==(const MP_expression& l, const MP_expression& r);
53  friend Constraint operator==(const Constant& l, const MP_expression& r);
54  friend Constraint operator==(const MP_expression& l, const Constant& r);
55  friend Constraint operator==(const VariableRef& l, const VariableRef& r);
56  private:
58  left(l), right(r), sense(s) {}
59 
62  };
63 
69  inline Constraint operator<=(const MP_expression& l, const MP_expression& r) {
70  return Constraint(l, r, LE);
71  }
77  inline Constraint operator<=(const Constant& l, const MP_expression& r) {
78  return operator<=(MP_expression(l), r);
79  }
85  inline Constraint operator<=(const MP_expression& l, const Constant& r){
86  return operator<=(l, MP_expression(r));
87  }
93  inline Constraint operator<=(const VariableRef& l, const VariableRef& r) {
94  return *new Constraint(l, r, LE);
95  }
96 
102  inline Constraint operator>=(const MP_expression& l, const MP_expression& r) {
103  return *new Constraint(l, r, GE);
104  }
110  inline Constraint operator>=(const Constant& l, const MP_expression& r){
111  return operator>=(MP_expression(l), r);
112  }
118  inline Constraint operator>=(const MP_expression& l, const Constant& r){
119  return operator>=(l, MP_expression(r));
120  }
126  inline Constraint operator>=(const VariableRef& l, const VariableRef& r) {
127  return *new Constraint(l, r, GE);
128  }
129 
135  inline Constraint operator==(const MP_expression& l, const MP_expression& r) {
136  return *new Constraint(l, r, EQ);
137  }
143  inline Constraint operator==(const Constant& l, const MP_expression& r){
144  return operator==(MP_expression(l), r);
145  }
151  inline Constraint operator==(const MP_expression& l, const Constant& r) {
152  return operator==(l, MP_expression(r));
153  }
159  inline Constraint operator==(const VariableRef& l, const VariableRef& r) {
160  return *new Constraint(l, r, EQ);
161  }
162 
163 
164  class GenerateFunctor;
165 
194  class MP_constraint : public RowMajor, public Named {
195  public:
198  const MP_set_base &s1 = MP_set::getEmpty(),
199  const MP_set_base &s2 = MP_set::getEmpty(),
200  const MP_set_base &s3 = MP_set::getEmpty(),
201  const MP_set_base &s4 = MP_set::getEmpty(),
202  const MP_set_base &s5 = MP_set::getEmpty()
203  );
204 
206  const MP_index_exp& i1 = MP_index_exp::getEmpty(),
207  const MP_index_exp& i2 = MP_index_exp::getEmpty(),
208  const MP_index_exp& i3 = MP_index_exp::getEmpty(),
209  const MP_index_exp& i4 = MP_index_exp::getEmpty(),
211  ) {
212  I1 = i1; I2 = i2; I3 = i3; I4 = i4; I5 = i5;
213  return *this;
214  }
215 
216  operator int() {
217  return offset + f(I1->evaluate(),I2->evaluate(),I3->evaluate(),
218  I4->evaluate(),I5->evaluate());
219  }
220 
221  virtual ~MP_constraint() {}
222 
223  double price(int i1=0, int i2=0, int i3=0, int i4=0, int i5=0) const;
224 
226 
227  int row_number() const;
228 
230  B = b;
231  return *this;
232  }
233 
234  void insertVariables(std::set<MP_variable*>& v);
235 
236  void operator=(const Constraint& v);
237 
238  void display(std::string s="") const;
239 
241  int offset;
244  private:
246  const MP_set_base &S1, &S2, &S3, &S4, &S5;
248  };
249 
250 } // End of namespace flopc
251 #endif
MP_constraint & such_that(const MP_boolean &b)
static MP_set & getEmpty()
gets the distinct &#39;empty&#39; MP_set.
Definition: MP_set.cpp:17
friend Constraint operator<=(const MP_expression &l, const MP_expression &r)
Uses operator overloading to construct an ConstraintConstucts a Constraint using operator overloading...
void display(std::string s="") const
MP_boolean operator>=(const MP_index_exp &e1, const MP_index_exp &e2)
constructs a boolean evaluator using operator overloadingThis is used in the normal formation of an e...
Definition: MP_boolean.cpp:177
Symbolic representation of a linear expression.This is one of the main public interface classes...
void coefficients(GenerateFunctor &f)
double price(int i1=0, int i2=0, int i3=0, int i4=0, int i5=0) const
friend Constraint operator>=(const MP_expression &l, const MP_expression &r)
Uses operator overloading to construct an ConstraintConstucts a Constraint using operator overloading...
MP_constraint & operator()(const MP_index_exp &i1=MP_index_exp::getEmpty(), const MP_index_exp &i2=MP_index_exp::getEmpty(), const MP_index_exp &i3=MP_index_exp::getEmpty(), const MP_index_exp &i4=MP_index_exp::getEmpty(), const MP_index_exp &i5=MP_index_exp::getEmpty())
void operator=(const Constraint &v)
MP_boolean operator<=(const MP_index_exp &e1, const MP_index_exp &e2)
constructs a boolean evaluator using operator overloadingThis is used in the normal formation of an e...
Definition: MP_boolean.cpp:165
const MP_set_base & S2
const MP_set_base & S1
MP_expression right
const MP_set_base & S3
Utility interface class for adding a string name onto a structure.
Representation of an expression involving an index.This is one of the main public interface classes...
Definition: MP_index.hpp:145
int f(int i1=0, int i2=0, int i3=0, int i4=0, int i5=0) const
void insertVariables(std::set< MP_variable * > &v)
static const MP_index_exp & getEmpty()
Return the unique empty expression.
Definition: MP_index.cpp:23
friend Constraint operator==(const MP_expression &l, const MP_expression &r)
Uses operator overloading to construct an ConstraintConstucts a Constraint using operator overloading...
MP_constraint(const MP_set_base &s1=MP_set::getEmpty(), const MP_set_base &s2=MP_set::getEmpty(), const MP_set_base &s3=MP_set::getEmpty(), const MP_set_base &s4=MP_set::getEmpty(), const MP_set_base &s5=MP_set::getEmpty())
construct the MP_constraint with appropriate sets for indexing.
This is the anchor point for all constructs in a FlopC++ model.The constructors take an OsiSolverInte...
Definition: MP_model.hpp:89
Reference counted class for all &quot;boolean&quot; types of data.This contains counters to ConstantBase pointe...
Definition: MP_boolean.hpp:45
Sense_enum
Enumeration for indicating direction of a constraint.
int row_number() const
MP_expression left
Reference counted class for all &quot;constant&quot; types of data.
Definition: MP_constant.hpp:48
MP_boolean operator==(const MP_index_exp &e1, const MP_index_exp &e2)
constructs a boolean evaluator using operator overloadingThis is used in the normal formation of an e...
Definition: MP_boolean.cpp:189
Functor to facilitate generation of coefficients.
Internal representation of a &quot;set&quot;.
Definition: MP_set.hpp:28
Constraint(const MP_expression &l, const MP_expression &r, Sense_enum s)
const MP_set_base & S5
const MP_set_base & S4
Semantic representation of a linear constraint.This is one of the main public interface classes...