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.
class Group, with constant, linear and nonlinear terms:
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...
std::vector< std::pair< exprVar *, sparseQcol > > sparseQ
void computeQuadFiniteBound(CouNumber &qMin, CouNumber &qMax, CouNumber *l, CouNumber *u, int &indInfLo, int &indInfUp)
return lower and upper bound of quadratic expression
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...
OsiObject for auxiliary variables $w=f(x)$.
CouNumber gradientNorm(const double *x)
return l-2 norm of gradient at given point
status of lower/upper bound of a variable, to be checked/modified in bound tightening ...
virtual CouNumber operator()()
function for the evaluation of the expression
virtual void print(std::ostream &=std::cout, bool=false) const
Print expression to an iostream.
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
lincoeff & lcoeff() const
return linear term coefficients
virtual bool alphaConvexify(const CouenneProblem *)
Compute data for -convexification of a quadratic form (fills in dCoeff_ and dIndex_ for the convex un...
CouNumber c0_
constant term
sparseQ & getQ() const
eigenvalues and eigenvectors
CouNumber computeQBound(int sign)
method to compute the bound based on sign: -1 for lower, +1 for upper
virtual void replace(exprVar *x, exprVar *w)
replace variable x with new (aux) w
virtual enum expr_type code()
Code for comparisons.
void quadCuts(expression *w, OsiCuts &cs, const CouenneCutGenerator *cg)
method exprQuad::quadCuts
int nqterms_
number of non-zeroes in Q
exprQuad(CouNumber c0, std::vector< std::pair< exprVar *, CouNumber > > &lcoeff, std::vector< quadElem > &qcoeff, expression **al=NULL, int n=0)
Constructor.
virtual void closestFeasible(expression *varind, expression *vardep, CouNumber &left, CouNumber &right) const
compute $y^{lv}$ and $y^{uv}$ for Violation Transfer algorithm
virtual void getBounds(expression *&, expression *&)
Get lower and upper bound of an expression (if any)
virtual int Index() const
Return index of variable (only valid for exprVar and exprAux)
auxSign
"sign" of the constraint defining an auxiliary.
virtual int Linearity()
Get a measure of "how linear" the expression is:
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.
std::vector< std::pair< CouNumber, std::vector< std::pair< exprVar *, CouNumber > > > > eigen_
eigenvalues and eigenvectors
virtual void realign(const CouenneProblem *p)
replace variable x with new (aux) w
virtual bool impliedBound(int, CouNumber *, CouNumber *, t_chg_bounds *, enum auxSign=expression::AUX_EQ)
implied bound processing
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
class exprQuad, with constant, linear and quadratic terms
virtual bool isInteger()
is this expression integer?
dig_type
type of digging when filling the dependence list
virtual int rank()
Used in rank-based branching variable choice.
expr_type
code returned by the method expression::code()
virtual expression * clone(Domain *d=NULL) const
cloning method
virtual int compare(exprQuad &)
Compare two exprQuad.
virtual expression * differentiate(int index)
Compute derivative of this expression with respect to variable whose index is passed as argument...
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
virtual void fillDepSet(std::set< DepNode *, compNode > *dep, DepGraph *g)
Fill dependence set of the expression associated with this auxiliary variable.
virtual expression * simplify()
Simplify expression.
Define a dynamic point+bounds, with a way to save and restore previous points+bounds through a LIFO s...
std::vector< std::pair< exprVar *, CouNumber > > sparseQcol
matrix