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() ()
 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 *, 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 **  al = NULL,
int  n = 0 
)

Constructors, destructor.

Constructor.

Definition at line 20 of file exprSum.cpp.

exprSum::exprSum ( expression arg0,
expression arg1 
)

Constructor with two elements.

Copy constructor.

Definition at line 36 of file exprSum.cpp.

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.

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]

Function for the evaluation of the expression.

compute sum

Implements Couenne::expression.

Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.

Definition at line 118 of file CouenneExprSum.hpp.

expression * exprSum::differentiate ( int  index  )  [virtual]

Differentiation.

differentiate sum of expressions

Reimplemented from Couenne::expression.

Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.

Definition at line 97 of file exprSum.cpp.

expression * exprSum::simplify (  )  [virtual]

Simplification.

simplify sums

Reimplemented from Couenne::exprOp.

Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.

Definition at line 51 of file exprSum.cpp.

int exprSum::Linearity (  )  [virtual]

Get a measure of "how linear" the expression is:.

get a measure of "how linear" the expression is (see CouenneTypes.h)

Reimplemented from Couenne::exprOp.

Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.

Definition at line 147 of file exprSum.cpp.

void exprSum::getBounds ( expression *&  lb,
expression *&  ub 
) [virtual]

Get lower and upper bound of an expression (if any).

Reimplemented in Couenne::exprGroup, and Couenne::exprQuad.

Definition at line 118 of file exprSum.cpp.

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

exprAux * exprSum::standardize ( CouenneProblem p,
bool  addAux = true 
) [virtual]

Reduce expression in standard form, creating additional aux variables (and constraints).

translate a sum/difference/exprOpp into:

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.

void exprSum::generateCuts ( expression w,
OsiCuts &  cs,
const CouenneCutGenerator cg,
t_chg_bounds chg = NULL,
int  wind = -1,
CouNumber  lb = -COUENNE_INFINITY,
CouNumber  ub = 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 in Couenne::exprGroup, and Couenne::exprQuad.

Definition at line 24 of file conv-exprSum.cpp.

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.

bool exprSum::impliedBound ( int  wind,
CouNumber l,
CouNumber u,
t_chg_bounds chg,
enum auxSign  sign = expression::AUX_EQ 
) [virtual]

Implied bound.

implied bound processing for expression w = x+y+t+.

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.

.., upon change in lower- and/or upper bound of w, whose index is wind

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 Couenne::expression.

Reimplemented in Couenne::exprQuad.

Definition at line 26 of file impliedBounds-exprSum.cpp.

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.


The documentation for this class was generated from the following files:

Generated on 16 Feb 2012 by  doxygen 1.6.1