Couenne::exprSum Class Reference

class sum, $ \sum_{i=1}^n f_i(x) $ More...

#include <CouenneExprSum.hpp>

Inheritance diagram for Couenne::exprSum:

Inheritance graph
[legend]
Collaboration diagram for Couenne::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() ()
 compute sum
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 *, enum auxSign=expression::AUX_EQ)
 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, $ \sum_{i=1}^n f_i(x) $

Definition at line 22 of file CouenneExprSum.hpp.


Constructor & Destructor Documentation

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]

Empty destructor.

Definition at line 33 of file CouenneExprSum.hpp.


Member Function Documentation

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

void exprSum::getBounds ( CouNumber ,
CouNumber  
) [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 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

$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 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.


The documentation for this class was generated from the following files:
Generated on Thu Sep 22 03:15:00 2011 by  doxygen 1.4.7