12 #ifndef COUENNE_EXPRQUAD_H 
   13 #define COUENNE_EXPRQUAD_H 
   18 #include "CoinPackedVector.hpp" 
   49   typedef std::vector <std::pair <exprVar *, CouNumber> >  
sparseQcol;
 
   50   typedef std::vector <std::pair <exprVar *, sparseQcol> > 
sparseQ;
 
   70   mutable std::vector <std::pair <
CouNumber,
 
   72                           std::vector <std::pair <
exprVar *,
 
   76   std::map <exprVar *, std::pair <CouNumber, CouNumber> > 
bounds_;
 
   85              std::vector <std::pair <exprVar *, CouNumber> > &
lcoeff,
 
   86              std::vector <quadElem> &qcoeff,
 
  105   virtual void print (std::ostream & = std::cout, 
bool = 
false) 
const;
 
  128     return ((lin > lin2) ? lin : lin2);
 
  242   virtual int DepList (std::set <int> &deplist, 
 
  248                                   const OsiBranchingInformation *
info,
 
  282                                int &indInfLo, 
int &indInfUp);
 
  298   for (sparseQ::iterator row = 
matrix_.begin (); row != 
matrix_.end (); ++row) {
 
  300     int xind = row -> first -> 
Index ();
 
  303     for (sparseQcol::iterator col = row -> second.begin (); col != row -> second.end (); ++col) {
 
  305       CouNumber term = x * (*(col -> first)) () * col -> second;
 
  306       ret += (col -> first -> 
Index () == xind) ? term : 2. * term;
 
Cut Generator for linear convexifications. 
virtual expression * differentiate(int index)
Compute derivative of this expression with respect to variable whose index is passed as argument...
class Group, with constant, linear and nonlinear terms:  
virtual void realign(const CouenneProblem *p)
replace variable x with new (aux) w 
std::vector< std::pair< exprVar *, sparseQcol > > sparseQ
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...
virtual int compare(exprQuad &)
Compare two exprQuad. 
void fint fint fint real fint real real real real real real real real real fint real fint fint fint real fint fint fint fint * info
OsiObject for auxiliary variables $w=f(x)$. 
status of lower/upper bound of a variable, to be checked/modified in bound tightening ...
virtual int rank()
Used in rank-based branching variable choice. 
virtual CouNumber operator()()
function for the evaluation of the expression 
CouNumber gradientNorm(const double *x)
return l-2 norm of gradient at given point 
lincoeff & lcoeff() const 
return linear term coefficients 
CouNumber c0_
constant term 
sparseQ & getQ() const 
eigenvalues and eigenvectors 
virtual bool isInteger()
is this expression integer? 
virtual enum expr_type code()
Code for comparisons. 
virtual void generateCuts(expression *w, OsiCuts &cs, const CouenneCutGenerator *cg, t_chg_bounds *=NULL, int=-1, CouNumber=-COUENNE_INFINITY, CouNumber=COUENNE_INFINITY)
Generate cuts for the quadratic expression, which are supporting hyperplanes of the concave upper env...
int nqterms_
number of non-zeroes in Q 
virtual int Index() const 
Return index of variable (only valid for exprVar and exprAux) 
void quadCuts(expression *w, OsiCuts &cs, const CouenneCutGenerator *cg)
method exprQuad::quadCuts 
auxSign
"sign" of the constraint defining an auxiliary. 
virtual int Linearity()
Get a measure of "how linear" the expression is. 
lincoeff lcoeff_
coefficients and indices of the linear term 
Class for MINLP problems with symbolic information. 
exprQuad(CouNumber c0, std::vector< std::pair< exprVar *, CouNumber > > &lcoeff, std::vector< quadElem > &qcoeff, expression **al=NULL, int n=0)
Constructor. 
virtual int DepList(std::set< int > &deplist, enum dig_type type=ORIG_ONLY)
fill in the set with all indices of variables appearing in the expression 
std::vector< std::pair< CouNumber, std::vector< std::pair< exprVar *, CouNumber > > > > eigen_
eigenvalues and eigenvectors 
virtual void getBounds(expression *&, expression *&)
Get lower and upper bound of an expression (if any) 
virtual void replace(exprVar *x, exprVar *w)
replace variable x with new (aux) w 
std::map< exprVar *, std::pair< CouNumber, CouNumber > > bounds_
current bounds (checked before re-computing eigenvalues/vectors) 
virtual CouNumber operator()()
Function for the evaluation of the expression. 
double CouNumber
main number type in Couenne 
virtual void closestFeasible(expression *varind, expression *vardep, CouNumber &left, CouNumber &right) const 
compute $y^{lv}$ and $y^{uv}$ for Violation Transfer algorithm 
virtual expression * simplify()
Simplify expression. 
class exprQuad, with constant, linear and quadratic terms 
virtual void fillDepSet(std::set< DepNode *, compNode > *dep, DepGraph *g)
Fill dependence set of the expression associated with this auxiliary variable. 
dig_type
type of digging when filling the dependence list 
virtual bool impliedBound(int, CouNumber *, CouNumber *, t_chg_bounds *, enum auxSign=expression::AUX_EQ)
implied bound processing 
expr_type
code returned by the method expression::code() 
void fint fint fint real fint real real real real real real * g
virtual expression * clone(Domain *d=NULL) const 
cloning method 
virtual bool isCuttable(CouenneProblem *problem, int index) const 
can this expression be further linearized or are we on its concave ("bad") side 
int getnQTerms()
eigenvalues and eigenvectors 
void fint fint fint real fint real real real real real real real real * w
virtual bool alphaConvexify(const CouenneProblem *)
Compute data for -convexification of a quadratic form (fills in dCoeff_ and dIndex_ for the convex un...
CouNumber computeQBound(int sign)
method to compute the bound based on sign: -1 for lower, +1 for upper 
virtual int Linearity()
Get a measure of "how linear" the expression is: 
Define a dynamic point+bounds, with a way to save and restore previous points+bounds through a LIFO s...
void computeQuadFiniteBound(CouNumber &qMin, CouNumber &qMax, CouNumber *l, CouNumber *u, int &indInfLo, int &indInfUp)
return lower and upper bound of quadratic expression 
std::vector< std::pair< exprVar *, CouNumber > > sparseQcol
matrix 
virtual void print(std::ostream &=std::cout, bool=false) const 
Print expression to an iostream. 
void fint fint fint real fint real * x