#include <CouenneExprSum.hpp>
Inheritance diagram for Couenne::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() () |
compute sum | |
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 *, enum auxSign=expression::AUX_EQ) |
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 22 of file CouenneExprSum.hpp.
exprSum::exprSum | ( | expression ** | = NULL , |
|
int | = 0 | |||
) |
Constructors, destructor.
Definition at line 20 of file exprSum.cpp.
References Couenne::exprOp::arglist_, Couenne::compareExpr(), and Couenne::exprOp::nargs_.
Referenced by clone(), differentiate(), Couenne::exprQuad::differentiate(), Couenne::exprGroup::differentiate(), and getBounds().
exprSum::exprSum | ( | expression * | , | |
expression * | ||||
) |
Constructor with two elements.
Definition at line 36 of file exprSum.cpp.
References Couenne::exprOp::arglist_, and Couenne::exprOp::compare().
virtual Couenne::exprSum::~exprSum | ( | ) | [inline, virtual] |
virtual expression* Couenne::exprSum::clone | ( | Domain * | d = NULL |
) | const [inline, virtual] |
Cloning method.
Reimplemented from Couenne::expression.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 36 of file CouenneExprSum.hpp.
References Couenne::exprOp::clonearglist(), exprSum(), and Couenne::exprOp::nargs_.
std::string Couenne::exprSum::printOp | ( | ) | const [inline, virtual] |
Print operator.
Reimplemented from Couenne::exprOp.
Definition at line 40 of file CouenneExprSum.hpp.
CouNumber Couenne::exprSum::operator() | ( | ) | [inline, virtual] |
compute sum
Implements Couenne::expression.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 118 of file CouenneExprSum.hpp.
References Couenne::exprOp::arglist_, n, and Couenne::exprOp::nargs_.
Referenced by Couenne::exprGroup::operator()().
expression * exprSum::differentiate | ( | int | index | ) | [virtual] |
Differentiation.
Reimplemented from Couenne::expression.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 97 of file exprSum.cpp.
References Couenne::exprOp::arglist_, Couenne::expression::dependsOn(), exprSum(), and Couenne::exprOp::nargs_.
expression * exprSum::simplify | ( | ) | [virtual] |
Simplification.
Reimplemented from Couenne::exprOp.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 51 of file exprSum.cpp.
References Couenne::exprOp::arglist_, Couenne::CONST, Couenne::exprOp::nargs_, Couenne::exprOp::shrink_arglist(), Couenne::exprOp::simplify(), Couenne::exprOp::Type(), and Couenne::expression::Value().
int exprSum::Linearity | ( | ) | [virtual] |
Get a measure of "how linear" the expression is:.
Reimplemented from Couenne::exprOp.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 147 of file exprSum.cpp.
References Couenne::exprOp::arglist_, and Couenne::exprOp::nargs_.
Referenced by Couenne::exprGroup::Linearity(), and Couenne::exprQuad::Linearity().
void exprSum::getBounds | ( | expression *& | , | |
expression *& | ||||
) | [virtual] |
Get lower and upper bound of an expression (if any).
Reimplemented from Couenne::expression.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 118 of file exprSum.cpp.
References Couenne::exprOp::arglist_, exprSum(), and Couenne::exprOp::nargs_.
Referenced by generateCuts(), getBounds(), Couenne::exprGroup::getBounds(), and Couenne::exprQuad::impliedBound().
Get lower and upper bound of an expression (if any).
Reimplemented from Couenne::expression.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 132 of file exprSum.cpp.
References Couenne::exprOp::arglist_, getBounds(), and Couenne::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 Couenne::exprOp.
Definition at line 28 of file sumStandardize.cpp.
References Couenne::exprOp::arglist_, code(), Couenne::COU_EXPRGROUP, Couenne::COU_EXPRQUAD, Couenne::expression::Index(), Couenne::QuadMap::insert(), Couenne::LinMap::insert(), Couenne::J_REFORMULATE(), Couenne::QuadMap::Map(), Couenne::LinMap::Map(), and Couenne::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 Couenne::expression.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 24 of file conv-exprSum.cpp.
References Couenne::exprOp::arglist_, Couenne::expression::AUX_GEQ, Couenne::expression::AUX_LEQ, Couenne::CONST, COUENNE_EPS, COUENNE_INFINITY, getBounds(), Couenne::expression::Index(), Couenne::exprOp::nargs_, Couenne::exprOp::Type(), Couenne::expression::Value(), and w.
virtual enum expr_type Couenne::exprSum::code | ( | ) | [inline, virtual] |
Code for comparison.
Reimplemented from Couenne::exprOp.
Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.
Definition at line 73 of file CouenneExprSum.hpp.
References Couenne::COU_EXPRSUM.
Referenced by impliedBound(), and standardize().
bool exprSum::impliedBound | ( | int | , | |
CouNumber * | , | |||
CouNumber * | , | |||
t_chg_bounds * | , | |||
enum | auxSign = expression::AUX_EQ | |||
) | [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 in Couenne::exprQuad.
Definition at line 26 of file impliedBounds-exprSum.cpp.
References Couenne::exprOp::arglist_, Couenne::expression::AUX_GEQ, Couenne::expression::AUX_LEQ, Couenne::t_chg_bounds::CHANGED, code(), Couenne::COU_EXPRGROUP, COUENNE_EPS, COUENNE_INFINITY, Couenne::expression::Index(), Couenne::expression::isDefinedInteger(), lc, Couenne::exprOp::nargs_, scanBounds(), Couenne::t_chg_bounds::setLower(), Couenne::t_chg_bounds::setUpper(), Couenne::updateBound(), and Couenne::expression::Value().
exprAux* Couenne::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 20 of file impliedBounds-sum.cpp.
References ALMOST_INF, n, nb, and nu.