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