#include <exprSum.hpp>
Inheritance diagram for exprSum:
Public Member Functions | |
exprSum (expression **=NULL, int=0) | |
Constructors, destructor. | |
exprSum (expression *, expression *) | |
Constructor with two elements. | |
virtual | ~exprSum () |
Empty destructor. | |
virtual expression * | clone (Domain *d=NULL) const |
Cloning method. | |
std::string | printOp () const |
Print operator. | |
virtual CouNumber | operator() () |
Function for the evaluation of the expression. | |
virtual expression * | differentiate (int index) |
Differentiation. | |
virtual expression * | simplify () |
Simplification. | |
virtual int | Linearity () |
Get a measure of "how linear" the expression is:. | |
virtual void | getBounds (expression *&, expression *&) |
Get lower and upper bound of an expression (if any). | |
virtual void | getBounds (CouNumber &, CouNumber &) |
Get lower and upper bound of an expression (if any). | |
virtual exprAux * | standardize (CouenneProblem *p, bool addAux=true) |
Reduce expression in standard form, creating additional aux variables (and constraints). | |
virtual void | generateCuts (expression *, OsiCuts &, const CouenneCutGenerator *, t_chg_bounds *=NULL, int=-1, CouNumber=-COUENNE_INFINITY, CouNumber=COUENNE_INFINITY) |
Special version for linear constraints. | |
virtual enum expr_type | code () |
Code for comparison. | |
virtual bool | impliedBound (int, CouNumber *, CouNumber *, t_chg_bounds *) |
Implied bound. | |
exprAux * | createQuadratic (CouenneProblem *) |
Checks for quadratic terms in the expression and returns an exprQuad if there are enough to create something that can be convexified. | |
Protected Member Functions | |
int | impliedBoundSum (CouNumber wl, CouNumber wu, std::vector< CouNumber > &xl, std::vector< CouNumber > &xu, std::vector< std::pair< int, CouNumber > > &nl, std::vector< std::pair< int, CouNumber > > &nu) |
inferring bounds on factors of a product |
Definition at line 21 of file exprSum.hpp.
exprSum::exprSum | ( | expression ** | = NULL , |
|
int | = 0 | |||
) |
Constructors, destructor.
Definition at line 19 of file exprSum.cpp.
References exprOp::arglist_, compareExpr(), and exprOp::nargs_.
Referenced by clone(), differentiate(), exprQuad::differentiate(), exprGroup::differentiate(), and getBounds().
exprSum::exprSum | ( | expression * | , | |
expression * | ||||
) |
Constructor with two elements.
Definition at line 35 of file exprSum.cpp.
References exprOp::arglist_, and exprOp::compare().
virtual exprSum::~exprSum | ( | ) | [inline, virtual] |
virtual expression* exprSum::clone | ( | Domain * | d = NULL |
) | const [inline, virtual] |
Cloning method.
Reimplemented from expression.
Reimplemented in exprGroup, and exprQuad.
Definition at line 35 of file exprSum.hpp.
References exprOp::clonearglist(), exprSum(), and exprOp::nargs_.
std::string exprSum::printOp | ( | ) | const [inline, virtual] |
CouNumber exprSum::operator() | ( | ) | [inline, virtual] |
Function for the evaluation of the expression.
Implements expression.
Reimplemented in exprGroup, and exprQuad.
Definition at line 117 of file exprSum.hpp.
References exprOp::arglist_, n, and exprOp::nargs_.
Referenced by exprGroup::operator()().
expression * exprSum::differentiate | ( | int | index | ) | [virtual] |
Differentiation.
Reimplemented from expression.
Reimplemented in exprGroup, and exprQuad.
Definition at line 96 of file exprSum.cpp.
References exprOp::arglist_, expression::dependsOn(), exprSum(), and exprOp::nargs_.
expression * exprSum::simplify | ( | ) | [virtual] |
Simplification.
Reimplemented from exprOp.
Reimplemented in exprGroup, and exprQuad.
Definition at line 50 of file exprSum.cpp.
References exprOp::arglist_, CONST, exprOp::nargs_, exprOp::shrink_arglist(), exprOp::simplify(), exprOp::Type(), and expression::Value().
int exprSum::Linearity | ( | ) | [virtual] |
Get a measure of "how linear" the expression is:.
Reimplemented from exprOp.
Reimplemented in exprGroup, and exprQuad.
Definition at line 146 of file exprSum.cpp.
References exprOp::arglist_, and exprOp::nargs_.
Referenced by exprQuad::Linearity(), and exprGroup::Linearity().
void exprSum::getBounds | ( | expression *& | , | |
expression *& | ||||
) | [virtual] |
Get lower and upper bound of an expression (if any).
Reimplemented from expression.
Reimplemented in exprGroup, and exprQuad.
Definition at line 117 of file exprSum.cpp.
References exprOp::arglist_, exprSum(), and exprOp::nargs_.
Referenced by getBounds(), exprGroup::getBounds(), and exprQuad::impliedBound().
Get lower and upper bound of an expression (if any).
Reimplemented from expression.
Reimplemented in exprGroup, and exprQuad.
Definition at line 131 of file exprSum.cpp.
References exprOp::arglist_, getBounds(), and exprOp::nargs_.
exprAux * exprSum::standardize | ( | CouenneProblem * | p, | |
bool | addAux = true | |||
) | [virtual] |
Reduce expression in standard form, creating additional aux variables (and constraints).
1) an exprGroup, if only linear terms are present 2) an exprQuad, if some quadratic/bilinear terms exist
Reimplemented from exprOp.
Definition at line 26 of file sumStandardize.cpp.
References exprOp::arglist_, code(), COU_EXPRGROUP, COU_EXPRQUAD, expression::Index(), QuadMap::insert(), LinMap::insert(), QuadMap::Map(), LinMap::Map(), and exprOp::nargs_.
void exprSum::generateCuts | ( | expression * | , | |
OsiCuts & | , | |||
const CouenneCutGenerator * | , | |||
t_chg_bounds * | = NULL , |
|||
int | = -1 , |
|||
CouNumber | = -COUENNE_INFINITY , |
|||
CouNumber | = COUENNE_INFINITY | |||
) | [virtual] |
Special version for linear constraints.
first, make room for aux variable
scan arglist for (aux) variables and constants
added only once, it is global
Reimplemented from expression.
Reimplemented in exprGroup, and exprQuad.
Definition at line 21 of file conv-exprSum.cpp.
References exprOp::arglist_, CONST, COUENNE_INFINITY, expression::Index(), exprOp::nargs_, exprOp::Type(), expression::Value(), and w.
virtual enum expr_type exprSum::code | ( | ) | [inline, virtual] |
Code for comparison.
Reimplemented from exprOp.
Reimplemented in exprGroup, and exprQuad.
Definition at line 72 of file exprSum.hpp.
References COU_EXPRSUM.
Referenced by impliedBound(), and standardize().
bool exprSum::impliedBound | ( | int | , | |
CouNumber * | , | |||
CouNumber * | , | |||
t_chg_bounds * | ||||
) | [virtual] |
Implied bound.
An expression
is given such that all are positive for
and negative for
. If the bounds on
, implied bounds on all
are as follows:
,
where and
are lower and upper bound, respectively, of
. We also have to check if some of these bounds are infinite.
An expression
is given such that all $a_i$ are positive for $i I1$ and negative for $i in I2$. If the bounds on $w [l,b]$, implied bounds on all $x_i, i I1 I2$ are as follows:
,
where and
are lower and upper bound, respectively, of
. We also have to check if some of these bounds are infinite.
Reimplemented from expression.
Reimplemented in exprQuad.
Definition at line 22 of file impliedBounds-exprSum.cpp.
References exprOp::arglist_, t_chg_bounds::CHANGED, code(), COU_EXPRGROUP, COUENNE_EPS, COUENNE_INFINITY, expression::Index(), exprOp::isInteger(), lc, exprOp::nargs_, scanBounds(), t_chg_bounds::setLower(), t_chg_bounds::setUpper(), updateBound(), and expression::Value().
exprAux* exprSum::createQuadratic | ( | CouenneProblem * | ) |
Checks for quadratic terms in the expression and returns an exprQuad if there are enough to create something that can be convexified.
int exprSum::impliedBoundSum | ( | CouNumber | wl, | |
CouNumber | wu, | |||
std::vector< CouNumber > & | xl, | |||
std::vector< CouNumber > & | xu, | |||
std::vector< std::pair< int, CouNumber > > & | nl, | |||
std::vector< std::pair< int, CouNumber > > & | nu | |||
) | [protected] |
inferring bounds on factors of a product
Definition at line 18 of file impliedBounds-sum.cpp.
References ALMOST_INF, n, nb, and nu.