exprSum Class Reference

class sum More...

#include <exprSum.hpp>

Inheritance diagram for exprSum:

Inheritance graph
[legend]
Collaboration diagram for exprSum:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 exprSum (expression **=NULL, int=0)
 Constructors, destructor.
 exprSum (expression *, expression *)
 Constructor with two elements.
virtual ~exprSum ()
 Empty destructor.
virtual expressionclone (Domain *d=NULL) const
 Cloning method.
std::string printOp () const
 Print operator.
virtual CouNumber operator() ()
 Function for the evaluation of the expression.
virtual expressiondifferentiate (int index)
 Differentiation.
virtual expressionsimplify ()
 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 exprAuxstandardize (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.
exprAuxcreateQuadratic (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

Detailed Description

class sum

Definition at line 21 of file exprSum.hpp.


Constructor & Destructor Documentation

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]

Empty destructor.

Definition at line 32 of file exprSum.hpp.


Member Function Documentation

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]

Print operator.

Reimplemented from exprOp.

Definition at line 39 of file exprSum.hpp.

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().

void exprSum::getBounds ( CouNumber ,
CouNumber  
) [virtual]

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

$w = a0 + \sum_{i\in I1} a_i x_i + \sum_{i\in I2} a_i x_i$

is given such that all $a_i$ are positive for $i \in I1$ and negative for $i \in I2$. If the bounds on $w \in [l,u]$, implied bounds on all $x_i, i\in I1 \cup I2$ are as follows:

$\forall i\in I1$ $x_i \ge (l - a0 - \sum_{j\in I1 | j\neq i} a_j u_j - \sum_{j\in I2} a_j l_j) / a_i$ $x_i \le (u - a0 - \sum_{j\in I1 | j\neq i} a_j l_j - \sum_{j\in I2} a_j u_j) / a_i$

$\forall i\in I2$ $x_i \ge (u - a0 - \sum_{j\in I1} a_j u_j - \sum_{j\in I2 | j\neq i} a_j l_j) / a_i$ $x_i \le (l - a0 - \sum_{j\in I1} a_j l_j - \sum_{j\in I2 | j\neq i} a_j u_j) / a_i$,

where $l_i$ and $u_i$ are lower and upper bound, respectively, of $x_i$. We also have to check if some of these bounds are infinite.

An expression

$w = a0 + \sum_{i\in I1} a_i x_i + \sum_{i\in I2} a_i x_i$

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:

$\forall i\in I1$

$x_i \ge (l - a0 - sum_{j\in I1 | j\neq i} a_j u_j - sum_{j\in I2} a_j l_j) / a_i$ $x_i \le (u - a0 - sum_{j\in I1 | j\neq i} a_j l_j - sum_{j\in I2} a_j u_j) / a_i$

$\forall i\in I2$

$x_i \ge (u - a0 - sum_{j\in I1} a_j u_j - sum_{j\in I2 | j\neq i} a_j l_j) / a_i$ $x_i \le (l - a0 - sum_{j\in I1} a_j l_j - sum_{j\in I2 | j\neq i} a_j u_j) / a_i$,

where $l_i$ and $u_i$ are lower and upper bound, respectively, of $x_i$. 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.


The documentation for this class was generated from the following files:
Generated on Tue Mar 30 03:12:27 2010 by  doxygen 1.4.7