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