FlopCpp trunk
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
22namespace flopc {
23
24 class MP_constraint;
25 class Constant;
26 class MP_model;
27 class MP_variable;
28
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:
57 Constraint(const MP_expression& l, const MP_expression& r, Sense_enum s) :
58 left(l), right(r), sense(s) {}
59
60 MP_expression left,right;
61 Sense_enum sense;
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
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
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
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
244 private:
245 MP_boolean B;
246 const MP_set_base &S1, &S2, &S3, &S4, &S5;
247 MP_index_exp I1, I2, I3, I4, I5;
248 };
249
250} // End of namespace flopc
251#endif
Reference counted class for all "constant" types of data.
Definition: MP_constant.hpp:48
Semantic representation of a constraint in a Math Program.
friend Constraint operator>=(const MP_expression &l, const MP_expression &r)
Uses operator overloading to construct an ConstraintConstucts a Constraint using operator overloading...
friend Constraint operator<=(const MP_expression &l, const MP_expression &r)
Uses operator overloading to construct an ConstraintConstucts a Constraint using operator overloading...
friend Constraint operator==(const MP_expression &l, const MP_expression &r)
Uses operator overloading to construct an ConstraintConstucts a Constraint using operator overloading...
Functor to facilitate generation of coefficients.
Reference counted class for all "boolean" types of data.
Definition: MP_boolean.hpp:45
Semantic representation of a linear constraint.
void operator=(const Constraint &v)
void coefficients(GenerateFunctor &f)
int row_number() const
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.
MP_constraint & such_that(const MP_boolean &b)
double price(int i1=0, int i2=0, int i3=0, int i4=0, int i5=0) const
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 display(std::string s="") const
void insertVariables(std::set< MP_variable * > &v)
Symbolic representation of a linear expression.
Representation of an expression involving an index.
Definition: MP_index.hpp:145
static const MP_index_exp & getEmpty()
Return the unique empty expression.
This is the anchor point for all constructs in a FlopC++ model.
Definition: MP_model.hpp:89
Internal representation of a "set".
Definition: MP_set.hpp:28
static MP_set & getEmpty()
gets the distinct 'empty' MP_set.
Utility interface class for adding a string name onto a structure.
Utility class to flatten multidimensional information into single dimentional offset information.
int f(int i1=0, int i2=0, int i3=0, int i4=0, int i5=0) const
Semantic representation of a variable in a Math Program.
Definition: MP_variable.hpp:35
Sense_enum
Enumeration for indicating direction of a constraint.
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...
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...
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...
All flopc++ code is contained within the flopc namespace.
Definition: flopc.hpp:49