Go to the documentation of this file.
11 #ifndef COUENNE_EXPRMUL_H
12 #define COUENNE_EXPRMUL_H
20 class CouenneCutGenerator;
102 std::vector <CouNumber> &xl,
103 std::vector <CouNumber> &xu,
104 std::vector <std::pair <int, CouNumber> > &nl,
105 std::vector <std::pair <int, CouNumber> > &nu);
123 for (
int n =
nargs_; n--;)
148 int xi,
int yi,
int wi,
int brind,
double *brpt,
int nPts = 1);
status of lower/upper bound of a variable, to be checked/modified in bound tightening
exprMul(expression *, expression *)
Constructor with two arguments.
class for multiplications,
int nargs_
number of arguments (cardinality of arglist)
expr_type
code returned by the method expression::code()
virtual void generateCuts(expression *w, OsiCuts &cs, const CouenneCutGenerator *cg, t_chg_bounds *=NULL, int=-1, CouNumber=-COUENNE_INFINITY, CouNumber=COUENNE_INFINITY)
generate equality between *this and *w
general n-ary operator-type expression: requires argument list.
virtual void getBounds(CouNumber &lb, CouNumber &ub)
Get value of lower and upper bound of an expression (if any)
void unifiedProdCuts(const CouenneCutGenerator *, OsiCuts &, int, CouNumber, CouNumber, CouNumber, int, CouNumber, CouNumber, CouNumber, int, CouNumber, CouNumber, CouNumber, t_chg_bounds *, enum expression::auxSign)
unified convexification of products and divisions
virtual bool isCuttable(CouenneProblem *problem, int index) const
can this expression be further linearized or are we on its concave ("bad") side
virtual bool impliedBound(int, CouNumber *, CouNumber *, t_chg_bounds *, enum Couenne::expression::auxSign=Couenne::expression::AUX_EQ)
implied bound processing
int impliedBoundMul(CouNumber wl, CouNumber wu, std::vector< CouNumber > &xl, std::vector< CouNumber > &xu, std::vector< std::pair< int, CouNumber > > &nl, std::vector< std::pair< int, CouNumber > > &nu)
inferring bounds on factors of a product
expression ** clonearglist(Domain *d=NULL) const
clone argument list (for use with clone method)
Cut Generator for linear convexifications.
general include file for different compilers
virtual exprAux * standardize(CouenneProblem *p, bool addAux=true)
reduce expression in standard form, creating additional aux variables (and constraints)
exprMul(expression **, int)
Constructor.
OsiObject for auxiliary variables $w=f(x)$.
expression * differentiate(int index)
differentiation
double CouNumber
main number type in Couenne
auxSign
"sign" of the constraint defining an auxiliary.
CouNumber operator()()
Method to evaluate the expression.
virtual expression * clone(Domain *d=NULL) const
Cloning method.
expression * simplify()
simplification
double * computeMulBrDist(const OsiBranchingInformation *info, int xi, int yi, int wi, int brind, double *brpt, int nPts=1)
compute distance from future convexifications in set with x,y,w bounded.
virtual enum expr_type code()
code for comparison
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 CouNumber gradientNorm(const double *x)
return l-2 norm of gradient at given point
std::string printOp() const
Print operator.
virtual void getBounds(expression *&, expression *&)
Get lower and upper bound of an expression (if any)
CouNumber balancedMul(const OsiBranchingInformation *info, int index, int wind)
balanced strategy for branching point selection in products
Class for MINLP problems with symbolic information.
expression ** arglist_
argument list is an array of pointers to other expressions
virtual void closestFeasible(expression *varind, expression *vardep, CouNumber &left, CouNumber &right) const
compute and for Violation Transfer algorithm
void upperEnvHull(const CouenneCutGenerator *cg, OsiCuts &cs, int xi, CouNumber x0, CouNumber xl, CouNumber xu, int yi, CouNumber y0, CouNumber yl, CouNumber yu, int wi, CouNumber w0, CouNumber wl, CouNumber wu)
better cuts than those from unifiedProdCuts
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...