17 #include <OsiSolverInterface.hpp> 27 V(v),I1(i1),I2(i2),I3(i3),I4(i4),I5(i5) {
56 vector<Constant > multiplicators,
81 vector<Constant> multiplicators,
100 left->insertVariables(v);
101 right->insertVariables(v);
115 return left->level()+right->level();
118 vector<Constant> multiplicators,
121 left->generate(domain, multiplicators, f, m);
122 right->generate(domain, multiplicators, f, m);
134 return left->level()-right->level();
137 vector<Constant> multiplicators,
140 left->generate(domain, multiplicators, f, m);
141 right->generate(domain, multiplicators, f, -m);
151 left(e1), right(e2) {}
153 return left->evaluate()*right->level();
156 vector<Constant> multiplicators,
159 multiplicators.push_back(left);
160 right->generate(domain, multiplicators, f, m);
163 right->insertVariables(v);
175 return left->level()/right->evaluate();
178 vector<Constant> multiplicators,
181 multiplicators.push_back(1/right);
182 left->generate(domain, multiplicators, f, m);
185 left->insertVariables(v);
202 vector<Constant> multiplicators,
206 exp->generate(D*domain, multiplicators, f, m);
209 exp->insertVariables(v);
216 the_sum += E->level();
264 using namespace flopc;
285 double multiplicator = M;
287 for (
unsigned int i=0; i<multiplicators.size(); i++) {
288 multiplicator *= multiplicators[i]->evaluate();
289 if (multiplicators[i]->getStage() > stage) {
290 stage = multiplicators[i]->getStage();
295 rowNumber = R->row_number();
298 int colNumber = C->getColumn();
300 double val = multiplicator*C->getValue();
301 int tstage = C->getStage();
302 if (tstage > stage) {
306 Coefs.push_back(
MP::Coef(colNumber, rowNumber, val, stage));
void generate(const MP_domain &domain, vector< Constant > multiplicators, MP::GenerateFunctor &f, double m) const
void insertVariables(set< MP_variable *> &v) const
void setMultiplicator(vector< Constant > &mults, double m)
void insertVariables(set< MP_variable *> &v) const
Expression_operator(const MP_expression &e1, const MP_expression &e2)
SumFunctor(MP_expression exp)
Symbolic representation of a linear expression.This is one of the main public interface classes...
Constant operator/(const Constant &a, const Constant &b)
Returns the quotient of two constants.This is used in the formation of an expression.
VariableRef(MP_variable *v, const MP_index_exp &i1, const MP_index_exp &i2, const MP_index_exp &i3, const MP_index_exp &i4, const MP_index_exp &i5)
void insertVariables(set< MP_variable *> &v) const
Expression_constant(const Constant &c)
void setTerminalExpression(const TerminalExpression *c)
void generate(const MP_domain &domain, vector< Constant > multiplicators, MP::GenerateFunctor &f, double m) const
Expression_mult(const Constant &e1, const MP_expression &e2)
Expression_sum(const MP_domain &d, const MP_expression &e)
void generate(const MP_domain &domain, vector< Constant > multiplicators, MP::GenerateFunctor &f, double m) const
void insertVariables(set< MP_variable *> &v) const
Utility for doing reference counted pointers.
Constant operator+(const Constant &a, const Constant &b)
Returns the sum of two constants.This is used in the formation of an expression.
void generate(const MP_domain &domain, vector< Constant > multiplicators, MP::GenerateFunctor &f, double m) const
Representation of an expression involving an index.This is one of the main public interface classes...
The base class for all expressions.
void forall(const Functor *op) const
Special conditional operation on the domain.
const int outOfBound
Distinct return value on conditions where an index goes out of bounds.
Constant operator-(const Constant &a, const Constant &b)
Returns the difference of two constants.This is used in the formation of an expression.
All flopc++ code is contained within the flopc namespace.
OsiSolverInterface * Solver
void generate(const MP_domain &domain, vector< Constant > multiplicators, MP::GenerateFunctor &f, double m) const
Expression_minus(const MP_expression &e1, const MP_expression &e2)
Range over which some other constuct is defined.This is one of the main public interface classes...
int f(int i1=0, int i2=0, int i3=0, int i4=0, int i5=0) const
Symantic representation of a variable.This is one of the main public interface classes. It should be directly declared by clients of the FlopC++. The parametersof construction are MP_set s which specify the indexes over which the variable is defined.
Function object. Often used.
Reference counted class for all "constant" types of data.
void generate(const MP_domain &domain, vector< Constant > multiplicators, MP::GenerateFunctor &f, double m) const
Constant operator*(const Constant &a, const Constant &b)
Returns the product of two constants.This is used in the formation of an expression.
void generate(const MP_domain &domain, vector< Constant > multiplicators, MP::GenerateFunctor &f, double m) const
Expression_div(const MP_expression &e, const Constant &c)
bool operator()(const MP::Coef &a, const MP::Coef &b) const
Constant sum(const MP_domain &i, const Constant &e)
Returns the sum of two constants.
The base class for all expressions.
void insertVariables(set< MP_variable *> &v) const
Expression_plus(const MP_expression &e1, const MP_expression &e2)