Couenne  0.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | List of all members
Couenne::expression Class Referenceabstract

Expression base class. More...

#include <CouenneExpression.hpp>

Inheritance diagram for Couenne::expression:
Couenne::exprConst Couenne::exprCopy Couenne::exprLBQuad Couenne::exprOp Couenne::exprUBQuad Couenne::exprUnary Couenne::exprVar Couenne::exprClone Couenne::exprStore Couenne::exprDiv Couenne::exprIf Couenne::exprLBCos Couenne::exprLBDiv Couenne::exprLBMul Couenne::exprLBSin Couenne::exprMax Couenne::exprMin Couenne::exprMul Couenne::exprNorm Couenne::exprPow Couenne::exprPWLinear Couenne::exprSub Couenne::exprSum Couenne::exprUBCos Couenne::exprUBDiv Couenne::exprUBMul Couenne::exprUBSin Couenne::exprAbs Couenne::exprCeil Couenne::exprCos Couenne::exprExp Couenne::exprFloor Couenne::exprInv Couenne::exprLog Couenne::exprOpp Couenne::exprSin Couenne::exprAux Couenne::exprIVar Couenne::exprLowerBound Couenne::exprUpperBound

Public Types

enum  auxSign { AUX_UNDEF =-2, AUX_LEQ =-1, AUX_EQ, AUX_GEQ }
 "sign" of the constraint defining an auxiliary. More...
 

Public Member Functions

 expression ()
 Constructor. More...
 
 expression (const expression &e, Domain *d=NULL)
 Copy constructor. More...
 
virtual ~expression ()
 Destructor. More...
 
virtual expressionclone (Domain *d=NULL) const
 Cloning method. More...
 
virtual int Index () const
 Return index of variable (only valid for exprVar and exprAux) More...
 
virtual int nArgs () const
 return number of arguments (when applicable, that is, with N-ary functions) More...
 
virtual expression ** ArgList () const
 return arglist (when applicable, that is, with N-ary functions) More...
 
virtual void ArgList (expression **al)
 set arglist (used in deleting nodes without deleting children) More...
 
virtual expressionArgument () const
 return argument (when applicable, i.e., with univariate functions) More...
 
virtual expression ** ArgPtr ()
 return pointer to argument (when applicable, i.e., with univariate functions) More...
 
virtual enum nodeType Type () const
 node type More...
 
virtual expressionImage () const
 return pointer to corresponding expression (for auxiliary variables only) More...
 
virtual void Image (expression *image)
 set expression associated with this auxiliary variable (for compatibility with exprAux) More...
 
virtual CouNumber Value () const
 value (empty) More...
 
virtual const expressionOriginal () const
 If this is an exprClone of a exprClone of an expr???, point to the original expr??? instead of an exprClone – improve computing efficiency. More...
 
virtual void print (std::ostream &s=std::cout, bool=false) const
 print expression to iostream More...
 
virtual CouNumber operator() ()=0
 null function for evaluating the expression More...
 
virtual CouNumber gradientNorm (const double *x)
 return l-2 norm of gradient at given point More...
 
virtual expressiondifferentiate (int)
 differentiation More...
 
virtual int dependsOn (int *ind, int n, enum dig_type type=STOP_AT_AUX)
 dependence on variable set: return cardinality of subset of the set of indices in first argument which occur in expression. More...
 
int dependsOn (int singleton, enum dig_type type=STOP_AT_AUX)
 version with one index only More...
 
virtual int DepList (std::set< int > &deplist, enum dig_type type=ORIG_ONLY)
 fill std::set with indices of variables on which this expression depends. More...
 
virtual expressionsimplify ()
 simplify expression (useful for derivatives) More...
 
virtual int Linearity ()
 get a measure of "how linear" the expression is (see CouenneTypes.h) More...
 
virtual bool isDefinedInteger ()
 is this expression defined as an integer? More...
 
virtual bool isInteger ()
 is this expression integer? More...
 
virtual void getBounds (expression *&, expression *&)
 Get lower and upper bound of an expression (if any) More...
 
virtual void getBounds (CouNumber &, CouNumber &)
 Get lower and upper bound of an expression (if any) – real values. More...
 
virtual exprAuxstandardize (CouenneProblem *p, bool addAux=true)
 Create standard form of this expression, by: More...
 
virtual void generateCuts (expression *w, OsiCuts &cs, const CouenneCutGenerator *cg, t_chg_bounds *chg=NULL, int wind=-1, CouNumber lb=-COUENNE_INFINITY, CouNumber ub=COUENNE_INFINITY)
 generate convexification cut for constraint w = this More...
 
virtual enum expr_type code ()
 return integer for comparing expressions (used to recognize common expression) More...
 
virtual enum convexity convexity () const
 either CONVEX, CONCAVE, AFFINE, or NONCONVEX More...
 
virtual int compare (expression &)
 compare expressions More...
 
virtual int compare (exprCopy &)
 compare copies of expressions More...
 
virtual int rank ()
 used in rank-based branching variable choice: original variables have rank 1; auxiliary w=f(x) has rank r(w) = r(x)+1; finally, auxiliary w=f(x1,x2...,xk) has rank r(w) = 1+max{r(xi):i=1..k}. More...
 
virtual bool impliedBound (int, CouNumber *, CouNumber *, t_chg_bounds *, enum auxSign=expression::AUX_EQ)
 does a backward implied bound processing on every expression, including exprSums although already done by Clp (useful when repeated within Couenne). More...
 
virtual int Multiplicity ()
 multiplicity of a variable More...
 
virtual CouNumber selectBranch (const CouenneObject *obj, const OsiBranchingInformation *info, expression *&var, double *&brpts, double *&brDist, int &way)
 set up branching object by evaluating many branching points for each expression's arguments. More...
 
virtual void replace (exprVar *, exprVar *)
 replace expression with another More...
 
virtual void fillDepSet (std::set< DepNode *, compNode > *, DepGraph *)
 update dependence set with index of variables on which this expression depends More...
 
virtual void linkDomain (Domain *d)
 empty function to update domain pointer More...
 
virtual void realign (const CouenneProblem *p)
 empty function to redirect variables to proper variable vector More...
 
virtual bool isBijective () const
 indicating if function is monotonically increasing More...
 
virtual CouNumber inverse (expression *vardep) const
 compute the inverse function More...
 
virtual void closestFeasible (expression *varind, expression *vardep, CouNumber &left, CouNumber &right) const
 closest feasible points in function in both directions More...
 
virtual bool isCuttable (CouenneProblem *problem, int index) const
 can this expression be further linearized or are we on its concave ("bad") side More...
 
virtual bool isaCopy () const
 return true if this is a copy of something (i.e. an exprCopy) More...
 
virtual expressionCopy () const
 return copy of this expression (only makes sense in exprCopy) More...
 

Detailed Description

Expression base class.

An empty expression class with no type or operator() from which all other expression classes (for constants, variables, and operators) are derived.

Definition at line 48 of file CouenneExpression.hpp.

Member Enumeration Documentation

"sign" of the constraint defining an auxiliary.

If the auxiliary is defined as $w \le f(x)$, then it is LEQ. It is EQ and GEQ, respectively, if it is defined with $=$ and $\ge$.

Enumerator
AUX_UNDEF 
AUX_LEQ 
AUX_EQ 
AUX_GEQ 

Definition at line 55 of file CouenneExpression.hpp.

Constructor & Destructor Documentation

Couenne::expression::expression ( )
inline

Constructor.

Definition at line 58 of file CouenneExpression.hpp.

Couenne::expression::expression ( const expression e,
Domain d = NULL 
)
inline

Copy constructor.

Pass pointer to variable vector when generating new problem, whose set of variables is equivalent but may be changed or whose value is independent.

Definition at line 63 of file CouenneExpression.hpp.

virtual Couenne::expression::~expression ( )
inlinevirtual

Destructor.

Definition at line 66 of file CouenneExpression.hpp.

Member Function Documentation

virtual expression* Couenne::expression::clone ( Domain d = NULL) const
inlinevirtual
virtual int Couenne::expression::Index ( ) const
inlinevirtual
virtual int Couenne::expression::nArgs ( ) const
inlinevirtual

return number of arguments (when applicable, that is, with N-ary functions)

Reimplemented in Couenne::exprCopy, Couenne::exprOp, and Couenne::exprUnary.

Definition at line 77 of file CouenneExpression.hpp.

virtual expression** Couenne::expression::ArgList ( ) const
inlinevirtual

return arglist (when applicable, that is, with N-ary functions)

Reimplemented in Couenne::exprCopy, and Couenne::exprOp.

Definition at line 81 of file CouenneExpression.hpp.

virtual void Couenne::expression::ArgList ( expression **  al)
inlinevirtual

set arglist (used in deleting nodes without deleting children)

Reimplemented in Couenne::exprCopy, and Couenne::exprOp.

Definition at line 85 of file CouenneExpression.hpp.

virtual expression* Couenne::expression::Argument ( ) const
inlinevirtual

return argument (when applicable, i.e., with univariate functions)

Reimplemented in Couenne::exprCopy, and Couenne::exprUnary.

Definition at line 88 of file CouenneExpression.hpp.

virtual expression** Couenne::expression::ArgPtr ( )
inlinevirtual

return pointer to argument (when applicable, i.e., with univariate functions)

Reimplemented in Couenne::exprCopy, and Couenne::exprUnary.

Definition at line 92 of file CouenneExpression.hpp.

virtual enum nodeType Couenne::expression::Type ( ) const
inlinevirtual
virtual expression* Couenne::expression::Image ( ) const
inlinevirtual

return pointer to corresponding expression (for auxiliary variables only)

Reimplemented in Couenne::exprAux, and Couenne::exprCopy.

Definition at line 100 of file CouenneExpression.hpp.

virtual void Couenne::expression::Image ( expression image)
inlinevirtual

set expression associated with this auxiliary variable (for compatibility with exprAux)

Reimplemented in Couenne::exprAux.

Definition at line 105 of file CouenneExpression.hpp.

virtual CouNumber Couenne::expression::Value ( ) const
inlinevirtual

value (empty)

Reimplemented in Couenne::exprCopy, Couenne::exprClone, and Couenne::exprConst.

Definition at line 108 of file CouenneExpression.hpp.

virtual const expression* Couenne::expression::Original ( ) const
inlinevirtual

If this is an exprClone of a exprClone of an expr???, point to the original expr??? instead of an exprClone – improve computing efficiency.

Only overloaded for exprClones/exprCopy, of course.

Reimplemented in Couenne::exprCopy.

Definition at line 114 of file CouenneExpression.hpp.

virtual void Couenne::expression::print ( std::ostream &  s = std::cout,
bool  = false 
) const
inlinevirtual
virtual CouNumber Couenne::expression::operator() ( )
pure virtual
virtual CouNumber Couenne::expression::gradientNorm ( const double *  x)
inlinevirtual
virtual expression* Couenne::expression::differentiate ( int  )
virtual
virtual int Couenne::expression::dependsOn ( int *  ind,
int  n,
enum dig_type  type = STOP_AT_AUX 
)
virtual

dependence on variable set: return cardinality of subset of the set of indices in first argument which occur in expression.

Reimplemented in Couenne::exprUpperBound, Couenne::exprLowerBound, and Couenne::exprConst.

Referenced by dependsOn().

int Couenne::expression::dependsOn ( int  singleton,
enum dig_type  type = STOP_AT_AUX 
)
inline

version with one index only

Definition at line 137 of file CouenneExpression.hpp.

References dependsOn().

virtual int Couenne::expression::DepList ( std::set< int > &  deplist,
enum dig_type  type = ORIG_ONLY 
)
inlinevirtual

fill std::set with indices of variables on which this expression depends.

Also deal with expressions that have no variable pointers (exprGroup, exprQuad)

Reimplemented in Couenne::exprQuad, Couenne::exprCopy, Couenne::exprAux, Couenne::exprVar, Couenne::exprOp, Couenne::exprUnary, and Couenne::exprGroup.

Definition at line 143 of file CouenneExpression.hpp.

virtual expression* Couenne::expression::simplify ( )
inlinevirtual
virtual int Couenne::expression::Linearity ( )
inlinevirtual
virtual bool Couenne::expression::isDefinedInteger ( )
inlinevirtual

is this expression defined as an integer?

Reimplemented in Couenne::exprCopy, Couenne::exprAux, Couenne::exprVar, and Couenne::exprIVar.

Definition at line 156 of file CouenneExpression.hpp.

References isInteger().

virtual bool Couenne::expression::isInteger ( )
inlinevirtual
virtual void Couenne::expression::getBounds ( expression *&  ,
expression *&   
)
virtual
virtual void Couenne::expression::getBounds ( CouNumber ,
CouNumber  
)
virtual
virtual exprAux* Couenne::expression::standardize ( CouenneProblem p,
bool  addAux = true 
)
inlinevirtual

Create standard form of this expression, by:

  • creating auxiliary w variables and corresponding expressions
  • returning linear counterpart as new constraint (to replace current one)

For the base exprOp class we only do the first part (for argument list components only), and the calling class (Sum, Sub, Mul, Pow, and the like) will do the part for its own object

addAux is true if a new auxiliary variable should be added associated with the standardized expression

Reimplemented in Couenne::exprCopy, Couenne::exprOp, Couenne::exprUnary, Couenne::exprOpp, Couenne::exprPow, Couenne::exprDiv, Couenne::exprSub, Couenne::exprMul, Couenne::exprSum, Couenne::exprEvenPow, Couenne::exprOddPow, Couenne::exprBinProd, and Couenne::exprMultiLin.

Definition at line 181 of file CouenneExpression.hpp.

virtual void Couenne::expression::generateCuts ( expression w,
OsiCuts &  cs,
const CouenneCutGenerator cg,
t_chg_bounds chg = NULL,
int  wind = -1,
CouNumber  lb = -COUENNE_INFINITY,
CouNumber  ub = COUENNE_INFINITY 
)
inlinevirtual
virtual enum expr_type Couenne::expression::code ( )
inlinevirtual
virtual enum convexity Couenne::expression::convexity ( ) const
inlinevirtual

either CONVEX, CONCAVE, AFFINE, or NONCONVEX

Reimplemented in Couenne::exprVar, and Couenne::exprCopy.

Definition at line 197 of file CouenneExpression.hpp.

References Couenne::NONCONVEX.

virtual int Couenne::expression::compare ( expression )
virtual

compare expressions

Reimplemented in Couenne::exprCopy.

virtual int Couenne::expression::compare ( exprCopy )
virtual

compare copies of expressions

virtual int Couenne::expression::rank ( )
inlinevirtual

used in rank-based branching variable choice: original variables have rank 1; auxiliary w=f(x) has rank r(w) = r(x)+1; finally, auxiliary w=f(x1,x2...,xk) has rank r(w) = 1+max{r(xi):i=1..k}.

Reimplemented in Couenne::exprQuad, Couenne::exprCopy, Couenne::exprVar, Couenne::exprAux, Couenne::exprOp, Couenne::exprUnary, Couenne::exprGroup, and Couenne::exprConst.

Definition at line 209 of file CouenneExpression.hpp.

virtual bool Couenne::expression::impliedBound ( int  ,
CouNumber ,
CouNumber ,
t_chg_bounds ,
enum  auxSign = expression::AUX_EQ 
)
inlinevirtual

does a backward implied bound processing on every expression, including exprSums although already done by Clp (useful when repeated within Couenne).

Parameters are the index of the (auxiliary) variable in question and the current lower/upper bound. The method returns true if there has been a change on any bound on the variables on which the expression depends.

Reimplemented in Couenne::exprQuad, Couenne::exprVar, Couenne::exprPow, Couenne::exprSum, Couenne::exprSin, Couenne::exprDiv, Couenne::exprOpp, Couenne::exprInv, Couenne::exprSub, Couenne::exprEvenPow, Couenne::exprOddPow, Couenne::exprAbs, Couenne::exprCeil, Couenne::exprCos, Couenne::exprFloor, Couenne::exprExp, and Couenne::exprLog.

Definition at line 218 of file CouenneExpression.hpp.

virtual int Couenne::expression::Multiplicity ( )
inlinevirtual

multiplicity of a variable

Reimplemented in Couenne::exprCopy, and Couenne::exprAux.

Definition at line 222 of file CouenneExpression.hpp.

virtual CouNumber Couenne::expression::selectBranch ( const CouenneObject obj,
const OsiBranchingInformation *  info,
expression *&  var,
double *&  brpts,
double *&  brDist,
int &  way 
)
inlinevirtual

set up branching object by evaluating many branching points for each expression's arguments.

Return estimated improvement in objective function

Reimplemented in Couenne::exprQuad, Couenne::exprCopy, Couenne::exprSin, Couenne::exprPow, Couenne::exprDiv, Couenne::exprInv, Couenne::exprCos, Couenne::exprMul, Couenne::exprEvenPow, Couenne::exprOddPow, Couenne::exprCeil, Couenne::exprFloor, Couenne::exprAbs, Couenne::exprBinProd, Couenne::exprExp, Couenne::exprMultiLin, Couenne::exprLog, and Couenne::exprTrilinear.

Definition at line 228 of file CouenneExpression.hpp.

virtual void Couenne::expression::replace ( exprVar ,
exprVar  
)
inlinevirtual

replace expression with another

Reimplemented in Couenne::exprQuad, Couenne::exprCopy, Couenne::exprOp, Couenne::exprUnary, and Couenne::exprGroup.

Definition at line 238 of file CouenneExpression.hpp.

virtual void Couenne::expression::fillDepSet ( std::set< DepNode *, compNode > *  ,
DepGraph  
)
inlinevirtual

update dependence set with index of variables on which this expression depends

Reimplemented in Couenne::exprQuad, Couenne::exprCopy, Couenne::exprVar, Couenne::exprOp, Couenne::exprUnary, and Couenne::exprGroup.

Definition at line 242 of file CouenneExpression.hpp.

virtual void Couenne::expression::linkDomain ( Domain d)
inlinevirtual

empty function to update domain pointer

Reimplemented in Couenne::exprVar, and Couenne::exprAux.

Definition at line 245 of file CouenneExpression.hpp.

virtual void Couenne::expression::realign ( const CouenneProblem p)
inlinevirtual

empty function to redirect variables to proper variable vector

Reimplemented in Couenne::exprQuad, Couenne::exprCopy, Couenne::exprOp, Couenne::exprUnary, and Couenne::exprGroup.

Definition at line 248 of file CouenneExpression.hpp.

virtual bool Couenne::expression::isBijective ( ) const
inlinevirtual

indicating if function is monotonically increasing

Reimplemented in Couenne::exprCopy, Couenne::exprInv, Couenne::exprExp, and Couenne::exprLog.

Definition at line 251 of file CouenneExpression.hpp.

virtual CouNumber Couenne::expression::inverse ( expression vardep) const
inlinevirtual

compute the inverse function

Reimplemented in Couenne::exprCopy, Couenne::exprInv, Couenne::exprExp, and Couenne::exprLog.

Definition at line 255 of file CouenneExpression.hpp.

References COUENNE_INFINITY.

virtual void Couenne::expression::closestFeasible ( expression varind,
expression vardep,
CouNumber left,
CouNumber right 
) const
virtual
virtual bool Couenne::expression::isCuttable ( CouenneProblem problem,
int  index 
) const
inlinevirtual
virtual bool Couenne::expression::isaCopy ( ) const
inlinevirtual

return true if this is a copy of something (i.e. an exprCopy)

Reimplemented in Couenne::exprCopy.

Definition at line 268 of file CouenneExpression.hpp.

virtual expression* Couenne::expression::Copy ( ) const
inlinevirtual

return copy of this expression (only makes sense in exprCopy)

Reimplemented in Couenne::exprCopy.

Definition at line 272 of file CouenneExpression.hpp.


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