Scippy

SCIP

Solving Constraint Integer Programs

expr.c File Reference

Detailed Description

methods for expressions, expression trees, expression graphs, and related

Author
Stefan Vigerske
Thorsten Gellermann
Ingmar Vierhaus (exprparse)

Definition in file expr.c.

#include <stdarg.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include "nlpi/pub_expr.h"
#include "nlpi/struct_expr.h"
#include "nlpi/exprinterpret.h"
#include "scip/intervalarith.h"
#include "scip/pub_misc.h"
#include "scip/pub_message.h"

Go to the source code of this file.

Macros

#define SCIP_EXPRESSION_MAXCHILDEST   16
 
#define SIGN(x)   ((x) >= 0.0 ? 1.0 : -1.0)
 
#define ensureBlockMemoryArraySize(blkmem, array1, cursize, minsize)
 
#define ensureBlockMemoryArraySize3(blkmem, array1, array2, array3, cursize, minsize)
 

Functions

Miscellaneous private methods
static int calcGrowSize (int num)
 
static SCIP_DECL_SORTPTRCOMP (ptrcomp)
 
static SCIP_Bool isLbBetter (SCIP_Real minstrength, SCIP_Real newlb, SCIP_Real oldlb, SCIP_Real oldub)
 
static SCIP_Bool isUbBetter (SCIP_Real minstrength, SCIP_Real newub, SCIP_Real oldlb, SCIP_Real oldub)
 
Quadratic expression data private methods
static SCIP_RETCODE quadraticdataCreate (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_QUADRATIC **quadraticdata, SCIP_Real constant, int nchildren, SCIP_Real *lincoefs, int nquadelems, SCIP_QUADELEM *quadelems)
 
static void quadraticdataSort (SCIP_EXPRDATA_QUADRATIC *quadraticdata)
 
Polynomial expression data private methods
static SCIP_DECL_SORTPTRCOMP (monomialdataCompare)
 
static SCIP_RETCODE monomialdataEnsureFactorsSize (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_MONOMIAL *monomialdata, int minsize)
 
static SCIP_RETCODE polynomialdataCreate (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL **polynomialdata, int nmonomials, SCIP_EXPRDATA_MONOMIAL **monomials, SCIP_Real constant, SCIP_Bool copymonomials)
 
static SCIP_RETCODE polynomialdataCopy (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL **polynomialdata, SCIP_EXPRDATA_POLYNOMIAL *sourcepolynomialdata)
 
static void polynomialdataFree (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL **polynomialdata)
 
static SCIP_RETCODE polynomialdataEnsureMonomialsSize (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, int minsize)
 
static SCIP_RETCODE polynomialdataAddMonomials (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, int nmonomials, SCIP_EXPRDATA_MONOMIAL **monomials, SCIP_Bool copymonomials)
 
static void polynomialdataSortMonomials (SCIP_EXPRDATA_POLYNOMIAL *polynomialdata)
 
static void polynomialdataMergeMonomials (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, SCIP_Real eps, SCIP_Bool mergefactors)
 
static void polynomialdataMultiplyByConstant (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, SCIP_Real factor)
 
static SCIP_RETCODE polynomialdataMultiplyByMonomial (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, SCIP_EXPRDATA_MONOMIAL *factor, int *childmap)
 
static SCIP_RETCODE polynomialdataMultiplyByPolynomial (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, SCIP_EXPRDATA_POLYNOMIAL *factordata, int *childmap)
 
static SCIP_RETCODE polynomialdataPower (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, int exponent)
 
static void polynomialdataApplyChildmap (SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, int *childmap)
 
static SCIP_RETCODE polynomialdataExpandMonomialFactor (BMS_BLKMEM *blkmem, SCIP_MESSAGEHDLR *messagehdlr, SCIP_EXPRDATA_POLYNOMIAL *polynomialdata, int monomialpos, int factorpos, SCIP_EXPRDATA_POLYNOMIAL *factorpolynomial, int *childmap, int maxexpansionexponent, SCIP_Bool *success)
 
Expression operand methods
const char * SCIPexpropGetName (SCIP_EXPROP op)
 
int SCIPexpropGetNChildren (SCIP_EXPROP op)
 
Expressions private methods
static SCIP_RETCODE exprCreate (BMS_BLKMEM *blkmem, SCIP_EXPR **expr, SCIP_EXPROP op, int nchildren, SCIP_EXPR **children, SCIP_EXPROPDATA opdata)
 
static SCIP_RETCODE exprConvertToPolynomial (BMS_BLKMEM *blkmem, SCIP_EXPROP *op, SCIP_EXPROPDATA *data, int nchildren)
 
static SCIP_RETCODE exprUnconvertPolynomial (BMS_BLKMEM *blkmem, SCIP_EXPROP *op, SCIP_EXPROPDATA *data, int nchildren, void **children)
 
static SCIP_RETCODE exprsimplifyAddChildren (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, int nexprs, SCIP_EXPR **exprs, SCIP_Bool comparechildren, SCIP_Real eps, int *childmap)
 
static SCIP_RETCODE exprsimplifyConvertToPolynomials (BMS_BLKMEM *blkmem, SCIP_EXPR *expr)
 
static SCIP_RETCODE exprsimplifyRemoveDuplicatePolynomialChildren (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, SCIP_Real eps)
 
static SCIP_RETCODE exprsimplifyRemovePolynomialNullChildren (BMS_BLKMEM *blkmem, SCIP_EXPR *expr)
 
static SCIP_RETCODE exprsimplifyRemovePolynomialUnusedChildren (BMS_BLKMEM *blkmem, SCIP_EXPR *expr)
 
static SCIP_RETCODE exprsimplifyFlattenPolynomials (BMS_BLKMEM *blkmem, SCIP_MESSAGEHDLR *messagehdlr, SCIP_EXPR *expr, SCIP_Real eps, int maxexpansionexponent)
 
static SCIP_RETCODE exprsimplifySeparateLinearFromPolynomial (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, SCIP_Real eps, int nvars, int *nlinvars, int *linidxs, SCIP_Real *lincoefs)
 
static SCIP_RETCODE exprsimplifyUnconvertPolynomials (BMS_BLKMEM *blkmem, SCIP_EXPR *expr)
 
static SCIP_DECL_HASHGETKEY (exprparseVarTableGetKey)
 
static SCIP_RETCODE exprparseReadVariable (BMS_BLKMEM *blkmem, const char **str, SCIP_EXPR **expr, int *nvars, int **varnames, SCIP_HASHTABLE *vartable, SCIP_Real coefficient, const char *varnameendptr)
 
static SCIP_RETCODE exprparseFindClosingParenthesis (const char *str, const char **endptr, int length)
 
static SCIP_RETCODE exprParse (BMS_BLKMEM *blkmem, SCIP_MESSAGEHDLR *messagehdlr, SCIP_EXPR **expr, const char *str, int length, const char *lastchar, int *nvars, int **varnames, SCIP_HASHTABLE *vartable, int recursiondepth)
 
Expression methods
SCIP_EXPROP SCIPexprGetOperator (SCIP_EXPR *expr)
 
int SCIPexprGetNChildren (SCIP_EXPR *expr)
 
SCIP_EXPR ** SCIPexprGetChildren (SCIP_EXPR *expr)
 
int SCIPexprGetOpIndex (SCIP_EXPR *expr)
 
SCIP_Real SCIPexprGetOpReal (SCIP_EXPR *expr)
 
void * SCIPexprGetOpData (SCIP_EXPR *expr)
 
SCIP_Real SCIPexprGetRealPowerExponent (SCIP_EXPR *expr)
 
int SCIPexprGetIntPowerExponent (SCIP_EXPR *expr)
 
SCIP_Real SCIPexprGetSignPowerExponent (SCIP_EXPR *expr)
 
SCIP_RealSCIPexprGetLinearCoefs (SCIP_EXPR *expr)
 
SCIP_Real SCIPexprGetLinearConstant (SCIP_EXPR *expr)
 
SCIP_QUADELEMSCIPexprGetQuadElements (SCIP_EXPR *expr)
 
SCIP_Real SCIPexprGetQuadConstant (SCIP_EXPR *expr)
 
SCIP_RealSCIPexprGetQuadLinearCoefs (SCIP_EXPR *expr)
 
int SCIPexprGetNQuadElements (SCIP_EXPR *expr)
 
SCIP_EXPRDATA_MONOMIAL ** SCIPexprGetMonomials (SCIP_EXPR *expr)
 
int SCIPexprGetNMonomials (SCIP_EXPR *expr)
 
SCIP_Real SCIPexprGetPolynomialConstant (SCIP_EXPR *expr)
 
SCIP_Real SCIPexprGetMonomialCoef (SCIP_EXPRDATA_MONOMIAL *monomial)
 
int SCIPexprGetMonomialNFactors (SCIP_EXPRDATA_MONOMIAL *monomial)
 
int * SCIPexprGetMonomialChildIndices (SCIP_EXPRDATA_MONOMIAL *monomial)
 
SCIP_RealSCIPexprGetMonomialExponents (SCIP_EXPRDATA_MONOMIAL *monomial)
 
SCIP_RETCODE SCIPexprCreate (BMS_BLKMEM *blkmem, SCIP_EXPR **expr, SCIP_EXPROP op,...)
 
SCIP_RETCODE SCIPexprCopyDeep (BMS_BLKMEM *blkmem, SCIP_EXPR **targetexpr, SCIP_EXPR *sourceexpr)
 
void SCIPexprFreeDeep (BMS_BLKMEM *blkmem, SCIP_EXPR **expr)
 
void SCIPexprFreeShallow (BMS_BLKMEM *blkmem, SCIP_EXPR **expr)
 
SCIP_RETCODE SCIPexprAdd (BMS_BLKMEM *blkmem, SCIP_EXPR **expr, SCIP_Real coef1, SCIP_EXPR *term1, SCIP_Real coef2, SCIP_EXPR *term2, SCIP_Real constant)
 
SCIP_RETCODE SCIPexprMulConstant (BMS_BLKMEM *blkmem, SCIP_EXPR **expr, SCIP_EXPR *term, SCIP_Real factor)
 
SCIP_RETCODE SCIPexprCreateLinear (BMS_BLKMEM *blkmem, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, SCIP_Real *coefs, SCIP_Real constant)
 
SCIP_RETCODE SCIPexprAddToLinear (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, int nchildren, SCIP_Real *coefs, SCIP_EXPR **children, SCIP_Real constant)
 
SCIP_RETCODE SCIPexprCreateQuadratic (BMS_BLKMEM *blkmem, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, SCIP_Real constant, SCIP_Real *lincoefs, int nquadelems, SCIP_QUADELEM *quadelems)
 
void SCIPexprSortQuadElems (SCIP_EXPR *expr)
 
SCIP_RETCODE SCIPexprCreatePolynomial (BMS_BLKMEM *blkmem, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, int nmonomials, SCIP_EXPRDATA_MONOMIAL **monomials, SCIP_Real constant, SCIP_Bool copymonomials)
 
SCIP_RETCODE SCIPexprAddMonomials (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, int nmonomials, SCIP_EXPRDATA_MONOMIAL **monomials, SCIP_Bool copymonomials)
 
void SCIPexprChgPolynomialConstant (SCIP_EXPR *expr, SCIP_Real constant)
 
void SCIPexprMultiplyPolynomialByConstant (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, SCIP_Real factor)
 
SCIP_RETCODE SCIPexprMultiplyPolynomialByMonomial (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, SCIP_EXPRDATA_MONOMIAL *factor, int *childmap)
 
SCIP_RETCODE SCIPexprMultiplyPolynomialByPolynomial (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, SCIP_EXPR *factor, int *childmap)
 
SCIP_RETCODE SCIPexprPolynomialPower (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, int exponent)
 
void SCIPexprMergeMonomials (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, SCIP_Real eps, SCIP_Bool mergefactors)
 
SCIP_Bool SCIPexprAreMonomialsEqual (SCIP_EXPRDATA_MONOMIAL *monomial1, SCIP_EXPRDATA_MONOMIAL *monomial2, SCIP_Real eps)
 
void SCIPexprChgMonomialCoef (SCIP_EXPRDATA_MONOMIAL *monomial, SCIP_Real newcoef)
 
SCIP_RETCODE SCIPexprAddMonomialFactors (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_MONOMIAL *monomial, int nfactors, int *childidxs, SCIP_Real *exponents)
 
SCIP_RETCODE SCIPexprMultiplyMonomialByMonomial (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_MONOMIAL *monomial, SCIP_EXPRDATA_MONOMIAL *factor, int *childmap)
 
void SCIPexprMonomialPower (SCIP_EXPRDATA_MONOMIAL *monomial, int exponent)
 
void SCIPexprMergeMonomialFactors (SCIP_EXPRDATA_MONOMIAL *monomial, SCIP_Real eps)
 
void SCIPexprSortMonomials (SCIP_EXPR *expr)
 
SCIP_RETCODE SCIPexprCreateMonomial (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_MONOMIAL **monomial, SCIP_Real coef, int nfactors, int *childidxs, SCIP_Real *exponents)
 
void SCIPexprFreeMonomial (BMS_BLKMEM *blkmem, SCIP_EXPRDATA_MONOMIAL **monomial)
 
void SCIPexprSortMonomialFactors (SCIP_EXPRDATA_MONOMIAL *monomial)
 
SCIP_Bool SCIPexprFindMonomialFactor (SCIP_EXPRDATA_MONOMIAL *monomial, int childidx, int *pos)
 
SCIP_Bool SCIPexprHasParam (SCIP_EXPR *expr)
 
SCIP_RETCODE SCIPexprGetMaxDegree (SCIP_EXPR *expr, int *maxdegree)
 
void SCIPexprGetVarsUsage (SCIP_EXPR *expr, int *varsusage)
 
SCIP_Bool SCIPexprAreEqual (SCIP_EXPR *expr1, SCIP_EXPR *expr2, SCIP_Real eps)
 
SCIP_RETCODE SCIPexprSimplify (BMS_BLKMEM *blkmem, SCIP_MESSAGEHDLR *messagehdlr, SCIP_EXPR *expr, SCIP_Real eps, int maxexpansionexponent, int nvars, int *nlinvars, int *linidxs, SCIP_Real *lincoefs)
 
SCIP_RETCODE SCIPexprEval (SCIP_EXPR *expr, SCIP_Real *varvals, SCIP_Real *param, SCIP_Real *val)
 
SCIP_RETCODE SCIPexprEvalInt (SCIP_EXPR *expr, SCIP_Real infinity, SCIP_INTERVAL *varvals, SCIP_Real *param, SCIP_INTERVAL *val)
 
SCIP_RETCODE SCIPexprCheckCurvature (SCIP_EXPR *expr, SCIP_Real infinity, SCIP_INTERVAL *varbounds, SCIP_Real *param, SCIP_EXPRCURV *curv, SCIP_INTERVAL *bounds)
 
SCIP_RETCODE SCIPexprSubstituteVars (BMS_BLKMEM *blkmem, SCIP_EXPR *expr, SCIP_EXPR **substexprs)
 
void SCIPexprReindexVars (SCIP_EXPR *expr, int *newindices)
 
void SCIPexprReindexParams (SCIP_EXPR *expr, int *newindices)
 
void SCIPexprPrint (SCIP_EXPR *expr, SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char **varnames, const char **paramnames, SCIP_Real *paramvals)
 
SCIP_RETCODE SCIPexprParse (BMS_BLKMEM *blkmem, SCIP_MESSAGEHDLR *messagehdlr, SCIP_EXPR **expr, const char *str, const char *lastchar, int *nvars, int *varnames)
 
Expression tree methods
SCIP_EXPRSCIPexprtreeGetRoot (SCIP_EXPRTREE *tree)
 
int SCIPexprtreeGetNVars (SCIP_EXPRTREE *tree)
 
int SCIPexprtreeGetNParams (SCIP_EXPRTREE *tree)
 
SCIP_RealSCIPexprtreeGetParamVals (SCIP_EXPRTREE *tree)
 
void SCIPexprtreeSetParamVal (SCIP_EXPRTREE *tree, int paramidx, SCIP_Real paramval)
 
SCIP_EXPRINTDATASCIPexprtreeGetInterpreterData (SCIP_EXPRTREE *tree)
 
void SCIPexprtreeSetInterpreterData (SCIP_EXPRTREE *tree, SCIP_EXPRINTDATA *interpreterdata)
 
SCIP_RETCODE SCIPexprtreeFreeInterpreterData (SCIP_EXPRTREE *tree)
 
SCIP_Bool SCIPexprtreeHasParam (SCIP_EXPRTREE *tree)
 
SCIP_RETCODE SCIPexprtreeGetMaxDegree (SCIP_EXPRTREE *tree, int *maxdegree)
 
SCIP_RETCODE SCIPexprtreeEval (SCIP_EXPRTREE *tree, SCIP_Real *varvals, SCIP_Real *val)
 
SCIP_RETCODE SCIPexprtreeEvalInt (SCIP_EXPRTREE *tree, SCIP_Real infinity, SCIP_INTERVAL *varvals, SCIP_INTERVAL *val)
 
void SCIPexprtreePrint (SCIP_EXPRTREE *tree, SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char **varnames, const char **paramnames)
 
SCIP_RETCODE SCIPexprtreeCreate (BMS_BLKMEM *blkmem, SCIP_EXPRTREE **tree, SCIP_EXPR *root, int nvars, int nparams, SCIP_Real *params)
 
SCIP_RETCODE SCIPexprtreeCopy (BMS_BLKMEM *blkmem, SCIP_EXPRTREE **targettree, SCIP_EXPRTREE *sourcetree)
 
SCIP_RETCODE SCIPexprtreeFree (SCIP_EXPRTREE **tree)
 
SCIP_RETCODE SCIPexprtreeSetParams (SCIP_EXPRTREE *tree, int nparams, SCIP_Real *paramvals)
 
void SCIPexprtreeGetVarsUsage (SCIP_EXPRTREE *tree, int *varsusage)
 
SCIP_RETCODE SCIPexprtreeSimplify (SCIP_EXPRTREE *tree, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Real eps, int maxexpansionexponent, int *nlinvars, int *linidxs, SCIP_Real *lincoefs)
 
SCIP_RETCODE SCIPexprtreeAddExpr (SCIP_EXPRTREE *tree, SCIP_EXPR *expr, SCIP_Bool copyexpr)
 
SCIP_RETCODE SCIPexprtreeCheckCurvature (SCIP_EXPRTREE *tree, SCIP_Real infinity, SCIP_INTERVAL *varbounds, SCIP_EXPRCURV *curv, SCIP_INTERVAL *bounds)
 
SCIP_RETCODE SCIPexprtreeSubstituteVars (SCIP_EXPRTREE *tree, SCIP_EXPR **substexprs)
 
Expression graph node private methods
static SCIP_RETCODE exprgraphNodeAddParent (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE *node, SCIP_EXPRGRAPHNODE *parent)
 
static void exprgraphNodeSortParents (SCIP_EXPRGRAPHNODE *node)
 
static SCIP_RETCODE exprgraphNodeRemoveParent (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE **node, SCIP_EXPRGRAPHNODE *parent)
 
static SCIP_Bool exprgraphNodeIsParent (SCIP_EXPRGRAPHNODE *node, SCIP_EXPRGRAPHNODE *parent)
 
static SCIP_RETCODE exprgraphNodeAddChildren (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE *node, int nexprs, SCIP_EXPRGRAPHNODE **exprs, int *childmap)
 
static SCIP_RETCODE exprgraphNodeReplaceChild (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, SCIP_EXPRGRAPHNODE **oldchild, SCIP_EXPRGRAPHNODE *newchild)
 
static SCIP_DECL_SORTPTRCOMP (exprgraphConstNodeComp)
 
static void exprgraphSortConstNodes (SCIP_EXPRGRAPH *exprgraph)
 
static SCIP_Bool exprgraphFindConstNodePos (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, int *pos)
 
static SCIP_RETCODE exprgraphCreateNode (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE **node, SCIP_EXPROP op, SCIP_EXPROPDATA opdata)
 
static void exprgraphPrintNodeExpression (SCIP_EXPRGRAPHNODE *node, SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char **varnames, SCIP_Bool printchildrenbounds)
 
static void exprgraphPrintNodeDot (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char **varnames)
 
static SCIP_RETCODE exprgraphNodeEval (SCIP_EXPRGRAPHNODE *node, SCIP_Real *varvals)
 
static SCIP_RETCODE exprgraphNodeEvalWithChildren (SCIP_EXPRGRAPHNODE *node, SCIP_Real *varvals)
 
static SCIP_RETCODE exprgraphNodeUpdateBounds (SCIP_EXPRGRAPHNODE *node, SCIP_Real infinity, SCIP_Real minstrength, SCIP_Bool parenttightenisinvalid)
 
static void exprgraphNodePropagateBounds (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, SCIP_Real infinity, SCIP_Real minstrength, SCIP_Bool *cutoff)
 
static SCIP_RETCODE exprgraphNodeRemovePolynomialDuplicateChildren (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node)
 
static SCIP_RETCODE exprgraphNodeRemovePolynomialNullChildren (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE *node)
 
static SCIP_RETCODE exprgraphNodeSimplify (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Real eps, int maxexpansionexponent, SCIP_Bool *havechange)
 
static SCIP_RETCODE exprgraphNodeCreateExpr (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, SCIP_EXPR **expr, int *nexprvars, int *varidx)
 
static void exprgraphNodeGetVarsUsage (SCIP_EXPRGRAPHNODE *node, int *varsusage)
 
static void exprgraphNodeCheckSeparabilityComponent (SCIP_EXPRGRAPHNODE *node, int *compnr, int nchildcomps, int *childcomps, int nvars, int *varcomps)
 
Expression graph private methods
static SCIP_RETCODE exprgraphEnsureDepth (SCIP_EXPRGRAPH *exprgraph, int mindepth)
 
static SCIP_RETCODE exprgraphRemoveVar (SCIP_EXPRGRAPH *exprgraph, int varidx)
 
static SCIP_RETCODE exprgraphMoveNode (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, int newdepth)
 
static SCIP_RETCODE exprgraphFindParentByOperator (SCIP_EXPRGRAPH *exprgraph, int nchildren, SCIP_EXPRGRAPHNODE **children, SCIP_EXPROP op, SCIP_EXPROPDATA opdata, SCIP_EXPR **exprchildren, SCIP_EXPRGRAPHNODE **parent)
 
static SCIP_RETCODE exprgraphAddExpr (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPR *expr, void **vars, SCIP_EXPRGRAPHNODE **exprnode, SCIP_Bool *exprnodeisnew)
 
static void exprgraphUpdateVarNodeBounds (SCIP_EXPRGRAPH *exprgraph, SCIP_Bool *clearreverseprop, SCIP_Bool *boundchanged)
 
Expression graph node methods
void SCIPexprgraphCaptureNode (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Bool SCIPexprgraphIsNodeEnabled (SCIP_EXPRGRAPHNODE *node)
 
int SCIPexprgraphGetNodeNChildren (SCIP_EXPRGRAPHNODE *node)
 
SCIP_EXPRGRAPHNODE ** SCIPexprgraphGetNodeChildren (SCIP_EXPRGRAPHNODE *node)
 
int SCIPexprgraphGetNodeNParents (SCIP_EXPRGRAPHNODE *node)
 
SCIP_EXPRGRAPHNODE ** SCIPexprgraphGetNodeParents (SCIP_EXPRGRAPHNODE *node)
 
int SCIPexprgraphGetNodeDepth (SCIP_EXPRGRAPHNODE *node)
 
int SCIPexprgraphGetNodePosition (SCIP_EXPRGRAPHNODE *node)
 
SCIP_EXPROP SCIPexprgraphGetNodeOperator (SCIP_EXPRGRAPHNODE *node)
 
int SCIPexprgraphGetNodeOperatorIndex (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Real SCIPexprgraphGetNodeOperatorReal (SCIP_EXPRGRAPHNODE *node)
 
void * SCIPexprgraphGetNodeVar (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node)
 
SCIP_Real SCIPexprgraphGetNodeRealPowerExponent (SCIP_EXPRGRAPHNODE *node)
 
int SCIPexprgraphGetNodeIntPowerExponent (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Real SCIPexprgraphGetNodeSignPowerExponent (SCIP_EXPRGRAPHNODE *node)
 
SCIP_RealSCIPexprgraphGetNodeLinearCoefs (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Real SCIPexprgraphGetNodeLinearConstant (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Real SCIPexprgraphGetNodeQuadraticConstant (SCIP_EXPRGRAPHNODE *node)
 
SCIP_RealSCIPexprgraphGetNodeQuadraticLinearCoefs (SCIP_EXPRGRAPHNODE *node)
 
SCIP_QUADELEMSCIPexprgraphGetNodeQuadraticQuadElements (SCIP_EXPRGRAPHNODE *node)
 
int SCIPexprgraphGetNodeQuadraticNQuadElements (SCIP_EXPRGRAPHNODE *node)
 
SCIP_EXPRDATA_MONOMIAL ** SCIPexprgraphGetNodePolynomialMonomials (SCIP_EXPRGRAPHNODE *node)
 
int SCIPexprgraphGetNodePolynomialNMonomials (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Real SCIPexprgraphGetNodePolynomialConstant (SCIP_EXPRGRAPHNODE *node)
 
SCIP_INTERVAL SCIPexprgraphGetNodeBounds (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Real SCIPexprgraphGetNodeVal (SCIP_EXPRGRAPHNODE *node)
 
SCIP_EXPRCURV SCIPexprgraphGetNodeCurvature (SCIP_EXPRGRAPHNODE *node)
 
SCIP_RETCODE SCIPexprgraphCreateNode (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE **node, SCIP_EXPROP op,...)
 
SCIP_RETCODE SCIPexprgraphCreateNodeLinear (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE **node, int ncoefs, SCIP_Real *coefs, SCIP_Real constant)
 
SCIP_RETCODE SCIPexprgraphCreateNodeQuadratic (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE **node, int nchildren, SCIP_Real *lincoefs, int nquadelems, SCIP_QUADELEM *quadelems, SCIP_Real constant)
 
SCIP_RETCODE SCIPexprgraphCreateNodePolynomial (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE **node, int nmonomials, SCIP_EXPRDATA_MONOMIAL **monomials, SCIP_Real constant, SCIP_Bool copymonomials)
 
SCIP_RETCODE SCIPexprgraphNodePolynomialAddMonomials (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE *node, int nmonomials, SCIP_EXPRDATA_MONOMIAL **monomials, SCIP_Bool copymonomials)
 
SCIP_RETCODE SCIPexprgraphNodeSplitOffLinear (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE **node, int linvarssize, int *nlinvars, void **linvars, SCIP_Real *lincoefs, SCIP_Real *constant)
 
SCIP_RETCODE SCIPexprgraphMoveNodeParents (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE **srcnode, SCIP_EXPRGRAPHNODE *targetnode)
 
SCIP_RETCODE SCIPexprgraphReleaseNode (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE **node)
 
void SCIPexprgraphFreeNode (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE **node)
 
void SCIPexprgraphEnableNode (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node)
 
void SCIPexprgraphDisableNode (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node)
 
SCIP_Bool SCIPexprgraphHasNodeSibling (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Bool SCIPexprgraphAreAllNodeChildrenVars (SCIP_EXPRGRAPHNODE *node)
 
SCIP_Bool SCIPexprgraphHasNodeNonlinearAncestor (SCIP_EXPRGRAPHNODE *node)
 
void SCIPexprgraphPrintNode (SCIP_EXPRGRAPHNODE *node, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
 
void SCIPexprgraphTightenNodeBounds (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, SCIP_INTERVAL nodebounds, SCIP_Real minstrength, SCIP_Bool *cutoff)
 
SCIP_RETCODE SCIPexprgraphUpdateNodeBoundsCurvature (SCIP_EXPRGRAPHNODE *node, SCIP_Real infinity, SCIP_Real minstrength, SCIP_Bool clearreverseprop)
 
Expression graph methods
int SCIPexprgraphGetDepth (SCIP_EXPRGRAPH *exprgraph)
 
int * SCIPexprgraphGetNNodes (SCIP_EXPRGRAPH *exprgraph)
 
SCIP_EXPRGRAPHNODE *** SCIPexprgraphGetNodes (SCIP_EXPRGRAPH *exprgraph)
 
int SCIPexprgraphGetNVars (SCIP_EXPRGRAPH *exprgraph)
 
void ** SCIPexprgraphGetVars (SCIP_EXPRGRAPH *exprgraph)
 
SCIP_EXPRGRAPHNODE ** SCIPexprgraphGetVarNodes (SCIP_EXPRGRAPH *exprgraph)
 
void SCIPexprgraphSetVarNodeValue (SCIP_EXPRGRAPHNODE *varnode, SCIP_Real value)
 
void SCIPexprgraphSetVarsBounds (SCIP_EXPRGRAPH *exprgraph, SCIP_INTERVAL *varbounds)
 
void SCIPexprgraphSetVarBounds (SCIP_EXPRGRAPH *exprgraph, void *var, SCIP_INTERVAL varbounds)
 
void SCIPexprgraphSetVarNodeBounds (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *varnode, SCIP_INTERVAL varbounds)
 
void SCIPexprgraphSetVarNodeLb (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *varnode, SCIP_Real lb)
 
void SCIPexprgraphSetVarNodeUb (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *varnode, SCIP_Real ub)
 
SCIP_INTERVALSCIPexprgraphGetVarsBounds (SCIP_EXPRGRAPH *exprgraph)
 
SCIP_RETCODE SCIPexprgraphCreate (BMS_BLKMEM *blkmem, SCIP_EXPRGRAPH **exprgraph, int varssizeinit, int depthinit, SCIP_DECL_EXPRGRAPHVARADDED((*exprgraphvaradded)), SCIP_DECL_EXPRGRAPHVARREMOVE((*exprgraphvarremove)), SCIP_DECL_EXPRGRAPHVARCHGIDX((*exprgraphvarchgidx)), void *userdata)
 
SCIP_RETCODE SCIPexprgraphFree (SCIP_EXPRGRAPH **exprgraph)
 
SCIP_RETCODE SCIPexprgraphAddNode (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, int mindepth, int nchildren, SCIP_EXPRGRAPHNODE **children)
 
SCIP_RETCODE SCIPexprgraphAddVars (SCIP_EXPRGRAPH *exprgraph, int nvars, void **vars, SCIP_EXPRGRAPHNODE **varnodes)
 
SCIP_RETCODE SCIPexprgraphAddConst (SCIP_EXPRGRAPH *exprgraph, SCIP_Real constant, SCIP_EXPRGRAPHNODE **constnode)
 
SCIP_RETCODE SCIPexprgraphAddExprtreeSum (SCIP_EXPRGRAPH *exprgraph, int nexprtrees, SCIP_EXPRTREE **exprtrees, SCIP_Real *coefs, SCIP_EXPRGRAPHNODE **rootnode, SCIP_Bool *rootnodeisnew)
 
SCIP_RETCODE SCIPexprgraphReplaceVarByLinearSum (SCIP_EXPRGRAPH *exprgraph, void *var, int ncoefs, SCIP_Real *coefs, void **vars, SCIP_Real constant)
 
SCIP_Bool SCIPexprgraphFindVarNode (SCIP_EXPRGRAPH *exprgraph, void *var, SCIP_EXPRGRAPHNODE **varnode)
 
SCIP_Bool SCIPexprgraphFindConstNode (SCIP_EXPRGRAPH *exprgraph, SCIP_Real constant, SCIP_EXPRGRAPHNODE **constnode)
 
SCIP_RETCODE SCIPexprgraphPrintDot (SCIP_EXPRGRAPH *exprgraph, SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char **varnames)
 
SCIP_RETCODE SCIPexprgraphEval (SCIP_EXPRGRAPH *exprgraph, SCIP_Real *varvals)
 
SCIP_RETCODE SCIPexprgraphPropagateVarBounds (SCIP_EXPRGRAPH *exprgraph, SCIP_Real infinity, SCIP_Bool clearreverseprop, SCIP_Bool *domainerror)
 
void SCIPexprgraphPropagateNodeBounds (SCIP_EXPRGRAPH *exprgraph, SCIP_Real infinity, SCIP_Real minstrength, SCIP_Bool *cutoff)
 
SCIP_RETCODE SCIPexprgraphCheckCurvature (SCIP_EXPRGRAPH *exprgraph, SCIP_Real infinity, SCIP_Bool clearreverseprop)
 
SCIP_RETCODE SCIPexprgraphSimplify (SCIP_EXPRGRAPH *exprgraph, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Real eps, int maxexpansionexponent, SCIP_Bool *havechange, SCIP_Bool *domainerror)
 
SCIP_RETCODE SCIPexprgraphGetTree (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *rootnode, SCIP_EXPRTREE **exprtree)
 
SCIP_RETCODE SCIPexprgraphGetSeparableTrees (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, int exprtreessize, int *nexprtrees, SCIP_EXPRTREE **exprtrees, SCIP_Real *exprtreecoefs)
 
void SCIPexprgraphGetSubtreeVarsUsage (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, int *varsusage)
 
int SCIPexprgraphGetSumTreesNSummands (SCIP_EXPRGRAPHNODE *node)
 
SCIP_RETCODE SCIPexprgraphGetSumTrees (SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, int exprtreessize, int *nexprtrees, SCIP_EXPRTREE **exprtrees, SCIP_Real *exprtreecoefs)
 

Expression curvature methods

static const char * curvnames [4]
 
SCIP_EXPRCURV SCIPexprcurvAdd (SCIP_EXPRCURV curv1, SCIP_EXPRCURV curv2)
 
SCIP_EXPRCURV SCIPexprcurvNegate (SCIP_EXPRCURV curvature)
 
SCIP_EXPRCURV SCIPexprcurvMultiply (SCIP_Real factor, SCIP_EXPRCURV curvature)
 
SCIP_EXPRCURV SCIPexprcurvPower (SCIP_INTERVAL basebounds, SCIP_EXPRCURV basecurv, SCIP_Real exponent)
 
SCIP_EXPRCURV SCIPexprcurvMonomial (int nfactors, SCIP_Real *exponents, int *factoridxs, SCIP_EXPRCURV *factorcurv, SCIP_INTERVAL *factorbounds)
 
const char * SCIPexprcurvGetName (SCIP_EXPRCURV curv)
 

Expression operand private methods

#define exprcurvSin   exprcurvDefault
 
#define exprcurvCos   exprcurvDefault
 
#define exprevalIntTan   exprevalIntDefault
 
#define exprcurvTan   exprcurvDefault
 
#define EXPROPEMPTY   {NULL, -1, NULL, NULL, NULL, NULL, NULL}
 
static struct exprOpTableElement exprOpTable []
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntDefault)
 
static SCIP_DECL_EXPRCURV (exprcurvDefault)
 
static SCIP_DECL_EXPREVAL (exprevalVar)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntVar)
 
static SCIP_DECL_EXPRCURV (exprcurvVar)
 
static SCIP_DECL_EXPREVAL (exprevalConst)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntConst)
 
static SCIP_DECL_EXPRCURV (exprcurvConst)
 
static SCIP_DECL_EXPREVAL (exprevalParam)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntParam)
 
static SCIP_DECL_EXPRCURV (exprcurvParam)
 
static SCIP_DECL_EXPREVAL (exprevalPlus)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntPlus)
 
static SCIP_DECL_EXPRCURV (exprcurvPlus)
 
static SCIP_DECL_EXPREVAL (exprevalMinus)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntMinus)
 
static SCIP_DECL_EXPRCURV (exprcurvMinus)
 
static SCIP_DECL_EXPREVAL (exprevalMult)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntMult)
 
static SCIP_DECL_EXPRCURV (exprcurvMult)
 
static SCIP_DECL_EXPREVAL (exprevalDiv)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntDiv)
 
static SCIP_DECL_EXPRCURV (exprcurvDiv)
 
static SCIP_DECL_EXPREVAL (exprevalSquare)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntSquare)
 
static SCIP_DECL_EXPRCURV (exprcurvSquare)
 
static SCIP_DECL_EXPREVAL (exprevalSquareRoot)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntSquareRoot)
 
static SCIP_DECL_EXPRCURV (exprcurvSquareRoot)
 
static SCIP_DECL_EXPREVAL (exprevalRealPower)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntRealPower)
 
static SCIP_DECL_EXPRCURV (exprcurvRealPower)
 
static SCIP_DECL_EXPREVAL (exprevalIntPower)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntIntPower)
 
static SCIP_DECL_EXPRCURV (exprcurvIntPower)
 
static SCIP_DECL_EXPREVAL (exprevalSignPower)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntSignPower)
 
static SCIP_DECL_EXPRCURV (exprcurvSignPower)
 
static SCIP_DECL_EXPREVAL (exprevalExp)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntExp)
 
static SCIP_DECL_EXPRCURV (exprcurvExp)
 
static SCIP_DECL_EXPREVAL (exprevalLog)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntLog)
 
static SCIP_DECL_EXPRCURV (exprcurvLog)
 
static SCIP_DECL_EXPREVAL (exprevalSin)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntSin)
 
static SCIP_DECL_EXPREVAL (exprevalCos)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntCos)
 
static SCIP_DECL_EXPREVAL (exprevalTan)
 
static SCIP_DECL_EXPREVAL (exprevalMin)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntMin)
 
static SCIP_DECL_EXPRCURV (exprcurvMin)
 
static SCIP_DECL_EXPREVAL (exprevalMax)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntMax)
 
static SCIP_DECL_EXPRCURV (exprcurvMax)
 
static SCIP_DECL_EXPREVAL (exprevalAbs)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntAbs)
 
static SCIP_DECL_EXPRCURV (exprcurvAbs)
 
static SCIP_DECL_EXPREVAL (exprevalSign)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntSign)
 
static SCIP_DECL_EXPRCURV (exprcurvSign)
 
static SCIP_DECL_EXPREVAL (exprevalSum)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntSum)
 
static SCIP_DECL_EXPRCURV (exprcurvSum)
 
static SCIP_DECL_EXPREVAL (exprevalProduct)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntProduct)
 
static SCIP_DECL_EXPRCURV (exprcurvProduct)
 
static SCIP_DECL_EXPREVAL (exprevalLinear)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntLinear)
 
static SCIP_DECL_EXPRCURV (exprcurvLinear)
 
static SCIP_DECL_EXPRCOPYDATA (exprCopyDataLinear)
 
static SCIP_DECL_EXPRFREEDATA (exprFreeDataLinear)
 
static SCIP_DECL_EXPREVAL (exprevalQuadratic)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntQuadratic)
 
static SCIP_DECL_EXPRCURV (exprcurvQuadratic)
 
static SCIP_DECL_EXPRCOPYDATA (exprCopyDataQuadratic)
 
static SCIP_DECL_EXPRFREEDATA (exprFreeDataQuadratic)
 
static SCIP_DECL_EXPREVAL (exprevalPolynomial)
 
static SCIP_DECL_EXPRINTEVAL (exprevalIntPolynomial)
 
static SCIP_DECL_EXPRCURV (exprcurvPolynomial)
 
static SCIP_DECL_EXPRCOPYDATA (exprCopyDataPolynomial)
 
static SCIP_DECL_EXPRFREEDATA (exprFreeDataPolynomial)
 

Quadratic element methods

#define QUADELEMS_ISBETTER(a, b)   ( ((a).idx1 < (b).idx1) || ((a).idx1 == (b).idx1 && (a).idx2 < (b).idx2) )
 
#define QUADELEMS_SWAP(x, y)
 
static void quadelemsQuickSort (SCIP_QUADELEM *elems, int start, int end)
 
void SCIPquadelemSort (SCIP_QUADELEM *quadelems, int nquadelems)
 
SCIP_Bool SCIPquadelemSortedFind (SCIP_QUADELEM *quadelems, int idx1, int idx2, int nquadelems, int *pos)
 
void SCIPquadelemSqueeze (SCIP_QUADELEM *quadelems, int nquadelems, int *nquadelemsnew)
 

Macro Definition Documentation

#define SCIP_EXPRESSION_MAXCHILDEST   16

estimate on maximal number of children

Definition at line 39 of file expr.c.

Referenced by exprgraphNodeEval(), exprgraphNodeUpdateBounds(), SCIPexprCheckCurvature(), SCIPexprEval(), SCIPexprEvalInt(), and SCIPexprgraphUpdateNodeBoundsCurvature().

#define SIGN (   x)    ((x) >= 0.0 ? 1.0 : -1.0)

sign of a value (-1 or +1) 0.0 has sign +1

Definition at line 44 of file expr.c.

Referenced by SCIP_DECL_EXPREVAL().

#define ensureBlockMemoryArraySize (   blkmem,
  array1,
  cursize,
  minsize 
)
Value:
do { \
int __newsize; \
assert((blkmem) != NULL); \
if( *(cursize) >= (minsize) ) \
break; \
__newsize = calcGrowSize(minsize); \
assert(__newsize >= (minsize)); \
SCIP_ALLOC( BMSreallocBlockMemoryArray(blkmem, array1, *(cursize), __newsize) ); \
*(cursize) = __newsize; \
} while( FALSE )

ensures that a block memory array has at least a given size if cursize is 0, then *array1 can be NULL

Definition at line 49 of file expr.c.

Referenced by exprgraphMoveNode(), exprgraphNodeAddParent(), exprgraphNodeSimplify(), polynomialdataEnsureMonomialsSize(), SCIPexprgraphAddConst(), SCIPexprgraphAddNode(), SCIPexprgraphAddVars(), SCIPexprgraphReplaceVarByLinearSum(), and SCIPexprgraphSimplify().

#define ensureBlockMemoryArraySize3 (   blkmem,
  array1,
  array2,
  array3,
  cursize,
  minsize 
)
Value:
do { \
int __newsize; \
assert((blkmem) != NULL); \
if( *(cursize) >= (minsize) ) \
break; \
__newsize = calcGrowSize(minsize); \
assert(__newsize >= (minsize)); \
SCIP_ALLOC( BMSreallocBlockMemoryArray(blkmem, array1, *(cursize), __newsize) ); \
SCIP_ALLOC( BMSreallocBlockMemoryArray(blkmem, array2, *(cursize), __newsize) ); \
SCIP_ALLOC( BMSreallocBlockMemoryArray(blkmem, array3, *(cursize), __newsize) ); \
*(cursize) = __newsize; \
} while( FALSE )

ensures that three block memory arrays have at least a given size if cursize is 0, then arrays can be NULL

Definition at line 82 of file expr.c.

Referenced by exprgraphEnsureDepth(), SCIPexprgraphAddVars(), SCIPexprgraphCreate(), and SCIPexprgraphReplaceVarByLinearSum().

#define exprcurvSin   exprcurvDefault

Definition at line 2057 of file expr.c.

#define exprcurvCos   exprcurvDefault

Definition at line 2086 of file expr.c.

#define exprevalIntTan   exprevalIntDefault

Definition at line 2101 of file expr.c.

#define exprcurvTan   exprcurvDefault

Definition at line 2104 of file expr.c.

#define EXPROPEMPTY   {NULL, -1, NULL, NULL, NULL, NULL, NULL}

Definition at line 3079 of file expr.c.

#define QUADELEMS_ISBETTER (   a,
 
)    ( ((a).idx1 < (b).idx1) || ((a).idx1 == (b).idx1 && (a).idx2 < (b).idx2) )

comparing two quadratic elements a is better than b if index1 of a is smaller than index1 of b or index1 of both is equal but index2 of a is smaller than index2 of b

Definition at line 8419 of file expr.c.

Referenced by quadelemsQuickSort(), and SCIPquadelemSqueeze().

#define QUADELEMS_SWAP (   x,
 
)
Value:
{ \
SCIP_QUADELEM temp = x; \
x = y; \
y = temp; \
}

swaps two quadratic elements

Definition at line 8422 of file expr.c.

Referenced by quadelemsQuickSort().

Function Documentation

static int calcGrowSize ( int  num)
static

calculate memory size for dynamically allocated arrays (copied from scip/set.c)

Parameters
numminimum number of entries to store

Definition at line 101 of file expr.c.

Referenced by exprsimplifyFlattenPolynomials(), and monomialdataEnsureFactorsSize().

static SCIP_DECL_SORTPTRCOMP ( ptrcomp  )
static

pointer comparison to use in sorting methods

Definition at line 117 of file expr.c.

static SCIP_Bool isLbBetter ( SCIP_Real  minstrength,
SCIP_Real  newlb,
SCIP_Real  oldlb,
SCIP_Real  oldub 
)
static

checks if a given new lower bound is tighter (w.r.t. given bound strengthening epsilon) than the old one (copied from scip/set.c)

Parameters
minstrengthminimal relative improvement required to be a better bound
newlbnew lower bound
oldlbold lower bound
oldubold upper bound

Definition at line 128 of file expr.c.

References EPSGT, FALSE, MAX, MIN, REALABS, and SCIP_Real.

Referenced by exprgraphNodeUpdateBounds(), exprgraphUpdateVarNodeBounds(), SCIPexprgraphTightenNodeBounds(), and SCIPexprgraphUpdateNodeBoundsCurvature().

static SCIP_Bool isUbBetter ( SCIP_Real  minstrength,
SCIP_Real  newub,
SCIP_Real  oldlb,
SCIP_Real  oldub 
)
static

checks if a given new upper bound is tighter (w.r.t. given bound strengthening epsilon) than the old one (copied from scip/set.c)

Parameters
minstrengthminimal relative improvement required to be a better bound
newubnew upper bound
oldlbold lower bound
oldubold upper bound

Definition at line 148 of file expr.c.

References EPSLT, FALSE, MAX, MIN, REALABS, and SCIP_Real.

Referenced by exprgraphNodeUpdateBounds(), exprgraphUpdateVarNodeBounds(), SCIPexprgraphTightenNodeBounds(), and SCIPexprgraphUpdateNodeBoundsCurvature().

SCIP_EXPRCURV SCIPexprcurvAdd ( SCIP_EXPRCURV  curv1,
SCIP_EXPRCURV  curv2 
)

gives curvature for a sum of two functions with given curvature

Parameters
curv1curvature of first summand
curv2curvature of second summand

Definition at line 184 of file expr.c.

Referenced by checkCurvature(), and SCIP_DECL_EXPRCURV().

SCIP_EXPRCURV SCIPexprcurvNegate ( SCIP_EXPRCURV  curvature)

gives the curvature for the negation of a function with given curvature

Parameters
curvaturecurvature of function

Definition at line 193 of file expr.c.

References SCIP_EXPRCURV_CONCAVE, SCIP_EXPRCURV_CONVEX, SCIP_EXPRCURV_LINEAR, SCIP_EXPRCURV_UNKNOWN, SCIPABORT, and SCIPerrorMessage.

Referenced by reformulate(), SCIP_DECL_EXPRCURV(), SCIPexprcurvMonomial(), and SCIPexprcurvMultiply().

SCIP_EXPRCURV SCIPexprcurvMultiply ( SCIP_Real  factor,
SCIP_EXPRCURV  curvature 
)

gives curvature for a functions with given curvature multiplied by a constant factor

Parameters
factorconstant factor
curvaturecurvature of other factor

Definition at line 219 of file expr.c.

References SCIP_EXPRCURV_LINEAR, and SCIPexprcurvNegate().

Referenced by checkCurvature(), reformulate(), SCIP_DECL_EXPRCURV(), and SCIPexprcurvMonomial().

SCIP_EXPRCURV SCIPexprcurvPower ( SCIP_INTERVAL  basebounds,
SCIP_EXPRCURV  basecurv,
SCIP_Real  exponent 
)

gives curvature for base^exponent for given bounds and curvature of base-function and constant exponent

Parameters
baseboundsbounds on base function
basecurvcurvature of base function
exponentexponent

Definition at line 232 of file expr.c.

References EPSISINT, SCIP_Interval::inf, SCIP_Bool, SCIP_EXPRCURV_CONCAVE, SCIP_EXPRCURV_CONVEX, SCIP_EXPRCURV_LINEAR, SCIP_EXPRCURV_UNKNOWN, SCIP_Real, SCIPexprcurvPower(), SCIPintervalSetBounds(), sign(), and SCIP_Interval::sup.

Referenced by reformulate(), SCIP_DECL_EXPRCURV(), SCIPexprcurvMonomial(), and SCIPexprcurvPower().

SCIP_EXPRCURV SCIPexprcurvMonomial ( int  nfactors,
SCIP_Real exponents,
int *  factoridxs,
SCIP_EXPRCURV factorcurv,
SCIP_INTERVAL factorbounds 
)

gives curvature for a monomial with given curvatures and bounds for each factor

Parameters
nfactorsnumber of factors in monomial
exponentsexponents in monomial, or NULL if all 1.0
factoridxsindices of factors (but not exponents), or NULL if identity mapping
factorcurvcurvature of each factor
factorboundsbounds of each factor

Definition at line 339 of file expr.c.

References EPSGE, EPSISINT, EPSLE, FALSE, NULL, SCIP_Bool, SCIP_EXPRCURV_CONCAVE, SCIP_EXPRCURV_CONVEX, SCIP_EXPRCURV_LINEAR, SCIP_EXPRCURV_UNKNOWN, SCIP_Real, SCIPexprcurvMultiply(), SCIPexprcurvNegate(), SCIPexprcurvPower(), and TRUE.

Referenced by SCIP_DECL_EXPRCURV().

const char* SCIPexprcurvGetName ( SCIP_EXPRCURV  curv)

gives name as string for a curvature

Parameters
curvcurvature

Definition at line 452 of file expr.c.

References curvnames, and SCIP_EXPRCURV_LINEAR.

Referenced by checkCurvature(), reformEnsureChildrenMinCurvature(), reformulate(), and registerBranchingVariables().

static SCIP_RETCODE quadraticdataCreate ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_QUADRATIC **  quadraticdata,
SCIP_Real  constant,
int  nchildren,
SCIP_Real lincoefs,
int  nquadelems,
SCIP_QUADELEM quadelems 
)
static

creates SCIP_EXPRDATA_QUADRATIC data structure from given quadratic elements

Parameters
blkmemblock memory data structure
quadraticdatabuffer to store pointer to quadratic data
constantconstant
nchildrennumber of children
lincoefslinear coefficients of children, or NULL if all 0.0
nquadelemsnumber of quadratic elements
quadelemsquadratic elements

Definition at line 468 of file expr.c.

References BMSallocBlockMemory, BMSduplicateBlockMemoryArray, NULL, SCIP_ALLOC, and SCIP_OKAY.

Referenced by SCIP_DECL_EXPRCOPYDATA(), SCIPexprCreateQuadratic(), and SCIPexprgraphCreateNodeQuadratic().

static void quadraticdataSort ( SCIP_EXPRDATA_QUADRATIC quadraticdata)
static

sorts quadratic elements in a SCIP_EXPRDATA_QUADRATIC data structure

Parameters
quadraticdataquadratic data

Definition at line 506 of file expr.c.

References SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprData_Quadratic::quadelems, SCIPquadelemSort(), SCIP_ExprData_Quadratic::sorted, and TRUE.

Referenced by SCIP_DECL_EXPRINTEVAL(), SCIPexprGetMaxDegree(), and SCIPexprSortQuadElems().

static SCIP_DECL_SORTPTRCOMP ( monomialdataCompare  )
static

compares two monomials gives 0 if monomials are equal

Definition at line 541 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::exponents, SCIP_ExprData_Monomial::nfactors, NULL, and SCIPexprSortMonomialFactors().

static SCIP_RETCODE monomialdataEnsureFactorsSize ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_MONOMIAL monomialdata,
int  minsize 
)
static

ensures that the factors arrays of a monomial have at least a given size

Parameters
blkmemblock memory data structure
monomialdatamonomial data
minsizeminimal size of factors arrays

Definition at line 580 of file expr.c.

References BMSreallocBlockMemoryArray, calcGrowSize(), SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::exponents, SCIP_ExprData_Monomial::factorssize, NULL, SCIP_ALLOC, and SCIP_OKAY.

Referenced by exprConvertToPolynomial(), polynomialdataExpandMonomialFactor(), and SCIPexprAddMonomialFactors().

static SCIP_RETCODE polynomialdataCreate ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL **  polynomialdata,
int  nmonomials,
SCIP_EXPRDATA_MONOMIAL **  monomials,
SCIP_Real  constant,
SCIP_Bool  copymonomials 
)
static

creates SCIP_EXPRDATA_POLYNOMIAL data structure from given monomials

Parameters
blkmemblock memory data structure
polynomialdatabuffer to store pointer to polynomial data
nmonomialsnumber of monomials
monomialsmonomials
constantconstant part
copymonomialswhether to copy monomials, or copy only given pointers, in which case polynomialdata assumes ownership of monomial structure

Definition at line 605 of file expr.c.

References BMSallocBlockMemory, BMSallocBlockMemoryArray, BMSduplicateBlockMemoryArray, SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::coef, SCIP_ExprData_Monomial::exponents, SCIP_ExprData_Monomial::nfactors, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_OKAY, and SCIPexprCreateMonomial().

Referenced by exprConvertToPolynomial(), exprsimplifyFlattenPolynomials(), SCIPexprCreatePolynomial(), and SCIPexprgraphCreateNodePolynomial().

static SCIP_RETCODE polynomialdataCopy ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL **  polynomialdata,
SCIP_EXPRDATA_POLYNOMIAL sourcepolynomialdata 
)
static

creates a copy of a SCIP_EXPRDATA_POLYNOMIAL data structure

Parameters
blkmemblock memory data structure
polynomialdatabuffer to store pointer to polynomial data
sourcepolynomialdatapolynomial data to copy

Definition at line 652 of file expr.c.

References BMSallocBlockMemoryArray, BMSduplicateBlockMemory, SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::coef, SCIP_ExprData_Monomial::exponents, SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_OKAY, SCIPexprCreateMonomial(), and SCIP_ExprData_Monomial::sorted.

Referenced by polynomialdataExpandMonomialFactor(), polynomialdataPower(), and SCIP_DECL_EXPRCOPYDATA().

static void polynomialdataFree ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL **  polynomialdata 
)
static

frees a SCIP_EXPRDATA_POLYNOMIAL data structure

Parameters
blkmemblock memory data structure
polynomialdatapointer to polynomial data to free

Definition at line 689 of file expr.c.

References BMSfreeBlockMemory, BMSfreeBlockMemoryArray, NULL, and SCIPexprFreeMonomial().

Referenced by exprgraphNodeSimplify(), exprsimplifyFlattenPolynomials(), exprUnconvertPolynomial(), polynomialdataExpandMonomialFactor(), polynomialdataPower(), and SCIP_DECL_EXPRFREEDATA().

static SCIP_RETCODE polynomialdataEnsureMonomialsSize ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
int  minsize 
)
static

ensures that the monomials array of a polynomial has at least a given size

Parameters
blkmemblock memory data structure
polynomialdatapolynomial data
minsizeminimal size of monomials array

Definition at line 718 of file expr.c.

References ensureBlockMemoryArraySize, SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Polynomial::monomialssize, NULL, and SCIP_OKAY.

Referenced by exprConvertToPolynomial(), polynomialdataAddMonomials(), polynomialdataMultiplyByMonomial(), and polynomialdataMultiplyByPolynomial().

static SCIP_RETCODE polynomialdataAddMonomials ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
int  nmonomials,
SCIP_EXPRDATA_MONOMIAL **  monomials,
SCIP_Bool  copymonomials 
)
static
static void polynomialdataSortMonomials ( SCIP_EXPRDATA_POLYNOMIAL polynomialdata)
static

ensures that monomials of a polynomial are sorted

Parameters
polynomialdatapolynomial expression

Definition at line 777 of file expr.c.

References SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Polynomial::nmonomials, NULL, SCIPsortPtr(), SCIP_ExprData_Polynomial::sorted, SCIP_ExprData_Monomial::sorted, and TRUE.

Referenced by exprgraphFindParentByOperator(), polynomialdataMergeMonomials(), and SCIPexprSortMonomials().

static void polynomialdataMergeMonomials ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
SCIP_Real  eps,
SCIP_Bool  mergefactors 
)
static

merges monomials that differ only in coefficient into a single monomial eliminates monomials with coefficient between -eps and eps

Parameters
blkmemblock memory
polynomialdatapolynomial data
epsthreshold under which numbers are treat as zero
mergefactorswhether to merge factors in monomials too

Definition at line 809 of file expr.c.

References SCIP_ExprData_Monomial::coef, SCIP_ExprData_Polynomial::constant, EPSZ, FALSE, SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, NULL, polynomialdataSortMonomials(), SCIPexprFreeMonomial(), SCIPexprMergeMonomialFactors(), and SCIP_ExprData_Polynomial::sorted.

Referenced by exprgraphNodeSimplify(), exprsimplifySeparateLinearFromPolynomial(), exprUnconvertPolynomial(), polynomialdataPower(), SCIPexprgraphNodeSplitOffLinear(), and SCIPexprMergeMonomials().

static void polynomialdataMultiplyByConstant ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
SCIP_Real  factor 
)
static

multiplies each summand of a polynomial by a given constant

Parameters
blkmemblock memory
polynomialdatapolynomial data
factorconstant factor

Definition at line 902 of file expr.c.

References SCIP_ExprData_Monomial::coef, SCIP_ExprData_Polynomial::constant, SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Polynomial::nmonomials, NULL, SCIPexprChgMonomialCoef(), and SCIPexprFreeMonomial().

Referenced by polynomialdataMultiplyByMonomial(), polynomialdataMultiplyByPolynomial(), and SCIPexprMultiplyPolynomialByConstant().

static SCIP_RETCODE polynomialdataMultiplyByMonomial ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
SCIP_EXPRDATA_MONOMIAL factor,
int *  childmap 
)
static
static SCIP_RETCODE polynomialdataMultiplyByPolynomial ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
SCIP_EXPRDATA_POLYNOMIAL factordata,
int *  childmap 
)
static

multiplies a polynomial by a polynomial factors need to be different

Parameters
blkmemblock memory
polynomialdatapolynomial data
factordatapolynomial factor data
childmapmap children in factor to children in polynomialdata, or NULL for 1:1

Definition at line 974 of file expr.c.

References SCIP_ExprData_Monomial::coef, SCIP_ExprData_Polynomial::constant, FALSE, SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Polynomial::nmonomials, NULL, polynomialdataAddMonomials(), polynomialdataEnsureMonomialsSize(), polynomialdataMultiplyByConstant(), polynomialdataMultiplyByMonomial(), SCIP_CALL, SCIP_OKAY, SCIPexprChgMonomialCoef(), SCIPexprCreateMonomial(), SCIPexprMultiplyMonomialByMonomial(), SCIP_ExprData_Polynomial::sorted, and TRUE.

Referenced by polynomialdataPower(), and SCIPexprMultiplyPolynomialByPolynomial().

static SCIP_RETCODE polynomialdataPower ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
int  exponent 
)
static

takes a power of a polynomial exponent need to be an integer polynomial need to be a monomial, if exponent is negative

Parameters
blkmemblock memory
polynomialdatapolynomial data
exponentexponent of power operation

Definition at line 1062 of file expr.c.

References SCIP_ExprData_Polynomial::constant, SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Polynomial::nmonomials, NULL, polynomialdataCopy(), polynomialdataFree(), polynomialdataMergeMonomials(), polynomialdataMultiplyByPolynomial(), pow(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPexprFreeMonomial(), SCIPexprMonomialPower(), and TRUE.

Referenced by polynomialdataExpandMonomialFactor(), and SCIPexprPolynomialPower().

static void polynomialdataApplyChildmap ( SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
int *  childmap 
)
static
static SCIP_RETCODE polynomialdataExpandMonomialFactor ( BMS_BLKMEM blkmem,
SCIP_MESSAGEHDLR messagehdlr,
SCIP_EXPRDATA_POLYNOMIAL polynomialdata,
int  monomialpos,
int  factorpos,
SCIP_EXPRDATA_POLYNOMIAL factorpolynomial,
int *  childmap,
int  maxexpansionexponent,
SCIP_Bool success 
)
static
Parameters
blkmemblock memory data structure
messagehdlrmessage handler
polynomialdatapolynomial data where to expand a monomial
monomialposposition of monomial which factor to expand
factorposposition of factor in monomial to expand
factorpolynomialpolynomial that should replace factor
childmapmap of child indices in factorpolynomial to children of polynomial
maxexpansionexponentmaximal exponent for which polynomials (with > 1 summands) are expanded
successbuffer to store whether expansion has been done

Definition at line 1161 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::coef, SCIP_ExprData_Polynomial::constant, EPSFLOOR, EPSISINT, SCIP_ExprData_Monomial::exponents, FALSE, monomialdataEnsureFactorsSize(), SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, NULL, polynomialdataAddMonomials(), polynomialdataApplyChildmap(), polynomialdataCopy(), polynomialdataFree(), polynomialdataMultiplyByMonomial(), polynomialdataPower(), pow(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPexprAddMonomialFactors(), SCIPexprFreeMonomial(), SCIPmessagePrintWarning(), SCIP_ExprData_Polynomial::sorted, SCIP_ExprData_Monomial::sorted, and TRUE.

Referenced by exprgraphNodeSimplify(), and exprsimplifyFlattenPolynomials().

static SCIP_DECL_EXPRINTEVAL ( exprevalIntDefault  )
static

a default implementation of expression interval evaluation that always gives a correct result

Definition at line 1382 of file expr.c.

References SCIP_OKAY, and SCIPintervalSetEntire().

static SCIP_DECL_EXPRCURV ( exprcurvDefault  )
static

a default implementation of expression curvature check that always gives a correct result

Definition at line 1391 of file expr.c.

References SCIP_EXPRCURV_UNKNOWN, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalVar  )
static

point evaluation for EXPR_VAR

Definition at line 1400 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntVar  )
static

interval evaluation for EXPR_VAR

Definition at line 1412 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRCURV ( exprcurvVar  )
static

curvature for EXPR_VAR

Definition at line 1424 of file expr.c.

References NULL, SCIP_EXPRCURV_LINEAR, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalConst  )
static

point evaluation for EXPR_CONST

Definition at line 1435 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntConst  )
static

interval evaluation for EXPR_CONST

Definition at line 1446 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalSet().

static SCIP_DECL_EXPRCURV ( exprcurvConst  )
static

curvature for EXPR_CONST

Definition at line 1457 of file expr.c.

References NULL, SCIP_EXPRCURV_LINEAR, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalParam  )
static

point evaluation for EXPR_PARAM

Definition at line 1468 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntParam  )
static

interval evaluation for EXPR_PARAM

Definition at line 1480 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalSet().

static SCIP_DECL_EXPRCURV ( exprcurvParam  )
static

curvature for EXPR_PARAM

Definition at line 1492 of file expr.c.

References NULL, SCIP_EXPRCURV_LINEAR, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalPlus  )
static

point evaluation for EXPR_PLUS

Definition at line 1503 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntPlus  )
static

interval evaluation for EXPR_PLUS

Definition at line 1515 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalAdd().

static SCIP_DECL_EXPRCURV ( exprcurvPlus  )
static

curvature for EXPR_PLUS

Definition at line 1527 of file expr.c.

References NULL, SCIP_OKAY, and SCIPexprcurvAdd().

static SCIP_DECL_EXPREVAL ( exprevalMinus  )
static

point evaluation for EXPR_MINUS

Definition at line 1539 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntMinus  )
static

interval evaluation for EXPR_MINUS

Definition at line 1551 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalSub().

static SCIP_DECL_EXPRCURV ( exprcurvMinus  )
static

curvature for EXPR_MINUS

Definition at line 1563 of file expr.c.

References NULL, SCIP_OKAY, SCIPexprcurvAdd(), and SCIPexprcurvNegate().

static SCIP_DECL_EXPREVAL ( exprevalMult  )
static

point evaluation for EXPR_MUL

Definition at line 1575 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntMult  )
static

interval evaluation for EXPR_MUL

Definition at line 1587 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalMul().

static SCIP_DECL_EXPRCURV ( exprcurvMult  )
static

curvature for EXPR_MUL

Definition at line 1599 of file expr.c.

References NULL, SCIP_EXPRCURV_UNKNOWN, SCIP_OKAY, and SCIPexprcurvMultiply().

static SCIP_DECL_EXPREVAL ( exprevalDiv  )
static

point evaluation for EXPR_DIV

Definition at line 1630 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntDiv  )
static

interval evaluation for EXPR_DIV

Definition at line 1642 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalDiv().

static SCIP_DECL_EXPRCURV ( exprcurvDiv  )
static

curvature for EXPR_DIV

Definition at line 1654 of file expr.c.

References NULL, SCIP_EXPRCURV_CONCAVE, SCIP_EXPRCURV_CONVEX, SCIP_EXPRCURV_UNKNOWN, SCIP_OKAY, and SCIPexprcurvMultiply().

static SCIP_DECL_EXPREVAL ( exprevalSquare  )
static

point evaluation for EXPR_SQUARE

Definition at line 1704 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntSquare  )
static

interval evaluation for EXPR_SQUARE

Definition at line 1716 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalSquare().

static SCIP_DECL_EXPRCURV ( exprcurvSquare  )
static

curvature for EXPR_SQUARE

Definition at line 1728 of file expr.c.

References NULL, SCIP_OKAY, and SCIPexprcurvPower().

static SCIP_DECL_EXPREVAL ( exprevalSquareRoot  )
static

point evaluation for EXPR_SQRT

Definition at line 1741 of file expr.c.

References NULL, SCIP_OKAY, and sqrt().

static SCIP_DECL_EXPRINTEVAL ( exprevalIntSquareRoot  )
static

interval evaluation for EXPR_SQRT

Definition at line 1753 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalSquareRoot().

static SCIP_DECL_EXPRCURV ( exprcurvSquareRoot  )
static

curvature for EXPR_SQRT

Definition at line 1765 of file expr.c.

References NULL, SCIP_EXPRCURV_CONCAVE, SCIP_EXPRCURV_UNKNOWN, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalRealPower  )
static

point evaluation for EXPR_REALPOWER

Definition at line 1784 of file expr.c.

References NULL, pow(), and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntRealPower  )
static

interval evaluation for EXPR_REALPOWER

Definition at line 1796 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalPowerScalar().

static SCIP_DECL_EXPRCURV ( exprcurvRealPower  )
static

curvature for EXPR_REALPOWER

Definition at line 1808 of file expr.c.

References NULL, SCIP_OKAY, and SCIPexprcurvPower().

static SCIP_DECL_EXPREVAL ( exprevalIntPower  )
static

point evaluation for EXPR_INTPOWER

Definition at line 1821 of file expr.c.

References NULL, pow(), SCIP_OKAY, and SCIP_Real.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntIntPower  )
static

interval evaluation for EXPR_INTPOWER

Definition at line 1853 of file expr.c.

References NULL, SCIP_OKAY, SCIP_Real, and SCIPintervalPowerScalar().

static SCIP_DECL_EXPRCURV ( exprcurvIntPower  )
static

curvature for EXPR_INTPOWER

Definition at line 1865 of file expr.c.

References NULL, SCIP_OKAY, SCIP_Real, and SCIPexprcurvPower().

static SCIP_DECL_EXPREVAL ( exprevalSignPower  )
static

point evaluation for EXPR_SIGNPOWER

Definition at line 1878 of file expr.c.

References NULL, pow(), and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntSignPower  )
static

interval evaluation for EXPR_SIGNPOWER

Definition at line 1893 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalSignPowerScalar().

static SCIP_DECL_EXPRCURV ( exprcurvSignPower  )
static

curvature for EXPR_SIGNPOWER

Definition at line 1905 of file expr.c.

References NULL, SCIP_EXPRCURV_LINEAR, SCIP_OKAY, SCIPexprcurvNegate(), SCIPexprcurvPower(), and SCIPintervalSetBounds().

static SCIP_DECL_EXPREVAL ( exprevalExp  )
static

point evaluation for EXPR_EXP

Definition at line 1948 of file expr.c.

References exp(), NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntExp  )
static

interval evaluation for EXPR_EXP

Definition at line 1960 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalExp().

static SCIP_DECL_EXPRCURV ( exprcurvExp  )
static

curvature for EXPR_EXP

Definition at line 1972 of file expr.c.

References NULL, SCIP_EXPRCURV_CONVEX, SCIP_EXPRCURV_UNKNOWN, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalLog  )
static

point evaluation for EXPR_LOG

Definition at line 1990 of file expr.c.

References log(), NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntLog  )
static

interval evaluation for EXPR_LOG

Definition at line 2002 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalLog().

static SCIP_DECL_EXPRCURV ( exprcurvLog  )
static

curvature for EXPR_LOG

Definition at line 2014 of file expr.c.

References NULL, SCIP_EXPRCURV_CONCAVE, SCIP_EXPRCURV_UNKNOWN, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalSin  )
static

point evaluation for EXPR_SIN

Definition at line 2032 of file expr.c.

References NULL, SCIP_OKAY, and sin().

static SCIP_DECL_EXPRINTEVAL ( exprevalIntSin  )
static

interval evaluation for EXPR_SIN

Definition at line 2044 of file expr.c.

References NULL, SCIP_OKAY, SCIPerrorMessage, and SCIPintervalSetBounds().

static SCIP_DECL_EXPREVAL ( exprevalCos  )
static

point evaluation for EXPR_COS

Definition at line 2061 of file expr.c.

References cos(), NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntCos  )
static

interval evaluation for EXPR_COS

Definition at line 2073 of file expr.c.

References NULL, SCIP_OKAY, SCIPerrorMessage, and SCIPintervalSetBounds().

static SCIP_DECL_EXPREVAL ( exprevalTan  )
static

point evaluation for EXPR_TAN

Definition at line 2090 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalMin  )
static

point evaluation for EXPR_MIN

Definition at line 2145 of file expr.c.

References MIN, NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntMin  )
static

interval evaluation for EXPR_MIN

Definition at line 2157 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalMin().

static SCIP_DECL_EXPRCURV ( exprcurvMin  )
static

curvature for EXPR_MIN

Definition at line 2169 of file expr.c.

References NULL, SCIP_EXPRCURV_CONCAVE, SCIP_EXPRCURV_UNKNOWN, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalMax  )
static

point evaluation for EXPR_MAX

Definition at line 2188 of file expr.c.

References MAX, NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntMax  )
static

interval evaluation for EXPR_MAX

Definition at line 2200 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalMax().

static SCIP_DECL_EXPRCURV ( exprcurvMax  )
static

curvature for EXPR_MAX

Definition at line 2212 of file expr.c.

References NULL, SCIP_EXPRCURV_CONVEX, SCIP_EXPRCURV_UNKNOWN, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalAbs  )
static

point evaluation for EXPR_ABS

Definition at line 2230 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntAbs  )
static

interval evaluation for EXPR_ABS

Definition at line 2242 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalAbs().

static SCIP_DECL_EXPRCURV ( exprcurvAbs  )
static

curvature for EXPR_ABS

Definition at line 2254 of file expr.c.

References NULL, SCIP_EXPRCURV_CONVEX, SCIP_EXPRCURV_LINEAR, SCIP_EXPRCURV_UNKNOWN, SCIP_OKAY, and SCIPexprcurvMultiply().

static SCIP_DECL_EXPREVAL ( exprevalSign  )
static

point evaluation for EXPR_SIGN

Definition at line 2279 of file expr.c.

References NULL, SCIP_OKAY, and SIGN.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntSign  )
static

interval evaluation for EXPR_SIGN

Definition at line 2291 of file expr.c.

References NULL, SCIP_OKAY, and SCIPintervalSign().

static SCIP_DECL_EXPRCURV ( exprcurvSign  )
static

curvature for EXPR_SIGN

Definition at line 2303 of file expr.c.

References NULL, SCIP_EXPRCURV_LINEAR, SCIP_EXPRCURV_UNKNOWN, and SCIP_OKAY.

static SCIP_DECL_EXPREVAL ( exprevalSum  )
static

point evaluation for EXPR_SUM

Definition at line 2321 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntSum  )
static

interval evaluation for EXPR_SUM

Definition at line 2337 of file expr.c.

References NULL, SCIP_OKAY, SCIPintervalAdd(), and SCIPintervalSet().

static SCIP_DECL_EXPRCURV ( exprcurvSum  )
static

curvature for EXPR_SUM

Definition at line 2354 of file expr.c.

References NULL, SCIP_EXPRCURV_LINEAR, SCIP_OKAY, and SCIPexprcurvAdd().

static SCIP_DECL_EXPREVAL ( exprevalProduct  )
static

point evaluation for EXPR_PRODUCT

Definition at line 2373 of file expr.c.

References NULL, and SCIP_OKAY.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntProduct  )
static

interval evaluation for EXPR_PRODUCT

Definition at line 2389 of file expr.c.

References NULL, SCIP_OKAY, SCIPintervalMul(), and SCIPintervalSet().

static SCIP_DECL_EXPRCURV ( exprcurvProduct  )
static

curvature for EXPR_PRODUCT

Definition at line 2406 of file expr.c.

References FALSE, NULL, SCIP_Bool, SCIP_EXPRCURV_LINEAR, SCIP_EXPRCURV_UNKNOWN, SCIP_OKAY, SCIP_Real, SCIPexprcurvMultiply(), and TRUE.

static SCIP_DECL_EXPREVAL ( exprevalLinear  )
static

point evaluation for EXPR_LINEAR

Definition at line 2450 of file expr.c.

References NULL, SCIP_OKAY, and SCIP_Real.

static SCIP_DECL_EXPRINTEVAL ( exprevalIntLinear  )
static

interval evaluation for EXPR_LINEAR

Definition at line 2472 of file expr.c.

References NULL, SCIP_OKAY, SCIP_Real, SCIPintervalAddScalar(), and SCIPintervalScalprodScalars().

static SCIP_DECL_EXPRCURV ( exprcurvLinear  )
static

curvature for EXPR_LINEAR

Definition at line 2486 of file expr.c.

References NULL, SCIP_EXPRCURV_LINEAR, SCIP_OKAY, SCIP_Real, SCIPexprcurvAdd(), and SCIPexprcurvMultiply().

static SCIP_DECL_EXPRCOPYDATA ( exprCopyDataLinear  )
static

expression data copy for EXPR_LINEAR

Definition at line 2507 of file expr.c.

References BMSduplicateBlockMemoryArray, NULL, SCIP_ALLOC, SCIP_OKAY, and SCIP_Real.

static SCIP_DECL_EXPRFREEDATA ( exprFreeDataLinear  )
static

expression data free for EXPR_LINEAR

Definition at line 2525 of file expr.c.

References BMSfreeBlockMemoryArray, NULL, and SCIP_Real.

static SCIP_DECL_EXPREVAL ( exprevalQuadratic  )
static
static SCIP_DECL_EXPRCOPYDATA ( exprCopyDataQuadratic  )
static
static SCIP_DECL_EXPRFREEDATA ( exprFreeDataQuadratic  )
static
static SCIP_DECL_EXPRCOPYDATA ( exprCopyDataPolynomial  )
static

expression data copy for EXPR_POLYNOMIAL

Definition at line 3035 of file expr.c.

References NULL, polynomialdataCopy(), SCIP_CALL, and SCIP_OKAY.

static SCIP_DECL_EXPRFREEDATA ( exprFreeDataPolynomial  )
static

expression data free for EXPR_POLYNOMIAL

Definition at line 3055 of file expr.c.

References NULL, and polynomialdataFree().

const char* SCIPexpropGetName ( SCIP_EXPROP  op)
int SCIPexpropGetNChildren ( SCIP_EXPROP  op)

gives the number of children of a simple operand

Parameters
opexpression operand

Definition at line 3139 of file expr.c.

References SCIP_EXPR_LAST.

static SCIP_RETCODE exprCreate ( BMS_BLKMEM blkmem,
SCIP_EXPR **  expr,
SCIP_EXPROP  op,
int  nchildren,
SCIP_EXPR **  children,
SCIP_EXPROPDATA  opdata 
)
static

creates an expression Note, that the expression is allocated but for the children only the pointer is copied.

Parameters
blkmemblock memory data structure
exprpointer to buffer for expression address
opoperand of expression
nchildrennumber of children
childrenchildren
opdataoperand data

Definition at line 3157 of file expr.c.

References BMSallocBlockMemory, SCIP_Expr::data, NULL, SCIP_ALLOC, and SCIP_OKAY.

Referenced by SCIPexprCreate(), SCIPexprCreateLinear(), SCIPexprCreatePolynomial(), and SCIPexprCreateQuadratic().

static SCIP_RETCODE exprConvertToPolynomial ( BMS_BLKMEM blkmem,
SCIP_EXPROP op,
SCIP_EXPROPDATA data,
int  nchildren 
)
static

tries to convert a given (operator,operatordata) pair into a polynomial operator with corresponding data does not do this for constants if conversion is not possible or operator is already polynomial, *op and *data are left untouched

Parameters
blkmemblock memory
oppointer to expression operator
datapointer to expression data
nchildrennumber of children of operator

Definition at line 3186 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::coef, SCIP_QuadElement::coef, SCIP_ExprData_Quadratic::constant, EPSISINT, FALSE, SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_ExprData_Quadratic::lincoefs, monomialdataEnsureFactorsSize(), SCIP_ExprData_Polynomial::monomialssize, SCIP_ExprData_Quadratic::nquadelems, NULL, polynomialdataAddMonomials(), polynomialdataCreate(), polynomialdataEnsureMonomialsSize(), SCIP_ExprData_Quadratic::quadelems, SCIP_CALL, SCIP_ERROR, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PARAM, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIP_Real, SCIPerrorMessage, SCIPexprAddMonomialFactors(), SCIPexprCreateMonomial(), SCIPexprFreeMonomial(), and TRUE.

Referenced by exprgraphNodeSimplify(), and exprsimplifyConvertToPolynomials().

static SCIP_RETCODE exprUnconvertPolynomial ( BMS_BLKMEM blkmem,
SCIP_EXPROP op,
SCIP_EXPROPDATA data,
int  nchildren,
void **  children 
)
static
static SCIP_RETCODE exprsimplifyAddChildren ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
int  nexprs,
SCIP_EXPR **  exprs,
SCIP_Bool  comparechildren,
SCIP_Real  eps,
int *  childmap 
)
static

adds copies of expressions to the array of children of a sum, product, linear, quadratic, or polynomial expression for a sum or product expression, this corresponds to add additional summands and factors, resp. for a linear expression, this corresponds to add each expression with coefficient 1.0 for a quadratic or polynomial expression, only the children array may be enlarged, the expression itself remains the same

Parameters
blkmemblock memory
exprquadratic or polynomial expression
nexprsnumber of expressions to add
exprsexpressions to add
comparechildrenwhether to compare expressions with already existing children (no effect for sum and product)
epswhich epsilon to use when comparing expressions
childmaparray where to store mapping of indices from exprs to children array in expr, or NULL if not of interest

Definition at line 4005 of file expr.c.

References BMSclearMemoryArray, BMSreallocBlockMemoryArray, SCIP_Expr::children, SCIP_Expr::data, FALSE, SCIP_ExprData_Quadratic::lincoefs, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_LINEAR, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_SUM, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIPerrorMessage, SCIPexprAreEqual(), SCIPexprCopyDeep(), and TRUE.

Referenced by exprsimplifyFlattenPolynomials().

static SCIP_RETCODE exprsimplifyConvertToPolynomials ( BMS_BLKMEM blkmem,
SCIP_EXPR expr 
)
static

converts expressions into polynomials, where possible and obvious

Parameters
blkmemblock memory data structure
exprexpression to convert

Definition at line 4125 of file expr.c.

References SCIP_Expr::children, SCIP_Expr::data, exprConvertToPolynomial(), SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_CALL, and SCIP_OKAY.

Referenced by SCIPexprSimplify().

static SCIP_RETCODE exprsimplifyRemoveDuplicatePolynomialChildren ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
SCIP_Real  eps 
)
static

removes duplicate children in a polynomial expression leaves NULL's in children array

Parameters
blkmemblock memory data structure
exprexpression
epsthreshold for zero

Definition at line 4147 of file expr.c.

References BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, SCIP_Expr::children, SCIP_Expr::data, FALSE, SCIP_Expr::nchildren, NULL, polynomialdataApplyChildmap(), SCIP_ALLOC, SCIP_Bool, SCIP_EXPR_POLYNOMIAL, SCIP_OKAY, SCIPexprAreEqual(), SCIPexprFreeDeep(), SCIPexprGetOperator(), and TRUE.

Referenced by exprsimplifyFlattenPolynomials().

static SCIP_RETCODE exprsimplifyRemovePolynomialNullChildren ( BMS_BLKMEM blkmem,
SCIP_EXPR expr 
)
static

eliminates NULL's in children array and shrinks it to actual size

Parameters
blkmemblock memory data structure
exprexpression

Definition at line 4201 of file expr.c.

References BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, BMSreallocBlockMemoryArray, SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, polynomialdataApplyChildmap(), SCIP_ALLOC, SCIP_EXPR_POLYNOMIAL, SCIP_OKAY, and SCIPexprGetOperator().

Referenced by exprsimplifyFlattenPolynomials(), and exprsimplifySeparateLinearFromPolynomial().

static SCIP_RETCODE exprsimplifyRemovePolynomialUnusedChildren ( BMS_BLKMEM blkmem,
SCIP_EXPR expr 
)
static
static SCIP_RETCODE exprsimplifyFlattenPolynomials ( BMS_BLKMEM blkmem,
SCIP_MESSAGEHDLR messagehdlr,
SCIP_EXPR expr,
SCIP_Real  eps,
int  maxexpansionexponent 
)
static

flattens polynomials in polynomials, check for constants in non-polynomials expressions exprsimplifyConvertToPolynomials should have been called before to eliminate simple polynomial operands

Parameters
blkmemblock memory data structure
messagehdlrmessage handler
exprexpression
epsthreshold, under which values are treat as 0
maxexpansionexponentmaximal exponent for which we still expand non-monomial polynomials

Definition at line 4317 of file expr.c.

References BMSfreeBlockMemoryArray, BMSfreeBlockMemoryArrayNull, BMSreallocBlockMemoryArray, calcGrowSize(), SCIP_ExprData_Monomial::childidxs, SCIP_Expr::children, SCIP_ExprData_Monomial::coef, SCIP_ExprData_Polynomial::constant, SCIP_Expr::data, EPSISINT, SCIP_ExprData_Monomial::exponents, exprsimplifyAddChildren(), exprsimplifyRemoveDuplicatePolynomialChildren(), exprsimplifyRemovePolynomialNullChildren(), exprsimplifyRemovePolynomialUnusedChildren(), FALSE, SCIP_ExprData_Polynomial::monomials, SCIP_Expr::nchildren, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, NULL, SCIP_Expr::op, polynomialdataCreate(), polynomialdataExpandMonomialFactor(), polynomialdataFree(), pow(), SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_ERROR, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PARAM, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIP_Real, SCIPdebug, SCIPdebugMessage, SCIPdebugPrintf, SCIPerrorMessage, SCIPexprEval(), SCIPexprFindMonomialFactor(), SCIPexprFreeDeep(), SCIPexprGetNChildren(), SCIPexprGetNMonomials(), SCIPexprGetOperator(), SCIPexprGetOpReal(), SCIPexprMergeMonomials(), SCIPexprPrint(), SCIPmessagePrintWarning(), SCIP_ExprData_Polynomial::sorted, SCIP_ExprData_Monomial::sorted, and TRUE.

Referenced by SCIPexprSimplify().

static SCIP_RETCODE exprsimplifySeparateLinearFromPolynomial ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
SCIP_Real  eps,
int  nvars,
int *  nlinvars,
int *  linidxs,
SCIP_Real lincoefs 
)
static

separates linear monomials from an expression, if it is a polynomial expression separates only those linear terms which variable is not used otherwise in the expression

Parameters
blkmemblock memory data structure
exprexpression
epsthreshold, under which positive values are treat as 0
nvarsnumber of variables in expression
nlinvarsbuffer to store number of linear variables in linear part
linidxsarray to store indices of variables in expression tree which belong to linear part
lincoefsarray to store coefficients of linear part

Definition at line 4644 of file expr.c.

References BMSallocBlockMemoryArray, BMSclearMemoryArray, BMSfreeBlockMemoryArray, SCIP_ExprData_Monomial::childidxs, SCIP_Expr::children, SCIP_ExprData_Monomial::coef, SCIP_Expr::data, SCIP_ExprData_Monomial::exponents, exprsimplifyRemovePolynomialNullChildren(), FALSE, SCIP_ExprData_Polynomial::monomials, SCIP_Expr::nchildren, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, NULL, polynomialdataMergeMonomials(), SCIP_ALLOC, SCIP_CALL, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIPexprFreeDeep(), SCIPexprGetNChildren(), SCIPexprGetOperator(), SCIPexprGetOpIndex(), and SCIPexprGetVarsUsage().

Referenced by SCIPexprSimplify().

static SCIP_RETCODE exprsimplifyUnconvertPolynomials ( BMS_BLKMEM blkmem,
SCIP_EXPR expr 
)
static

converts polynomial expressions back into simpler expressions, where possible

Parameters
blkmemblock memory data structure
exprexpression to convert back

Definition at line 4745 of file expr.c.

References SCIP_Expr::children, SCIP_Expr::data, exprUnconvertPolynomial(), SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_CALL, SCIP_EXPR_POLYNOMIAL, and SCIP_OKAY.

Referenced by SCIPexprSimplify().

static SCIP_DECL_HASHGETKEY ( exprparseVarTableGetKey  )
static

Definition at line 4769 of file expr.c.

static SCIP_RETCODE exprparseReadVariable ( BMS_BLKMEM blkmem,
const char **  str,
SCIP_EXPR **  expr,
int *  nvars,
int **  varnames,
SCIP_HASHTABLE vartable,
SCIP_Real  coefficient,
const char *  varnameendptr 
)
static

parses a variable name from a string and creates corresponding expression

creates a new variable index if variable not seen before, updates varnames and vartable structures

Parameters
blkmemblock memory data structure
strpointer to the string to be parsed
exprbuffer to store pointer to created expression
nvarsrunning number of encountered variables so far
varnamespointer to buffer to store new variable names
vartablehash table for variable names and corresponding expression index
coefficientcoefficient to be used when creating the expression
varnameendptrif a <varname> should be parsed, set this to NULL. Then, str points to the '<' else, str should point to the first letter of the varname, and varnameendptr should point one char behind the last char of the variable name

Definition at line 4779 of file expr.c.

References NULL, SCIP_CALL, SCIP_EXPR_VARIDX, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_READERROR, SCIP_VARTYPE_BINARY_CHAR, SCIP_VARTYPE_CONTINUOUS_CHAR, SCIP_VARTYPE_IMPLINT_CHAR, SCIP_VARTYPE_INTEGER_CHAR, SCIPerrorMessage, SCIPexprCreate(), SCIPexprCreateLinear(), SCIPhashtableInsert(), and SCIPhashtableRetrieve().

Referenced by exprParse().

static SCIP_RETCODE exprparseFindClosingParenthesis ( const char *  str,
const char **  endptr,
int  length 
)
static
Parameters
strpointer to the string to be parsed
endptrpointer to point to the closing parenthesis
lengthlength of the string to be parsed

Definition at line 4874 of file expr.c.

References SCIP_OKAY, SCIP_READERROR, and SCIPerrorMessage.

Referenced by exprParse().

static SCIP_RETCODE exprParse ( BMS_BLKMEM blkmem,
SCIP_MESSAGEHDLR messagehdlr,
SCIP_EXPR **  expr,
const char *  str,
int  length,
const char *  lastchar,
int *  nvars,
int **  varnames,
SCIP_HASHTABLE vartable,
int  recursiondepth 
)
static

parses an expression from a string

Parameters
blkmemblock memory data structure
messagehdlrmessage handler
exprbuffer to store pointer to created expression
strpointer to the string to be parsed
lengthlength of the string to be parsed
lastcharpointer to the last char of str that should be parsed
nvarsrunning number of encountered variables so far
varnamespointer to buffer to store new variable names
vartablehash table for variable names and corresponding expression index
recursiondepthcurrent recursion depth

Definition at line 4908 of file expr.c.

References EPSISINT, exprparseFindClosingParenthesis(), exprparseReadVariable(), NULL, SCIP_CALL, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LOG, SCIP_EXPR_MUL, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_TAN, SCIP_OKAY, SCIP_READERROR, SCIP_Real, SCIPdebug, SCIPdebugMessage, SCIPerrorMessage, SCIPexprAdd(), SCIPexprCreate(), SCIPexprGetOperator(), SCIPexprGetOpReal(), SCIPexprMulConstant(), SCIPexprPrint(), SCIPmessagePrintInfo(), and SCIPstrToRealValue().

Referenced by SCIPexprParse().

int SCIPexprGetNChildren ( SCIP_EXPR expr)
SCIP_EXPR** SCIPexprGetChildren ( SCIP_EXPR expr)

gives pointer to array with children of an expression

Parameters
exprexpression

Definition at line 5370 of file expr.c.

References SCIP_Expr::children, and NULL.

Referenced by eval(), exprIsNonSmooth(), getLinearAndQuadraticCoefs(), needAlwaysRetape(), printExpr(), printRowNl(), readObjective(), SCIPexprAdd(), and SCIPwritePip().

int SCIPexprGetOpIndex ( SCIP_EXPR expr)

gives index belonging to a SCIP_EXPR_VARIDX or SCIP_EXPR_PARAM operand

Parameters
exprexpression

Definition at line 5380 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, SCIP_EXPR_PARAM, and SCIP_EXPR_VARIDX.

Referenced by eval(), exprsimplifySeparateLinearFromPolynomial(), getLinearAndQuadraticCoefs(), printExpr(), printRowNl(), and readObjective().

SCIP_Real SCIPexprGetOpReal ( SCIP_EXPR expr)

gives real belonging to a SCIP_EXPR_CONST operand

Parameters
exprexpression

Definition at line 5391 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_CONST.

Referenced by eval(), exprParse(), exprsimplifyFlattenPolynomials(), printExpr(), printRowNl(), readExpression(), SCIPexprAdd(), and SCIPexprMulConstant().

void* SCIPexprGetOpData ( SCIP_EXPR expr)

gives void* belonging to a complex operand

Parameters
exprexpression

Definition at line 5402 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_SUM.

SCIP_Real SCIPexprGetRealPowerExponent ( SCIP_EXPR expr)

gives exponent belonging to a SCIP_EXPR_REALPOWER expression

Parameters
exprexpression

Definition at line 5413 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_REALPOWER.

Referenced by eval(), printExpr(), printRowNl(), and SCIPwritePip().

int SCIPexprGetIntPowerExponent ( SCIP_EXPR expr)

gives exponent belonging to a SCIP_EXPR_INTPOWER expression

Parameters
exprexpression

Definition at line 5424 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_INTPOWER.

Referenced by eval(), printExpr(), printRowNl(), and SCIPwritePip().

SCIP_Real SCIPexprGetSignPowerExponent ( SCIP_EXPR expr)

gives exponent belonging to a SCIP_EXPR_SIGNPOWER expression

Parameters
exprexpression

Definition at line 5435 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_SIGNPOWER.

Referenced by printExpr().

SCIP_Real* SCIPexprGetLinearCoefs ( SCIP_EXPR expr)

gives linear coefficients belonging to a SCIP_EXPR_LINEAR expression

Parameters
exprexpression

Definition at line 5446 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, SCIP_EXPR_LINEAR, and SCIP_Real.

Referenced by eval(), printExpr(), printRowNl(), and SCIPexprAdd().

SCIP_Real SCIPexprGetLinearConstant ( SCIP_EXPR expr)

gives constant belonging to a SCIP_EXPR_LINEAR expression

Parameters
exprexpression

Definition at line 5459 of file expr.c.

References SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_EXPR_LINEAR, and SCIP_Real.

Referenced by eval(), printExpr(), printRowNl(), and SCIPexprAdd().

SCIP_QUADELEM* SCIPexprGetQuadElements ( SCIP_EXPR expr)

gives quadratic elements belonging to a SCIP_EXPR_QUADRATIC expression

Parameters
exprquadratic expression

Definition at line 5472 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_QUADRATIC.

Referenced by eval(), printExpr(), and printRowNl().

SCIP_Real SCIPexprGetQuadConstant ( SCIP_EXPR expr)

gives constant belonging to a SCIP_EXPR_QUADRATIC expression

Parameters
exprquadratic expression

Definition at line 5484 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_QUADRATIC.

Referenced by eval(), printExpr(), and printRowNl().

SCIP_Real* SCIPexprGetQuadLinearCoefs ( SCIP_EXPR expr)

gives linear coefficients belonging to a SCIP_EXPR_QUADRATIC expression can be NULL if all coefficients are 0.0

Parameters
exprquadratic expression

Definition at line 5497 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_QUADRATIC.

Referenced by eval(), printExpr(), and printRowNl().

int SCIPexprGetNQuadElements ( SCIP_EXPR expr)

gives number of quadratic elements belonging to a SCIP_EXPR_QUADRATIC expression

Parameters
exprquadratic expression

Definition at line 5509 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_QUADRATIC.

Referenced by eval(), printExpr(), and printRowNl().

SCIP_EXPRDATA_MONOMIAL** SCIPexprGetMonomials ( SCIP_EXPR expr)

gives the monomials belonging to a SCIP_EXPR_POLYNOMIAL expression

Parameters
exprexpression

Definition at line 5521 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_POLYNOMIAL.

Referenced by eval(), getLinearAndQuadraticCoefs(), printExpr(), printRowNl(), readObjective(), and SCIPwritePip().

int SCIPexprGetNMonomials ( SCIP_EXPR expr)

gives the number of monomials belonging to a SCIP_EXPR_POLYNOMIAL expression

Parameters
exprexpression

Definition at line 5533 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_POLYNOMIAL.

Referenced by eval(), exprsimplifyFlattenPolynomials(), getLinearAndQuadraticCoefs(), printExpr(), printRowNl(), readConstraints(), readObjective(), and SCIPwritePip().

SCIP_Real SCIPexprGetPolynomialConstant ( SCIP_EXPR expr)

gives the constant belonging to a SCIP_EXPR_POLYNOMIAL expression

Parameters
exprexpression

Definition at line 5545 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_POLYNOMIAL.

Referenced by eval(), getLinearAndQuadraticCoefs(), printExpr(), printRowNl(), and readObjective().

SCIP_Real SCIPexprGetMonomialCoef ( SCIP_EXPRDATA_MONOMIAL monomial)

gets coefficient of a monomial

Parameters
monomialmonomial

Definition at line 5557 of file expr.c.

References SCIP_ExprData_Monomial::coef, and NULL.

Referenced by eval(), getLinearAndQuadraticCoefs(), printExpr(), printRowNl(), readObjective(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

int SCIPexprGetMonomialNFactors ( SCIP_EXPRDATA_MONOMIAL monomial)

gets number of factors of a monomial

Parameters
monomialmonomial

Definition at line 5567 of file expr.c.

References SCIP_ExprData_Monomial::nfactors, and NULL.

Referenced by eval(), getLinearAndQuadraticCoefs(), printExpr(), printRowNl(), readObjective(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), SCIP_DECL_NONLINCONSUPGD(), and SCIPwritePip().

int* SCIPexprGetMonomialChildIndices ( SCIP_EXPRDATA_MONOMIAL monomial)

gets indices of children corresponding to factors of a monomial

Parameters
monomialmonomial

Definition at line 5577 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, and NULL.

Referenced by eval(), getLinearAndQuadraticCoefs(), printExpr(), printRowNl(), readObjective(), and reformulate().

SCIP_Real* SCIPexprGetMonomialExponents ( SCIP_EXPRDATA_MONOMIAL monomial)

gets exponents in factors of a monomial

Parameters
monomialmonomial

Definition at line 5587 of file expr.c.

References SCIP_ExprData_Monomial::exponents, and NULL.

Referenced by eval(), getLinearAndQuadraticCoefs(), printExpr(), printRowNl(), readObjective(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), SCIP_DECL_NONLINCONSUPGD(), and SCIPwritePip().

SCIP_RETCODE SCIPexprCreate ( BMS_BLKMEM blkmem,
SCIP_EXPR **  expr,
SCIP_EXPROP  op,
  ... 
)

creates a simple expression

Parameters
blkmemblock memory data structure
exprpointer to buffer for expression address
opoperand of expression

Definition at line 5599 of file expr.c.

References BMSallocBlockMemoryArray, BMSduplicateBlockMemoryArray, SCIP_Expr::data, exprCreate(), NULL, SCIP_ALLOC, SCIP_CALL, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LAST, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PARAM, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, and SCIPerrorMessage.

Referenced by createConsFromQuadTerm(), createExprtreeFromMonomial(), createNlRow(), exprgraphNodeCreateExpr(), exprParse(), exprparseReadVariable(), generate1ConvexIndefiniteUnderestimatorInTheInteriorPatternA(), generate1ConvexIndefiniteUnderestimatorInTheInteriorPatternB(), generateOrthogonal_lx_ly_Underestimator(), generateOrthogonal_lx_uy_Underestimator(), generateUnderestimatorParallelYFacets(), initSepaData(), initSepaDataCreateVred(), readExpression(), readNonlinearExprs(), readPolynomial(), removeFixedVariables(), SCIPexprAdd(), SCIPexprgraphGetSeparableTrees(), SCIPexprgraphGetSumTrees(), SCIPexprMulConstant(), SCIPexprtreeAddExpr(), SCIPexprtreeRemoveFixedVars(), and SCIPwritePip().

SCIP_RETCODE SCIPexprCopyDeep ( BMS_BLKMEM blkmem,
SCIP_EXPR **  targetexpr,
SCIP_EXPR sourceexpr 
)
void SCIPexprFreeShallow ( BMS_BLKMEM blkmem,
SCIP_EXPR **  expr 
)

frees an expression but not its children

Parameters
blkmemblock memory data structure
exprpointer to expression to free

Definition at line 5845 of file expr.c.

References BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

Referenced by SCIPexprAdd().

SCIP_RETCODE SCIPexprAdd ( BMS_BLKMEM blkmem,
SCIP_EXPR **  expr,
SCIP_Real  coef1,
SCIP_EXPR term1,
SCIP_Real  coef2,
SCIP_EXPR term2,
SCIP_Real  constant 
)

creates an expression from the addition of two given expression, with coefficients, and a constant

the given expressions may be modified or freed, otherwise it will be used a child expression favors creation and maintaining of SCIP_EXPR_LINEAR over SCIP_EXPR_PLUS or SCIP_EXPR_SUM

Parameters
blkmemblock memory data structure
exprpointer to store pointer to created expression
coef1coefficient of first term
term1expression of first term, or NULL
coef2coefficient of second term
term2expression of second term, or NULL
constantconstant term to add

Definition at line 5870 of file expr.c.

References SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_CALL, SCIP_EXPR_CONST, SCIP_EXPR_LINEAR, SCIP_OKAY, SCIP_Real, SCIPexprAddToLinear(), SCIPexprCreate(), SCIPexprCreateLinear(), SCIPexprFreeDeep(), SCIPexprFreeShallow(), SCIPexprGetChildren(), SCIPexprGetLinearCoefs(), SCIPexprGetLinearConstant(), SCIPexprGetNChildren(), SCIPexprGetOperator(), and SCIPexprGetOpReal().

Referenced by exprParse(), and readExpression().

SCIP_RETCODE SCIPexprMulConstant ( BMS_BLKMEM blkmem,
SCIP_EXPR **  expr,
SCIP_EXPR term,
SCIP_Real  factor 
)

creates an expression from the multiplication of an expression with a constant

the given expressions may be modified or freed, otherwise it will be used a child expression favors creation and maintaining SCIP_EXPR_LINEAR over SCIP_EXPR_PLUS or SCIP_EXPR_SUM

Parameters
blkmemblock memory data structure
exprbuffer to store pointer to created expression
termterm to multiply by factor
factorfactor

Definition at line 6028 of file expr.c.

References SCIP_ExprData_Monomial::coef, SCIP_QuadElement::coef, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_Expr::data, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprData_Polynomial::monomials, SCIP_Expr::nchildren, NULL, SCIP_ExprData_Quadratic::quadelems, SCIP_CALL, SCIP_EXPR_CONST, SCIP_EXPR_LINEAR, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_QUADRATIC, SCIP_OKAY, SCIP_Real, SCIPexprCreate(), SCIPexprCreateLinear(), SCIPexprFreeDeep(), SCIPexprGetNChildren(), SCIPexprGetOperator(), and SCIPexprGetOpReal().

Referenced by exprParse(), and readExpression().

SCIP_RETCODE SCIPexprCreateLinear ( BMS_BLKMEM blkmem,
SCIP_EXPR **  expr,
int  nchildren,
SCIP_EXPR **  children,
SCIP_Real coefs,
SCIP_Real  constant 
)

creates a SCIP_EXPR_LINEAR expression that is (affine) linear in its children: constant + sum_i coef_i child_i

Parameters
blkmemblock memory data structure
exprpointer to buffer for expression address
nchildrennumber of children
childrenchildren of expression
coefscoefficients of children
constantconstant part

Definition at line 6126 of file expr.c.

References BMSallocBlockMemoryArray, BMScopyMemoryArray, BMSduplicateBlockMemoryArray, exprCreate(), NULL, SCIP_ALLOC, SCIP_CALL, SCIP_EXPR_LINEAR, SCIP_OKAY, and SCIP_Real.

Referenced by createNlRow(), exprgraphNodeCreateExpr(), exprparseReadVariable(), initSepaData(), initSepaDataCreateVred(), readExpression(), removeFixedVariables(), SCIPexprAdd(), SCIPexprgraphGetSeparableTrees(), SCIPexprMulConstant(), and SCIPexprtreeRemoveFixedVars().

SCIP_RETCODE SCIPexprAddToLinear ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
int  nchildren,
SCIP_Real coefs,
SCIP_EXPR **  children,
SCIP_Real  constant 
)

adds new terms to a linear expression

Parameters
blkmemblock memory
exprlinear expression
nchildrennumber of children to add
coefscoefficients of additional children
childrenadditional children expressions
constantconstant to add

Definition at line 6163 of file expr.c.

References BMScopyMemoryArray, BMSreallocBlockMemoryArray, SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_ALLOC, SCIP_EXPR_LINEAR, SCIP_OKAY, and SCIP_Real.

Referenced by SCIPexprAdd().

SCIP_RETCODE SCIPexprCreateQuadratic ( BMS_BLKMEM blkmem,
SCIP_EXPR **  expr,
int  nchildren,
SCIP_EXPR **  children,
SCIP_Real  constant,
SCIP_Real lincoefs,
int  nquadelems,
SCIP_QUADELEM quadelems 
)

creates a SCIP_EXPR_QUADRATIC expression: constant + sum_i coef_i child_i + sum_i coef_i child1_i child2_i

Parameters
blkmemblock memory data structure
exprpointer to buffer for expression address
nchildrennumber of children
childrenchildren of expression
constantconstant
lincoefslinear coefficients of children, or NULL if all 0.0
nquadelemsnumber of quadratic elements
quadelemsquadratic elements specifying coefficients and child indices

Definition at line 6208 of file expr.c.

References BMSduplicateBlockMemoryArray, exprCreate(), NULL, quadraticdataCreate(), SCIP_ALLOC, SCIP_CALL, SCIP_EXPR_QUADRATIC, and SCIP_OKAY.

Referenced by createConsFromQuadTerm(), exprgraphNodeCreateExpr(), readExpression(), readNonlinearExprs(), and SCIPexprgraphGetSeparableTrees().

void SCIPexprSortQuadElems ( SCIP_EXPR expr)

ensures that quadratic elements of a quadratic expression are sorted

Parameters
exprquadratic expression

Definition at line 6244 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, quadraticdataSort(), and SCIP_EXPR_QUADRATIC.

Referenced by eval(), and SCIPexprAreEqual().

SCIP_RETCODE SCIPexprCreatePolynomial ( BMS_BLKMEM blkmem,
SCIP_EXPR **  expr,
int  nchildren,
SCIP_EXPR **  children,
int  nmonomials,
SCIP_EXPRDATA_MONOMIAL **  monomials,
SCIP_Real  constant,
SCIP_Bool  copymonomials 
)

creates a SCIP_EXPR_POLYNOMIAL expression from an array of monomials: constant + sum_i monomial_i

Parameters
blkmemblock memory data structure
exprpointer to buffer for expression address
nchildrennumber of children
childrenchildren of expression
nmonomialsnumber of monomials
monomialsmonomials
constantconstant part
copymonomialsshould monomials by copied or ownership be assumed?

Definition at line 6256 of file expr.c.

References BMSduplicateBlockMemoryArray, exprCreate(), NULL, polynomialdataCreate(), SCIP_ALLOC, SCIP_CALL, SCIP_EXPR_POLYNOMIAL, and SCIP_OKAY.

Referenced by createExprtreeFromMonomial(), createNlRow(), exprgraphNodeCreateExpr(), readPolynomial(), SCIPexprgraphGetSeparableTrees(), and SCIPexprgraphGetSumTrees().

SCIP_RETCODE SCIPexprAddMonomials ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
int  nmonomials,
SCIP_EXPRDATA_MONOMIAL **  monomials,
SCIP_Bool  copymonomials 
)

adds an array of monomials to a SCIP_EXPR_POLYNOMIAL expression

Parameters
blkmemblock memory of expression
exprexpression
nmonomialsnumber of monomials to add
monomialsthe monomials to add
copymonomialsshould monomials by copied or ownership be assumed?

Definition at line 6291 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, polynomialdataAddMonomials(), SCIP_CALL, SCIP_EXPR_POLYNOMIAL, and SCIP_OKAY.

void SCIPexprChgPolynomialConstant ( SCIP_EXPR expr,
SCIP_Real  constant 
)

changes the constant in a SCIP_EXPR_POLYNOMIAL expression

Parameters
exprexpression
constantnew value for constant

Definition at line 6313 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, and SCIP_EXPR_POLYNOMIAL.

void SCIPexprMultiplyPolynomialByConstant ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
SCIP_Real  factor 
)

multiplies each summand of a polynomial by a given constant

Parameters
blkmemblock memory
exprpolynomial expression
factorconstant factor

Definition at line 6326 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, polynomialdataMultiplyByConstant(), and SCIP_EXPR_POLYNOMIAL.

SCIP_RETCODE SCIPexprMultiplyPolynomialByMonomial ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
SCIP_EXPRDATA_MONOMIAL factor,
int *  childmap 
)

multiplies each summand of a polynomial by a given monomial

Parameters
blkmemblock memory
exprpolynomial expression
factormonomial factor
childmapmap children in factor to children in expr, or NULL for 1:1

Definition at line 6340 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, polynomialdataMultiplyByMonomial(), SCIP_CALL, SCIP_EXPR_POLYNOMIAL, and SCIP_OKAY.

SCIP_RETCODE SCIPexprMultiplyPolynomialByPolynomial ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
SCIP_EXPR factor,
int *  childmap 
)

multiplies this polynomial by a polynomial factor needs to be different from expr children of factor need to be children of expr already, w.r.t. an optional mapping of child indices

Parameters
blkmemblock memory
exprpolynomial expression
factorpolynomial factor
childmapmap children in factor to children in expr, or NULL for 1:1

Definition at line 6361 of file expr.c.

References SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, polynomialdataMultiplyByPolynomial(), SCIP_CALL, SCIP_EXPR_POLYNOMIAL, SCIP_OKAY, and SCIPexprAreEqual().

SCIP_RETCODE SCIPexprPolynomialPower ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
int  exponent 
)

takes a power of the polynomial exponent need to be an integer polynomial need to be a monomial, if exponent is negative

Parameters
blkmemblock memory
exprpolynomial expression
exponentexponent of power operation

Definition at line 6406 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, polynomialdataPower(), SCIP_CALL, SCIP_EXPR_POLYNOMIAL, and SCIP_OKAY.

void SCIPexprMergeMonomials ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
SCIP_Real  eps,
SCIP_Bool  mergefactors 
)

merges monomials in a polynomial expression that differ only in coefficient into a single monomial eliminates monomials with coefficient between -eps and eps

Parameters
blkmemblock memory
exprpolynomial expression
epsthreshold under which numbers are treat as zero
mergefactorswhether to merge factors in monomials too

Definition at line 6425 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, polynomialdataMergeMonomials(), and SCIP_EXPR_POLYNOMIAL.

Referenced by exprsimplifyFlattenPolynomials().

SCIP_Bool SCIPexprAreMonomialsEqual ( SCIP_EXPRDATA_MONOMIAL monomial1,
SCIP_EXPRDATA_MONOMIAL monomial2,
SCIP_Real  eps 
)

checks if two monomials are equal

Parameters
monomial1first monomial
monomial2second monomial
epsthreshold under which numbers are treated as 0.0

Definition at line 6440 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::coef, EPSEQ, SCIP_ExprData_Monomial::exponents, FALSE, SCIP_ExprData_Monomial::nfactors, NULL, SCIPexprSortMonomialFactors(), and TRUE.

Referenced by exprgraphFindParentByOperator(), and SCIPexprAreEqual().

void SCIPexprChgMonomialCoef ( SCIP_EXPRDATA_MONOMIAL monomial,
SCIP_Real  newcoef 
)

changes coefficient of monomial

Parameters
monomialmonomial
newcoefnew coefficient

Definition at line 6471 of file expr.c.

References SCIP_ExprData_Monomial::coef, and NULL.

Referenced by polynomialdataMultiplyByConstant(), and polynomialdataMultiplyByPolynomial().

SCIP_RETCODE SCIPexprAddMonomialFactors ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_MONOMIAL monomial,
int  nfactors,
int *  childidxs,
SCIP_Real exponents 
)

adds factors to a monomial

Parameters
blkmemblock memory
monomialmonomial
nfactorsnumber of factors to add
childidxsindices of children corresponding to factors
exponentsexponent in each factor

Definition at line 6482 of file expr.c.

References BMScopyMemoryArray, SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::exponents, monomialdataEnsureFactorsSize(), SCIP_ExprData_Monomial::nfactors, NULL, SCIP_CALL, SCIP_OKAY, and SCIP_ExprData_Monomial::sorted.

Referenced by exprConvertToPolynomial(), polynomialdataExpandMonomialFactor(), and SCIPexprMultiplyMonomialByMonomial().

SCIP_RETCODE SCIPexprMultiplyMonomialByMonomial ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_MONOMIAL monomial,
SCIP_EXPRDATA_MONOMIAL factor,
int *  childmap 
)

multiplies a monomial with a monomial

Parameters
blkmemblock memory
monomialmonomial
factorfactor monomial
childmapmap to apply to children in factor, or NULL for 1:1

Definition at line 6511 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::coef, SCIP_ExprData_Monomial::exponents, SCIP_ExprData_Monomial::nfactors, NULL, SCIP_CALL, SCIP_OKAY, and SCIPexprAddMonomialFactors().

Referenced by polynomialdataMultiplyByMonomial(), and polynomialdataMultiplyByPolynomial().

void SCIPexprMonomialPower ( SCIP_EXPRDATA_MONOMIAL monomial,
int  exponent 
)

replaces the monomial by a power of the monomial allows only integers as exponent

Parameters
monomialmonomial
exponentinteger exponent of power operation

Definition at line 6545 of file expr.c.

References SCIP_ExprData_Monomial::coef, SCIP_ExprData_Monomial::exponents, SCIP_ExprData_Monomial::nfactors, NULL, pow(), and SCIP_Real.

Referenced by polynomialdataPower().

void SCIPexprMergeMonomialFactors ( SCIP_EXPRDATA_MONOMIAL monomial,
SCIP_Real  eps 
)

merges factors that correspond to the same child by adding exponents eliminates factors with exponent between -eps and eps

Parameters
monomialmonomial
epsthreshold under which numbers are treated as 0.0

Definition at line 6574 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, SCIP_ExprData_Monomial::coef, EPSEQ, EPSISINT, EPSROUND, EPSZ, SCIP_ExprData_Monomial::exponents, SCIP_ExprData_Monomial::nfactors, NULL, and SCIPexprSortMonomialFactors().

Referenced by polynomialdataMergeMonomials().

void SCIPexprSortMonomials ( SCIP_EXPR expr)

ensures that monomials of a polynomial are sorted

Parameters
exprpolynomial expression

Definition at line 6641 of file expr.c.

References SCIP_Expr::data, NULL, SCIP_Expr::op, polynomialdataSortMonomials(), and SCIP_EXPR_POLYNOMIAL.

Referenced by SCIPexprAreEqual().

SCIP_RETCODE SCIPexprCreateMonomial ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_MONOMIAL **  monomial,
SCIP_Real  coef,
int  nfactors,
int *  childidxs,
SCIP_Real exponents 
)

creates a monomial

Parameters
blkmemblock memory
monomialbuffer where to store pointer to new monomial
coefcoefficient of monomial
nfactorsnumber of factors in monomial
childidxsindices of children corresponding to factors, or NULL if identity
exponentsexponent in each factor, or NULL if all 1.0

Definition at line 6653 of file expr.c.

References BMSallocBlockMemory, BMSallocBlockMemoryArray, BMSduplicateBlockMemoryArray, NULL, SCIP_ALLOC, and SCIP_OKAY.

Referenced by createExprtreeFromMonomial(), createNlRow(), exprConvertToPolynomial(), polynomialdataAddMonomials(), polynomialdataCopy(), polynomialdataCreate(), polynomialdataMultiplyByMonomial(), polynomialdataMultiplyByPolynomial(), readPolynomial(), reformulate(), SCIPexprgraphGetSeparableTrees(), and SCIPexprgraphGetSumTrees().

void SCIPexprFreeMonomial ( BMS_BLKMEM blkmem,
SCIP_EXPRDATA_MONOMIAL **  monomial 
)

frees a monomial

Parameters
blkmemblock memory
monomialpointer to monomial that should be freed

Definition at line 6710 of file expr.c.

References BMSfreeBlockMemory, BMSfreeBlockMemoryArray, and NULL.

Referenced by exprConvertToPolynomial(), polynomialdataExpandMonomialFactor(), polynomialdataFree(), polynomialdataMergeMonomials(), polynomialdataMultiplyByConstant(), and polynomialdataPower().

void SCIPexprSortMonomialFactors ( SCIP_EXPRDATA_MONOMIAL monomial)
SCIP_Bool SCIPexprFindMonomialFactor ( SCIP_EXPRDATA_MONOMIAL monomial,
int  childidx,
int *  pos 
)

finds a factor corresponding to a given child index in a monomial note that if the factors have not been merged, the position of some factor corresponding to a given child is given returns TRUE if a factor is found, FALSE if not

Parameters
monomialmonomial
childidxindex of the child which factor to search for
posbuffer to store position of factor

Definition at line 6753 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, FALSE, SCIP_ExprData_Monomial::nfactors, NULL, SCIPexprSortMonomialFactors(), and SCIPsortedvecFindInt().

Referenced by exprgraphNodeSimplify(), and exprsimplifyFlattenPolynomials().

SCIP_Bool SCIPexprHasParam ( SCIP_EXPR expr)

indicates whether the expression contains a SCIP_EXPR_PARAM

Parameters
exprexpression

Definition at line 6770 of file expr.c.

References SCIP_Expr::children, FALSE, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_EXPR_PARAM, SCIPexprHasParam(), and TRUE.

Referenced by SCIPexprHasParam(), and SCIPexprtreeHasParam().

void SCIPexprGetVarsUsage ( SCIP_EXPR expr,
int *  varsusage 
)

counts usage of variables in expression

Parameters
exprexpression to update
varsusagearray with counters of variable usage

Definition at line 7114 of file expr.c.

References SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_EXPR_VARIDX, and SCIPexprGetVarsUsage().

Referenced by exprsimplifySeparateLinearFromPolynomial(), SCIPexprGetVarsUsage(), and SCIPexprtreeGetVarsUsage().

SCIP_Bool SCIPexprAreEqual ( SCIP_EXPR expr1,
SCIP_EXPR expr2,
SCIP_Real  eps 
)
SCIP_RETCODE SCIPexprSimplify ( BMS_BLKMEM blkmem,
SCIP_MESSAGEHDLR messagehdlr,
SCIP_EXPR expr,
SCIP_Real  eps,
int  maxexpansionexponent,
int  nvars,
int *  nlinvars,
int *  linidxs,
SCIP_Real lincoefs 
)

aims at simplifying an expression and splitting of a linear expression if linear variables are split off, expression interpreter data, if stored in the tree, is freed

Parameters
blkmemblock memory data structure
messagehdlrmessage handler
exprexpression
epsthreshold, under which positive values are treat as 0
maxexpansionexponentmaximal exponent for which we still expand non-monomial polynomials
nvarsnumber of variables in expression
nlinvarsbuffer to store number of linear variables in linear part, or NULL if linear part should not be separated
linidxsarray to store indices of variables in expression tree which belong to linear part, or NULL
lincoefsarray to store coefficients of linear part, or NULL

Definition at line 7339 of file expr.c.

References exprsimplifyConvertToPolynomials(), exprsimplifyFlattenPolynomials(), exprsimplifySeparateLinearFromPolynomial(), exprsimplifyUnconvertPolynomials(), NULL, SCIP_CALL, SCIP_OKAY, SCIPdebug, SCIPdebugMessage, SCIPdebugPrintf, and SCIPexprPrint().

Referenced by SCIPexprtreeSimplify().

SCIP_RETCODE SCIPexprEval ( SCIP_EXPR expr,
SCIP_Real varvals,
SCIP_Real param,
SCIP_Real val 
)

evaluates an expression w.r.t. a point

Parameters
exprexpression
varvalsvalues for variables, can be NULL if the expression is constant
paramvalues for parameters, can be NULL if the expression is not parameterized
valbuffer to store value

Definition at line 7391 of file expr.c.

References BMSallocMemoryArray, BMSfreeMemoryArray, SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_ALLOC, SCIP_CALL, SCIP_EXPRESSION_MAXCHILDEST, SCIP_OKAY, SCIP_Real, and SCIPexprEval().

Referenced by exprsimplifyFlattenPolynomials(), SCIPexprEval(), and SCIPexprtreeEval().

SCIP_RETCODE SCIPexprEvalInt ( SCIP_EXPR expr,
SCIP_Real  infinity,
SCIP_INTERVAL varvals,
SCIP_Real param,
SCIP_INTERVAL val 
)

evaluates an expression w.r.t. an interval

Parameters
exprexpression
infinityvalue to use for infinity
varvalsinterval values for variables, can be NULL if the expression is constant
paramvalues for parameters, can be NULL if the expression is not parameterized
valbuffer to store value

Definition at line 7432 of file expr.c.

References BMSallocMemoryArray, BMSfreeMemoryArray, SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_ALLOC, SCIP_CALL, SCIP_EXPRESSION_MAXCHILDEST, SCIP_OKAY, and SCIPexprEvalInt().

Referenced by SCIPexprEvalInt(), and SCIPexprtreeEvalInt().

SCIP_RETCODE SCIPexprCheckCurvature ( SCIP_EXPR expr,
SCIP_Real  infinity,
SCIP_INTERVAL varbounds,
SCIP_Real param,
SCIP_EXPRCURV curv,
SCIP_INTERVAL bounds 
)

tries to determine the curvature type of an expression w.r.t. given variable domains

Parameters
exprexpression to check
infinityvalue to use for infinity
varboundsdomains of variables
paramvalues for parameters, can be NULL if the expression is not parameterized
curvbuffer to store curvature of expression
boundsbuffer to store bounds on expression

Definition at line 7474 of file expr.c.

References BMSallocMemoryArray, BMSfreeMemoryArray, SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_ALLOC, SCIP_CALL, SCIP_EXPRCURV_LINEAR, SCIP_EXPRESSION_MAXCHILDEST, SCIP_OKAY, and SCIPexprCheckCurvature().

Referenced by SCIPexprCheckCurvature(), and SCIPexprtreeCheckCurvature().

SCIP_RETCODE SCIPexprSubstituteVars ( BMS_BLKMEM blkmem,
SCIP_EXPR expr,
SCIP_EXPR **  substexprs 
)

substitutes variables (SCIP_EXPR_VARIDX) by expressions Note that only the children of the given expr are checked! A variable with index i is replaced by a copy of substexprs[i], if that latter is not NULL if substexprs[i] == NULL, then the variable expression i is not touched

Parameters
blkmemblock memory data structure
exprexpression, which of the children may be replaced
substexprsarray of substitute expressions; single entries can be NULL

Definition at line 7536 of file expr.c.

References SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_CALL, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIPexprCopyDeep(), SCIPexprFreeDeep(), and SCIPexprSubstituteVars().

Referenced by generateOrthogonal_lx_ly_Underestimator(), generateOrthogonal_lx_uy_Underestimator(), generateUnderestimatorParallelYFacets(), initSepaDataCreateVred(), SCIPexprSubstituteVars(), and SCIPexprtreeSubstituteVars().

void SCIPexprReindexVars ( SCIP_EXPR expr,
int *  newindices 
)

updates variable indices in expression tree

Parameters
exprexpression to update
newindicesnew indices of variables

Definition at line 7574 of file expr.c.

References SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_EXPR_VARIDX, and SCIPexprReindexVars().

Referenced by initSepaData(), removeFixedVariables(), SCIPexprReindexVars(), and SCIPexprtreeRemoveFixedVars().

void SCIPexprReindexParams ( SCIP_EXPR expr,
int *  newindices 
)

updates parameter indices in expression tree

Parameters
exprexpression to update
newindicesnew indices of variables

Definition at line 7595 of file expr.c.

References SCIP_Expr::children, SCIP_Expr::data, SCIP_Expr::nchildren, NULL, SCIP_Expr::op, SCIP_EXPR_PARAM, and SCIPexprReindexParams().

Referenced by SCIPexprReindexParams().

void SCIPexprPrint ( SCIP_EXPR expr,
SCIP_MESSAGEHDLR messagehdlr,
FILE *  file,
const char **  varnames,
const char **  paramnames,
SCIP_Real paramvals 
)

prints an expression

Parameters
exprexpression
messagehdlrmessage handler
filefile for printing, or NULL for stdout
varnamesnames of variables, or NULL for default names
paramnamesnames of parameters, or NULL for default names
paramvalsvalues of parameters, or NULL for not printing

Definition at line 7616 of file expr.c.

References SCIP_ExprData_Monomial::childidxs, SCIP_Expr::children, SCIP_ExprData_Monomial::coef, SCIP_QuadElement::coef, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_Expr::data, SCIP_ExprData_Monomial::exponents, SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprData_Polynomial::monomials, SCIP_Expr::nchildren, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_Expr::op, SCIP_ExprData_Quadratic::quadelems, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LAST, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PARAM, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_Real, SCIPABORT, SCIPerrorMessage, SCIPexprPrint(), and SCIPmessageFPrintInfo().

Referenced by exprParse(), exprsimplifyFlattenPolynomials(), SCIPexprPrint(), SCIPexprSimplify(), and SCIPexprtreePrint().

SCIP_RETCODE SCIPexprParse ( BMS_BLKMEM blkmem,
SCIP_MESSAGEHDLR messagehdlr,
SCIP_EXPR **  expr,
const char *  str,
const char *  lastchar,
int *  nvars,
int *  varnames 
)

parses an expression from a string

Parameters
blkmemblock memory data structure
messagehdlrmessage handler
exprbuffer to store pointer to created expression
strpointer to the string to be parsed
lastcharpointer to the last char of str that should be parsed
nvarsbuffer to store number of variables
varnamesbuffer to store variable names, prefixed by index (as int)

Definition at line 7897 of file expr.c.

References exprParse(), NULL, SCIP_CALL, SCIP_OKAY, SCIPhashtableCreate(), and SCIPhashtableFree().

Referenced by SCIP_DECL_CONSPARSE().

int SCIPexprtreeGetNVars ( SCIP_EXPRTREE tree)

returns number of variables in expression tree

Parameters
treeexpression tree

Definition at line 7968 of file expr.c.

References NULL, and SCIP_ExprTree::nvars.

Referenced by addConcaveEstimatorBivariate(), addConcaveEstimatorMultivariate(), addConcaveEstimatorUnivariate(), addIntervalGradientEstimator(), addLinearization(), checkCurvature(), computeViolation(), consdataAddExprtrees(), createConstraint(), evalFunctionGradient(), evalFunctionValue(), freeConstraint(), generateCut(), getGradientMaxElement(), getLinearAndQuadraticCoefs(), hessLagAddExprtree(), hessLagSparsitySetNzFlagForExprtree(), nlpAddNlRows(), nlpSetupNlpiIndices(), nlrowCalcActivityBounds(), nlrowExprtreeChanged(), nlrowRemoveFixedExprtreeVars(), printFunction(), printRowNl(), processNlRow(), readObjective(), registerBranchingVariables(), registerLargeLPValueVariableForBranching(), removeFixedVariables(), SCIP_DECL_CONSCOPY(), SCIP_DECL_CONSENFOPS(), SCIP_DECL_CONSEXITPRE(), SCIP_DECL_CONSGETNVARS(), SCIP_DECL_CONSGETVARS(), SCIP_DECL_CONSINITLP(), SCIP_DECL_HEUREXEC(), SCIPcreateConsBivariate(), SCIPevalExprtreeGlobalBounds(), SCIPevalExprtreeLocalBounds(), SCIPevalExprtreeSol(), SCIPexprintCompile(), SCIPexprintEval(), SCIPexprintEvalInt(), SCIPexprintGrad(), SCIPexprintGradInt(), SCIPexprintHessianDense(), SCIPexprintHessianSparsityDense(), SCIPexprtreeSimplify(), SCIPgetExprtreeTransformedVars(), SCIPnlpGetVarsNonlinearity(), SCIPnlpHasContinuousNonlinearity(), SCIPnlpiOracleChgExprtree(), SCIPnlpiOracleDelVarSet(), SCIPnlpiOracleEvalJacobian(), SCIPnlpiOracleGetJacobianSparsity(), SCIPnlrowGetSolActivity(), SCIPnlrowRecalcNLPActivity(), SCIPnlrowRecalcPseudoActivity(), SCIPwritePip(), solveDerivativeEquation(), and updateVariableDegreesCons().

int SCIPexprtreeGetNParams ( SCIP_EXPRTREE tree)

returns number of parameters in expression tree

Parameters
treeexpression tree

Definition at line 7978 of file expr.c.

References SCIP_ExprTree::nparams, and NULL.

Referenced by nlrowExprtreeParamChanged(), nlrowRemoveFixedExprtreeVars(), SCIPnlpiOracleChgExprParam(), and SCIPnlrowChgExprtreeParams().

SCIP_Real* SCIPexprtreeGetParamVals ( SCIP_EXPRTREE tree)

returns values of parameters or NULL if none

Parameters
treeexpression tree

Definition at line 7988 of file expr.c.

References NULL, and SCIP_ExprTree::params.

Referenced by nlrowExprtreeParamChanged(), SCIPexprintEval(), and SCIPexprintEvalInt().

void SCIPexprtreeSetParamVal ( SCIP_EXPRTREE tree,
int  paramidx,
SCIP_Real  paramval 
)

sets value of a single parameter in expression tree

Parameters
treeexpression tree
paramidxindex of parameter
paramvalnew value of parameter

Definition at line 7998 of file expr.c.

References NULL, and SCIP_ExprTree::params.

Referenced by generateConvexConcaveUnderestimator(), SCIPnlpiOracleChgExprParam(), and SCIPnlrowChgExprtreeParam().

void SCIPexprtreeSetInterpreterData ( SCIP_EXPRTREE tree,
SCIP_EXPRINTDATA interpreterdata 
)

sets data of expression tree interpreter

Parameters
treeexpression tree
interpreterdataexpression interpreter data

Definition at line 8023 of file expr.c.

References SCIP_ExprTree::interpreterdata, and NULL.

Referenced by SCIPexprintCompile().

SCIP_RETCODE SCIPexprtreeFreeInterpreterData ( SCIP_EXPRTREE tree)

frees data of expression tree interpreter, if any

Parameters
treeexpression tree

Definition at line 8036 of file expr.c.

References SCIP_ExprTree::interpreterdata, NULL, SCIP_CALL, SCIP_OKAY, and SCIPexprintFreeData().

Referenced by SCIPexprtreeAddExpr(), SCIPexprtreeFree(), SCIPexprtreeSimplify(), and SCIPexprtreeSubstituteVars().

SCIP_Bool SCIPexprtreeHasParam ( SCIP_EXPRTREE tree)

indicates whether there are parameterized constants (SCIP_EXPR_PARAM) in expression tree

Parameters
treeexpression tree

Definition at line 8050 of file expr.c.

References NULL, SCIP_ExprTree::root, and SCIPexprHasParam().

SCIP_RETCODE SCIPexprtreeGetMaxDegree ( SCIP_EXPRTREE tree,
int *  maxdegree 
)

Gives maximal degree of expression in expression tree. If constant expression, gives 0, if linear expression, gives 1, if polynomial expression, gives its maximal degree, otherwise (nonpolynomial nonconstant expressions) gives at least SCIP_EXPR_DEGREEINFINITY.

Parameters
treeexpression tree
maxdegreebuffer to store maximal degree

Definition at line 8065 of file expr.c.

References NULL, SCIP_ExprTree::root, SCIP_CALL, SCIP_OKAY, and SCIPexprGetMaxDegree().

Referenced by SCIPwriteGms().

SCIP_RETCODE SCIPexprtreeEvalInt ( SCIP_EXPRTREE tree,
SCIP_Real  infinity,
SCIP_INTERVAL varvals,
SCIP_INTERVAL val 
)

evaluates an expression tree w.r.t. an interval

Parameters
treeexpression tree
infinityvalue for infinity
varvalsintervals for variables
valbuffer to store expression tree value

Definition at line 8094 of file expr.c.

References NULL, SCIP_ExprTree::nvars, SCIP_ExprTree::params, SCIP_ExprTree::root, SCIP_CALL, SCIP_OKAY, and SCIPexprEvalInt().

Referenced by nlrowCalcActivityBounds(), SCIPevalExprtreeGlobalBounds(), and SCIPevalExprtreeLocalBounds().

void SCIPexprtreePrint ( SCIP_EXPRTREE tree,
SCIP_MESSAGEHDLR messagehdlr,
FILE *  file,
const char **  varnames,
const char **  paramnames 
)

prints an expression tree

Parameters
treeexpression tree
messagehdlrmessage handler
filefile for printing, or NULL for stdout
varnamesnames of variables, or NULL for default names
paramnamesnames of parameters, or NULL for default names

Definition at line 8111 of file expr.c.

References NULL, SCIP_ExprTree::params, SCIP_ExprTree::root, and SCIPexprPrint().

Referenced by generateConvexConcaveUnderestimator(), printFunction(), and SCIPexprtreePrintWithNames().

SCIP_RETCODE SCIPexprtreeCreate ( BMS_BLKMEM blkmem,
SCIP_EXPRTREE **  tree,
SCIP_EXPR root,
int  nvars,
int  nparams,
SCIP_Real params 
)

creates an expression tree

Parameters
blkmemblock memory data structure
treebuffer to store address of created expression tree
rootpointer to root expression, not copied deep !, can be NULL
nvarsnumber of variables in variable mapping
nparamsnumber of parameters in expression
paramsvalues for parameters, or NULL (if NULL but nparams > 0, then params is initialized with zeros)

Definition at line 8126 of file expr.c.

References BMSallocBlockMemory, BMSallocBlockMemoryArray, BMSclearMemoryArray, BMSduplicateBlockMemoryArray, NULL, SCIP_ALLOC, and SCIP_OKAY.

Referenced by createConsFromQuadTerm(), createExprtreeFromMonomial(), createNlRow(), generateOrthogonal_lx_ly_Underestimator(), generateOrthogonal_lx_uy_Underestimator(), generateUnderestimatorParallelYFacets(), initSepaData(), initSepaDataCreateVred(), readNonlinearExprs(), readPolynomial(), SCIP_DECL_CONSPARSE(), SCIPexprgraphGetSeparableTrees(), SCIPexprgraphGetSumTrees(), SCIPexprgraphGetTree(), and SCIPwritePip().

SCIP_RETCODE SCIPexprtreeSetParams ( SCIP_EXPRTREE tree,
int  nparams,
SCIP_Real paramvals 
)

sets number and values of all parameters in expression tree

Parameters
treeexpression tree
nparamsnumber of parameters
paramvalsvalues of parameters, can be NULL if nparams == 0

Definition at line 8231 of file expr.c.

References SCIP_ExprTree::blkmem, BMScopyMemoryArray, BMSduplicateBlockMemoryArray, BMSfreeBlockMemoryArrayNull, BMSreallocBlockMemoryArray, SCIP_ExprTree::nparams, NULL, SCIP_ExprTree::params, SCIP_ALLOC, and SCIP_OKAY.

Referenced by generateConvexConcaveUnderestimator(), initSepaData(), and SCIPnlrowChgExprtreeParams().

void SCIPexprtreeGetVarsUsage ( SCIP_EXPRTREE tree,
int *  varsusage 
)

gives the number of usages for each variable in the expression tree

Parameters
treeexpression tree
varsusagearray where to store for each variable how often it is used in the tree

Definition at line 8262 of file expr.c.

References BMSclearMemoryArray, NULL, SCIP_ExprTree::nvars, SCIP_ExprTree::root, and SCIPexprGetVarsUsage().

SCIP_RETCODE SCIPexprtreeSimplify ( SCIP_EXPRTREE tree,
SCIP_MESSAGEHDLR messagehdlr,
SCIP_Real  eps,
int  maxexpansionexponent,
int *  nlinvars,
int *  linidxs,
SCIP_Real lincoefs 
)

aims at simplifying an expression and splitting of a linear expression if linear variables are split off, expression interpreter data, if stored in the tree, is freed

Parameters
treeexpression tree
messagehdlrmessage handler
epsthreshold, under which positive values are treat as 0
maxexpansionexponentmaximal exponent for which we still expand non-monomial polynomials
nlinvarsbuffer to store number of linear variables in linear part, or NULL if linear part should not be separated
linidxsarray to store indices of variables in expression tree which belong to linear part, or NULL
lincoefsarray to store coefficients of linear part, or NULL

Definition at line 8280 of file expr.c.

References SCIP_ExprTree::blkmem, BMSallocMemoryArray, BMSfreeMemoryArray, EPSZ, NULL, SCIP_ExprTree::nvars, SCIP_ExprTree::root, SCIP_ALLOC, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPexprSimplify(), SCIPexprtreeEval(), SCIPexprtreeFreeInterpreterData(), SCIPexprtreeGetNVars(), SCIPgetRandomReal(), and SCIPrelDiff().

SCIP_RETCODE SCIPexprtreeAddExpr ( SCIP_EXPRTREE tree,
SCIP_EXPR expr,
SCIP_Bool  copyexpr 
)

adds an expression to the root expression of the tree the root is replaced with an SCIP_EXPR_PLUS expression which has the previous root and the given expression (or a copy of it) as children

Parameters
treeexpression tree
exprexpression to add to tree
copyexprwhether expression should be copied

Definition at line 8330 of file expr.c.

References SCIP_ExprTree::blkmem, NULL, SCIP_ExprTree::root, SCIP_CALL, SCIP_EXPR_PLUS, SCIP_OKAY, SCIPexprCopyDeep(), SCIPexprCreate(), and SCIPexprtreeFreeInterpreterData().

Referenced by SCIPexprgraphGetSumTrees().

SCIP_RETCODE SCIPexprtreeCheckCurvature ( SCIP_EXPRTREE tree,
SCIP_Real  infinity,
SCIP_INTERVAL varbounds,
SCIP_EXPRCURV curv,
SCIP_INTERVAL bounds 
)

tries to determine the curvature type of an expression tree w.r.t. given variable domains

Parameters
treeexpression tree
infinityvalue for infinity
varboundsdomains of variables
curvbuffer to store curvature of expression
boundsbuffer to store bounds on expression, or NULL if not needed

Definition at line 8353 of file expr.c.

References NULL, SCIP_ExprTree::params, SCIP_ExprTree::root, SCIP_CALL, SCIP_OKAY, and SCIPexprCheckCurvature().

Referenced by checkCurvature().

SCIP_RETCODE SCIPexprtreeSubstituteVars ( SCIP_EXPRTREE tree,
SCIP_EXPR **  substexprs 
)

substitutes variables (SCIP_EXPR_VARIDX) in an expression tree by expressions A variable with index i is replaced by a copy of substexprs[i], if that latter is not NULL if substexprs[i] == NULL, then the variable expression i is not touched

Parameters
treeexpression tree
substexprsarray of substitute expressions; single entries can be NULL

Definition at line 8378 of file expr.c.

References SCIP_ExprTree::blkmem, SCIP_Expr::data, NULL, SCIP_Expr::op, SCIP_ExprTree::root, SCIP_CALL, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIPexprCopyDeep(), SCIPexprFreeDeep(), SCIPexprSubstituteVars(), and SCIPexprtreeFreeInterpreterData().

Referenced by generate1ConvexIndefiniteUnderestimatorInTheInteriorPatternA(), generate1ConvexIndefiniteUnderestimatorInTheInteriorPatternB(), initSepaData(), removeFixedVariables(), and SCIPexprtreeRemoveFixedVars().

static void quadelemsQuickSort ( SCIP_QUADELEM elems,
int  start,
int  end 
)
static

quicksort an array of quadratic elements; pivot is the medial element (taken from scip/sorttpl.c)

Parameters
elemsarray to be sorted
startstarting index
endending index

Definition at line 8431 of file expr.c.

References QUADELEMS_ISBETTER, and QUADELEMS_SWAP.

Referenced by SCIPquadelemSort().

void SCIPquadelemSort ( SCIP_QUADELEM quadelems,
int  nquadelems 
)

sorts an array of quadratic elements The elements are sorted such that the first index is increasing and such that among elements with the same first index, the second index is increasing. For elements with same first and second index, the order is not defined.

Parameters
quadelemsarray of quadratic elements
nquadelemsnumber of quadratic elements

Definition at line 8540 of file expr.c.

References quadelemsQuickSort().

Referenced by createConstraint(), exprgraphFindParentByOperator(), nlrowSortQuadElem(), quadraticdataSort(), SCIPnlpiOracleChgQuadCoefs(), and SCIPnlpiOracleDelVarSet().

SCIP_Bool SCIPquadelemSortedFind ( SCIP_QUADELEM quadelems,
int  idx1,
int  idx2,
int  nquadelems,
int *  pos 
)

Finds an index pair in a sorted array of quadratic elements. If (idx1,idx2) is found in quadelems, then returns TRUE and stores position of quadratic element in *pos. If (idx1,idx2) is not found in quadelems, then returns FALSE and stores position where a quadratic element with these indices would be inserted in *pos. Assumes that idx1 <= idx2.

Parameters
quadelemsarray of quadratic elements
idx1index of first variable in element to search for
idx2index of second variable in element to search for
nquadelemsnumber of quadratic elements in array
posbuffer to store position of found quadratic element or position where it would be inserted, or NULL

Definition at line 8564 of file expr.c.

References FALSE, NULL, and TRUE.

Referenced by nlrowSearchQuadElem(), and SCIPnlpiOracleChgQuadCoefs().

void SCIPquadelemSqueeze ( SCIP_QUADELEM quadelems,
int  nquadelems,
int *  nquadelemsnew 
)

Adds quadratic elements with same index and removes elements with coefficient 0.0. Assumes that elements have been sorted before.

Parameters
quadelemsarray of quadratic elements
nquadelemsnumber of quadratic elements
nquadelemsnewpointer to store new (reduced) number of quadratic elements

Definition at line 8615 of file expr.c.

References SCIP_QuadElement::coef, NULL, and QUADELEMS_ISBETTER.

Referenced by createConstraint(), and SCIPnlpiOracleChgQuadCoefs().

static SCIP_RETCODE exprgraphNodeAddParent ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPHNODE node,
SCIP_EXPRGRAPHNODE parent 
)
static

adds a parent to an expression graph node

Parameters
blkmemblock memory
nodeexpression graph node where to add a parent
parentparent node

Definition at line 8671 of file expr.c.

References SCIP_ExprGraphNode::depth, ensureBlockMemoryArraySize, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::parents, SCIP_ExprGraphNode::parentssize, SCIP_ExprGraphNode::parentssorted, SCIP_ExprGraphNode::pos, and SCIP_OKAY.

Referenced by exprgraphNodeAddChildren(), exprgraphNodeReplaceChild(), SCIPexprgraphAddNode(), and SCIPexprgraphReplaceVarByLinearSum().

static void exprgraphNodeSortParents ( SCIP_EXPRGRAPHNODE node)
static

ensures that array of parents in a node is sorted

Parameters
nodeexpression graph node

Definition at line 8700 of file expr.c.

References SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::parents, SCIP_ExprGraphNode::parentssorted, SCIPsortPtr(), and TRUE.

Referenced by exprgraphNodeIsParent(), and exprgraphNodeRemoveParent().

static SCIP_RETCODE exprgraphNodeRemoveParent ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE **  node,
SCIP_EXPRGRAPHNODE parent 
)
static

removes a parent from an expression graph node if the node is not used and has no other parents, then it is freed

Parameters
exprgraphexpression graph
nodeexpression graph node where to remove a parent, *node will be set to NULL
parentparent node to remove

Definition at line 8725 of file expr.c.

References SCIP_ExprGraphNode::depth, exprgraphNodeSortParents(), SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::nuses, SCIP_ExprGraphNode::pos, SCIP_CALL, SCIP_OKAY, SCIPexprgraphCaptureNode(), SCIPexprgraphReleaseNode(), and SCIPsortedvecFindPtr().

Referenced by exprgraphNodeRemovePolynomialDuplicateChildren(), exprgraphNodeReplaceChild(), exprgraphNodeSimplify(), SCIPexprgraphNodeSplitOffLinear(), and SCIPexprgraphReleaseNode().

static SCIP_Bool exprgraphNodeIsParent ( SCIP_EXPRGRAPHNODE node,
SCIP_EXPRGRAPHNODE parent 
)
static

checks if a node is parent of a node

Parameters
nodeexpression graph node
parentparent to look for

Definition at line 8776 of file expr.c.

References SCIP_ExprGraphNode::depth, exprgraphNodeSortParents(), FALSE, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::parents, and SCIPsortedvecFindPtr().

Referenced by exprgraphFindParentByOperator(), and exprgraphNodeRemovePolynomialDuplicateChildren().

static SCIP_RETCODE exprgraphNodeAddChildren ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPHNODE node,
int  nexprs,
SCIP_EXPRGRAPHNODE **  exprs,
int *  childmap 
)
static

adds expression graph nodes to the array of children of a sum, product, linear, quadratic, or polynomial expression for a sum or product expression, this corresponds to add additional summands and factors, resp. for a linear expression, this corresponds to add each expression with coefficient 1.0 for a quadratic or polynomial expression, only the children array may be enlarged, the expression itself remains the same

it is assumed that node and all exprs are in the expression graph already it is assumed that all expressions that are added have lower depth than node

Parameters
blkmemblock memory
nodeexpression graph node
nexprsnumber of children to add
exprschildren nodes to add
childmaparray where to store mapping of indices from exprs to children array in node, or NULL if not of interest

Definition at line 8806 of file expr.c.

References BMSclearMemoryArray, BMSreallocBlockMemoryArray, SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, exprgraphNodeAddParent(), FALSE, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprGraphNode::nchildren, NULL, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::pos, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_LINEAR, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_SUM, SCIP_OKAY, SCIP_Real, SCIP_ExprGraphNode::simplified, and TRUE.

Referenced by exprgraphNodeSimplify().

static SCIP_RETCODE exprgraphNodeReplaceChild ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
SCIP_EXPRGRAPHNODE **  oldchild,
SCIP_EXPRGRAPHNODE newchild 
)
static

replaces a child node by another node assumes that both nodes represent the same expression if this node was the last parent of oldchild and oldchild is not in use, then it is freed newchild must have deeper depth than node

Parameters
exprgraphexpression graph
nodepointer to expression graph node
oldchildchild node that should be replaced, it may be freed
newchildnode that should take position of oldchild

Definition at line 8906 of file expr.c.

References SCIP_ExprGraph::blkmem, SCIP_ExprGraphNode::children, exprgraphNodeAddParent(), exprgraphNodeRemoveParent(), FALSE, SCIP_ExprGraphNode::nchildren, NULL, SCIP_CALL, SCIP_OKAY, SCIPdebugMessage, and SCIP_ExprGraphNode::simplified.

Referenced by SCIPexprgraphMoveNodeParents(), and SCIPexprgraphSimplify().

static SCIP_DECL_SORTPTRCOMP ( exprgraphConstNodeComp  )
static

comparison of SCIP_EXPRGRAPHNODE's that are of type SCIP_EXPR_CONST a node is larger than another node, if their corresponding constants are related that way

Definition at line 8955 of file expr.c.

References NULL, and SCIP_EXPR_CONST.

static void exprgraphSortConstNodes ( SCIP_EXPRGRAPH exprgraph)
static

sort array of nodes that holds constants

Parameters
exprgraphexpression graph

Definition at line 8974 of file expr.c.

References SCIP_ExprGraph::constnodes, SCIP_ExprGraph::constssorted, SCIP_ExprGraph::nconsts, NULL, SCIPsortPtr(), and TRUE.

Referenced by exprgraphFindConstNodePos(), and SCIPexprgraphFindConstNode().

static SCIP_Bool exprgraphFindConstNodePos ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
int *  pos 
)
static

finds position of expression graph node corresponding to a constant in constnodes array

Parameters
exprgraphexpression graph
nodenode to search for
posbuffer to store position of node, if found

Definition at line 8990 of file expr.c.

References SCIP_ExprGraph::constnodes, SCIP_ExprGraph::constssorted, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, exprgraphSortConstNodes(), FALSE, SCIP_ExprGraph::nconsts, NULL, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::pos, and SCIP_EXPR_CONST.

Referenced by SCIPexprgraphReleaseNode().

static void exprgraphPrintNodeExpression ( SCIP_EXPRGRAPHNODE node,
SCIP_MESSAGEHDLR messagehdlr,
FILE *  file,
const char **  varnames,
SCIP_Bool  printchildrenbounds 
)
static

prints the expression corresponding to a node (not recursively)

< gaussian error function (1 operand)

< imaginary part of gaussian error function (1 operand)

Parameters
nodenode of expression graph
messagehdlrmessage handler
filefile to print to, or NULL for stdout
varnamesvariable names, or NULL for generic names
printchildrenboundswhether to print bounds of children

Definition at line 9089 of file expr.c.

References SCIP_ExprGraphNode::bounds, SCIP_ExprData_Monomial::childidxs, SCIP_ExprGraphNode::children, SCIP_ExprData_Monomial::coef, SCIP_QuadElement::coef, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_ExprGraphNode::data, SCIP_ExprData_Monomial::exponents, SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_Interval::inf, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprData_Polynomial::monomials, SCIP_ExprGraphNode::nchildren, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprGraphNode::op, SCIP_ExprData_Quadratic::quadelems, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LAST, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PARAM, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_Real, SCIPexpropGetName(), SCIPmessageFPrintInfo(), and SCIP_Interval::sup.

Referenced by exprgraphNodeSimplify(), exprgraphPrintNodeDot(), and SCIPexprgraphPrintNode().

static void exprgraphPrintNodeDot ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
SCIP_MESSAGEHDLR messagehdlr,
FILE *  file,
const char **  varnames 
)
static

prints a node of an expression graph

Parameters
exprgraphexpression graph
nodenode of expression graph
messagehdlrmessage handler
filefile to print to, or NULL for stdout
varnamesvariable names, or NULL for generic names

Definition at line 9342 of file expr.c.

References SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::boundstatus, SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::depth, SCIP_ExprGraphNode::enabled, exprgraphPrintNodeExpression(), FALSE, SCIP_Interval::inf, SCIP_ExprGraphNode::nchildren, NULL, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::pos, SCIP_EXPR_LAST, SCIP_EXPRBOUNDSTATUS_CHILDRELAXED, SCIP_EXPRBOUNDSTATUS_CHILDTIGHTENED, SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENT, SCIP_Real, SCIPmessageFPrintInfo(), and SCIP_Interval::sup.

Referenced by SCIPexprgraphPrintDot().

static SCIP_RETCODE exprgraphNodeEval ( SCIP_EXPRGRAPHNODE node,
SCIP_Real varvals 
)
static
static SCIP_RETCODE exprgraphNodeEvalWithChildren ( SCIP_EXPRGRAPHNODE node,
SCIP_Real varvals 
)
static

evaluates node including subtree

Parameters
nodeexpression graph node
varvalsvalues for variables

Definition at line 9428 of file expr.c.

References SCIP_ExprGraphNode::children, exprgraphNodeEval(), SCIP_ExprGraphNode::nchildren, NULL, SCIP_CALL, and SCIP_OKAY.

Referenced by exprgraphNodeSimplify().

static SCIP_RETCODE exprgraphNodeUpdateBounds ( SCIP_EXPRGRAPHNODE node,
SCIP_Real  infinity,
SCIP_Real  minstrength,
SCIP_Bool  parenttightenisinvalid 
)
static

updates bounds of a node if a children has changed its bounds

Parameters
nodenode of expression graph
infinityvalue for infinity in interval arithmetics
minstrengthminimal required relative bound strengthening in a node to trigger a bound recalculation in parent nodes
parenttightenisinvalidwhether to consider bounds that have been tightened by parents as invalid

Definition at line 9449 of file expr.c.

References BMSallocMemoryArray, BMSfreeMemoryArray, SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::boundstatus, SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, SCIP_ExprGraphNode::enabled, SCIP_Interval::inf, isLbBetter(), isUbBetter(), SCIP_ExprGraphNode::nchildren, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::parents, SCIP_ExprGraphNode::pos, SCIP_ALLOC, SCIP_CALL, SCIP_EXPR_PARAM, SCIP_EXPR_VARIDX, SCIP_EXPRBOUNDSTATUS_CHILDRELAXED, SCIP_EXPRBOUNDSTATUS_CHILDTIGHTENED, SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENT, SCIP_EXPRBOUNDSTATUS_VALID, SCIP_EXPRESSION_MAXCHILDEST, SCIP_OKAY, SCIPdebugMessage, SCIPexpropGetName(), SCIPintervalIntersect(), SCIPintervalIsEmpty(), and SCIP_Interval::sup.

Referenced by SCIPexprgraphPropagateVarBounds().

static void exprgraphNodePropagateBounds ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
SCIP_Real  infinity,
SCIP_Real  minstrength,
SCIP_Bool cutoff 
)
static

propagate bounds of a node into children by reverting the nodes expression

Parameters
exprgraphexpression graph
nodenode in expression graph with no parents
infinityvalue for infinity in interval arithmetics
minstrengthminimal required relative bound strengthening in a node to trigger a propagation into children nodes
cutoffbuffer to store whether a node's bounds were propagated to an empty interval

Definition at line 9542 of file expr.c.

References SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::boundstatus, SCIP_ExprData_Monomial::childidxs, SCIP_ExprGraphNode::children, SCIP_ExprData_Monomial::coef, SCIP_QuadElement::coef, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, SCIP_ExprGraphNode::enabled, SCIP_ExprData_Monomial::exponents, SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_Interval::inf, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprData_Polynomial::monomials, SCIP_ExprGraphNode::nchildren, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::pos, SCIP_ExprData_Quadratic::quadelems, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LAST, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PARAM, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_EXPRBOUNDSTATUS_CHILDRELAXED, SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENT, SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENTFORCE, SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENTRECENT, SCIP_Real, SCIPABORT, SCIPdebugMessage, SCIPdebugPrintf, SCIPerrorMessage, SCIPexprgraphTightenNodeBounds(), SCIPintervalAdd(), SCIPintervalAddScalar(), SCIPintervalDiv(), SCIPintervalExp(), SCIPintervalGetRoundingMode(), SCIPintervalIsEmpty(), SCIPintervalIsEntire(), SCIPintervalLog(), SCIPintervalMul(), SCIPintervalMulScalar(), SCIPintervalNegateReal(), SCIPintervalPowerScalar(), SCIPintervalPowerScalarInverse(), SCIPintervalSet(), SCIPintervalSetBounds(), SCIPintervalSetEntire(), SCIPintervalSetRoundingMode(), SCIPintervalSetRoundingModeDownwards(), SCIPintervalSignPowerScalar(), SCIPintervalSolveBivariateQuadExpressionAllScalar(), SCIPintervalSolveUnivariateQuadExpression(), SCIPintervalSquare(), SCIPintervalSquareRoot(), SCIPintervalSub(), SCIPintervalSubScalar(), SCIP_Interval::sup, and TRUE.

Referenced by SCIPexprgraphPropagateNodeBounds().

static SCIP_RETCODE exprgraphNodeRemovePolynomialDuplicateChildren ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node 
)
static

removes duplicate children in a polynomial expression node leaves NULL's in children array

Parameters
exprgraphexpression graph
nodeexpression graph node

Definition at line 10575 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::data, exprgraphNodeIsParent(), exprgraphNodeRemoveParent(), FALSE, SCIP_ExprGraphNode::nchildren, NULL, SCIP_ExprGraphNode::op, polynomialdataApplyChildmap(), SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_POLYNOMIAL, SCIP_OKAY, and TRUE.

Referenced by exprgraphNodeSimplify().

static SCIP_RETCODE exprgraphNodeRemovePolynomialNullChildren ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPHNODE node 
)
static

eliminates NULL's in children array and shrinks it to actual size

Parameters
blkmemblock memory
nodeexpression graph node

Definition at line 10633 of file expr.c.

References BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, BMSreallocBlockMemoryArray, SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::nchildren, NULL, SCIP_ExprGraphNode::op, polynomialdataApplyChildmap(), SCIP_ALLOC, SCIP_EXPR_POLYNOMIAL, and SCIP_OKAY.

Referenced by exprgraphNodeSimplify(), and SCIPexprgraphNodeSplitOffLinear().

static SCIP_RETCODE exprgraphNodeSimplify ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
SCIP_MESSAGEHDLR messagehdlr,
SCIP_Real  eps,
int  maxexpansionexponent,
SCIP_Bool havechange 
)
static

aims at simplifying a node in an expression graph, assuming all children have been simplified converts node into polynomial, if possible and not constant

Parameters
exprgraphexpression graph
nodeexpression graph node
messagehdlrmessage handler
epsthreshold, under which positive values are treat as 0
maxexpansionexponentmaximal exponent for which we still expand non-monomial polynomials
havechangeflag to set if the node has been changed

Definition at line 10701 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSclearMemoryArray, BMSfreeBlockMemoryArray, BMSfreeBlockMemoryArrayNull, SCIP_ExprData_Monomial::childidxs, SCIP_ExprGraphNode::children, SCIP_ExprData_Monomial::coef, SCIP_ExprData_Polynomial::constant, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, ensureBlockMemoryArraySize, EPSISINT, SCIP_ExprData_Monomial::exponents, exprConvertToPolynomial(), exprgraphNodeAddChildren(), exprgraphNodeEvalWithChildren(), exprgraphNodeRemoveParent(), exprgraphNodeRemovePolynomialDuplicateChildren(), exprgraphNodeRemovePolynomialNullChildren(), exprgraphPrintNodeExpression(), FALSE, SCIP_ExprData_Polynomial::monomials, SCIP_ExprGraphNode::nchildren, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, NULL, SCIP_ExprGraphNode::op, polynomialdataExpandMonomialFactor(), polynomialdataFree(), polynomialdataMergeMonomials(), SCIP_ExprGraphNode::pos, pow(), SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_CONST, SCIP_EXPR_POLYNOMIAL, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIPdebug, SCIPdebugMessage, SCIPdebugPrintf, SCIPexprFindMonomialFactor(), SCIPmessagePrintWarning(), SCIP_ExprGraphNode::simplified, SCIP_ExprData_Polynomial::sorted, SCIP_ExprData_Monomial::sorted, TRUE, and SCIP_ExprGraphNode::value.

Referenced by SCIPexprgraphSimplify().

static SCIP_RETCODE exprgraphNodeCreateExpr ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
SCIP_EXPR **  expr,
int *  nexprvars,
int *  varidx 
)
static

creates an expression from a given node in an expression graph assembles mapping of variables from graph to tree

Parameters
exprgraphexpression graph
nodeexpression graph node which expression should be created
exprbuffer to store pointer to created expression
nexprvarscurrent number of variables in expression
varidxcurrent mapping of variable indices from graph to expression

Definition at line 11025 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSfreeBlockMemoryArrayNull, SCIP_ExprGraphNode::children, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_ExprGraphNode::data, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprData_Polynomial::monomials, SCIP_ExprGraphNode::nchildren, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::op, SCIP_ExprData_Quadratic::quadelems, SCIP_ALLOC, SCIP_CALL, SCIP_ERROR, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LAST, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PARAM, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIP_Real, SCIPerrorMessage, SCIPexprCreate(), SCIPexprCreateLinear(), SCIPexprCreatePolynomial(), SCIPexprCreateQuadratic(), and TRUE.

Referenced by SCIPexprgraphGetSeparableTrees(), SCIPexprgraphGetSumTrees(), and SCIPexprgraphGetTree().

static void exprgraphNodeGetVarsUsage ( SCIP_EXPRGRAPHNODE node,
int *  varsusage 
)
static

counts how often expression graph variables are used in a subtree of the expression graph

Note
The function does not clear the array first, but only increases already existing counts.
Parameters
noderoot node of expression graph subtree
varsusagearray where to count usage of variables, length must be at least the number of variables in the graph

Definition at line 11183 of file expr.c.

References SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::nchildren, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_VARIDX.

Referenced by SCIPexprgraphGetSubtreeVarsUsage(), and SCIPexprgraphNodeSplitOffLinear().

static void exprgraphNodeCheckSeparabilityComponent ( SCIP_EXPRGRAPHNODE node,
int *  compnr,
int  nchildcomps,
int *  childcomps,
int  nvars,
int *  varcomps 
)
static
Parameters
nodenode to which we assign a component
compnrcomponent number to assign, may be reduced if variables overlap
nchildcompsnumber of entries for which childcomps have been set already
childcompscomponent numbers of children
nvarsnumber of variables
varcompscomponent numbers of variables

Definition at line 11207 of file expr.c.

References SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::nchildren, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_VARIDX.

Referenced by SCIPexprgraphGetSeparableTrees().

static SCIP_RETCODE exprgraphEnsureDepth ( SCIP_EXPRGRAPH exprgraph,
int  mindepth 
)
static

assert that expression tree has at least a given depth

Parameters
exprgraphbuffer to store pointer to expression graph
mindepthminimal depth that should be ensured

Definition at line 11267 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSclearMemoryArray, SCIP_ExprGraph::depth, ensureBlockMemoryArraySize3, SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, SCIP_ExprGraph::nodessize, NULL, and SCIP_OKAY.

Referenced by exprgraphMoveNode(), SCIPexprgraphAddNode(), and SCIPexprgraphCreate().

static SCIP_RETCODE exprgraphRemoveVar ( SCIP_EXPRGRAPH exprgraph,
int  varidx 
)
static

remove a variable from the variables arrays, assuming that its node will be removed or converted next

Parameters
exprgraphexpression graph
varidxvariable index

Definition at line 11294 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraph::nvars, SCIP_CALL, SCIP_OKAY, SCIPhashmapRemove(), SCIPhashmapSetImage(), SCIP_ExprGraph::userdata, SCIP_ExprGraph::varbounds, SCIP_ExprGraph::varidxs, SCIP_ExprGraph::varnodes, and SCIP_ExprGraph::vars.

Referenced by SCIPexprgraphReleaseNode(), and SCIPexprgraphReplaceVarByLinearSum().

static SCIP_RETCODE exprgraphMoveNode ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
int  newdepth 
)
static
static SCIP_RETCODE exprgraphFindParentByOperator ( SCIP_EXPRGRAPH exprgraph,
int  nchildren,
SCIP_EXPRGRAPHNODE **  children,
SCIP_EXPROP  op,
SCIP_EXPROPDATA  opdata,
SCIP_EXPR **  exprchildren,
SCIP_EXPRGRAPHNODE **  parent 
)
static

given a list of children, tries to find a common parent that represents a given operator with the same given data

Parameters
exprgraphexpression graph
nchildrennumber of children
childrenchildren which parents to inspect
opoperator
opdataoperator data
exprchildrenchildren of expression to consider when modifying (reordering) operator data, or NULL
parentbuffer to store parent node if any is found, or NULL if none found

Definition at line 11434 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, SCIP_QuadElement::coef, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_ExprGraphNode::data, exprgraphNodeIsParent(), SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprData_Polynomial::monomials, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprGraphNode::nparents, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprGraphNode::parents, polynomialdataApplyChildmap(), polynomialdataSortMonomials(), SCIP_ExprData_Quadratic::quadelems, SCIP_ALLOC, SCIP_ERROR, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LAST, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PARAM, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPerrorMessage, SCIPexprAreMonomialsEqual(), SCIPquadelemSort(), SCIPsortPtr(), SCIPsortPtrInt(), SCIPsortPtrPtrInt(), SCIPsortPtrPtrReal(), SCIPsortPtrPtrRealInt(), SCIPsortPtrReal(), SCIPsortPtrRealInt(), SCIP_ExprData_Quadratic::sorted, and TRUE.

Referenced by exprgraphAddExpr(), and SCIPexprgraphAddExprtreeSum().

static SCIP_RETCODE exprgraphAddExpr ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPR expr,
void **  vars,
SCIP_EXPRGRAPHNODE **  exprnode,
SCIP_Bool exprnodeisnew 
)
static

adds an expression into an expression graph enables corresponding nodes

Parameters
exprgraphexpression graph
exprexpression to add
varsvariables corresponding to VARIDX expressions
exprnodebuffer to store expression graph node corresponding to root of this expression
exprnodeisnewbuffer to indicate whether the node in *exprnode has been newly created for this expression (otherwise, expression was already in graph)

Definition at line 11895 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, SCIP_Expr::children, SCIP_Expr::data, exprgraphCreateNode(), exprgraphFindParentByOperator(), FALSE, SCIP_Expr::nchildren, NULL, SCIP_ExprGraph::nvars, SCIP_Expr::op, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_CONST, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIPdebugMessage, SCIPexprgraphAddConst(), SCIPexprgraphAddNode(), SCIPexprgraphAddVars(), TRUE, and SCIP_ExprGraph::vars.

Referenced by SCIPexprgraphAddExprtreeSum().

static void exprgraphUpdateVarNodeBounds ( SCIP_EXPRGRAPH exprgraph,
SCIP_Bool clearreverseprop,
SCIP_Bool boundchanged 
)
static

sets bounds in variable nodes to those stored in exprgraph's varbounds array

Parameters
exprgraphexpression graph
clearreversepropflag to set if we had reset bound tightenings from reverse propagation
boundchangedbuffer to store whether a variables bound has changes, compared to those stored in nodes

Definition at line 12010 of file expr.c.

References SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::boundstatus, FALSE, SCIP_Interval::inf, isLbBetter(), isUbBetter(), MAX, MIN, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::parents, SCIP_EXPRBOUNDSTATUS_CHILDRELAXED, SCIP_EXPRBOUNDSTATUS_CHILDTIGHTENED, SCIP_EXPRBOUNDSTATUS_VALID, SCIP_Real, SCIPdebugMessage, SCIP_Interval::sup, TRUE, SCIP_ExprGraph::varbounds, and SCIP_ExprGraph::varnodes.

Referenced by SCIPexprgraphCheckCurvature(), and SCIPexprgraphPropagateVarBounds().

void SCIPexprgraphCaptureNode ( SCIP_EXPRGRAPHNODE node)

captures node, i.e., increases number of uses

Parameters
nodeexpression graph node to capture

Definition at line 12121 of file expr.c.

References SCIP_ExprGraphNode::nuses, and SCIPdebugMessage.

Referenced by exprgraphNodeRemoveParent(), reformReplaceNode(), SCIPcreateConsNonlinear2(), SCIPexprgraphAddExprtreeSum(), and SCIPexprgraphNodeSplitOffLinear().

SCIP_Bool SCIPexprgraphIsNodeEnabled ( SCIP_EXPRGRAPHNODE node)

returns whether a node is currently enabled

Parameters
nodeexpression graph node to enable

Definition at line 12133 of file expr.c.

References SCIP_ExprGraphNode::enabled, and NULL.

Referenced by reformulate().

int SCIPexprgraphGetNodeNChildren ( SCIP_EXPRGRAPHNODE node)

gets number of children of a node in an expression graph

Parameters
nodeexpression graph node

Definition at line 12143 of file expr.c.

References SCIP_ExprGraphNode::nchildren, and NULL.

Referenced by reformEnsureChildrenMinCurvature(), reformMonomial(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), SCIP_DECL_NONLINCONSUPGD(), and splitOffLinearPart().

SCIP_EXPRGRAPHNODE** SCIPexprgraphGetNodeChildren ( SCIP_EXPRGRAPHNODE node)

gets children of a node in an expression graph

Parameters
nodeexpression graph node

Definition at line 12153 of file expr.c.

References SCIP_ExprGraphNode::children, and NULL.

Referenced by reformEnsureChildrenMinCurvature(), reformMonomial(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

int SCIPexprgraphGetNodeNParents ( SCIP_EXPRGRAPHNODE node)

gets number of parents of a node in an expression graph

Parameters
nodeexpression graph node

Definition at line 12163 of file expr.c.

References SCIP_ExprGraphNode::nparents, and NULL.

Referenced by reformMonomial(), reformReplaceNode(), and reformulate().

SCIP_EXPRGRAPHNODE** SCIPexprgraphGetNodeParents ( SCIP_EXPRGRAPHNODE node)

gets parents of a node in an expression graph

Parameters
nodeexpression graph node

Definition at line 12173 of file expr.c.

References NULL, and SCIP_ExprGraphNode::parents.

Referenced by reformMonomial().

int SCIPexprgraphGetNodeDepth ( SCIP_EXPRGRAPHNODE node)

gets depth of node in expression graph

Parameters
nodeexpression graph node

Definition at line 12183 of file expr.c.

References SCIP_ExprGraphNode::depth, and NULL.

Referenced by reformEnsureChildrenMinCurvature(), reformNode2Var(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

int SCIPexprgraphGetNodePosition ( SCIP_EXPRGRAPHNODE node)

gets position of node in expression graph at its depth level

Parameters
nodeexpression graph node

Definition at line 12193 of file expr.c.

References NULL, and SCIP_ExprGraphNode::pos.

Referenced by reformEnsureChildrenMinCurvature(), reformNode2Var(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_EXPROP SCIPexprgraphGetNodeOperator ( SCIP_EXPRGRAPHNODE node)

gets operator of a node in an expression graph

Parameters
nodeexpression graph node

Definition at line 12203 of file expr.c.

References NULL, and SCIP_ExprGraphNode::op.

Referenced by reformEnsureChildrenMinCurvature(), reformMonomial(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), SCIP_DECL_NONLINCONSUPGD(), and SCIPexprgraphNodePolynomialAddMonomials().

int SCIPexprgraphGetNodeOperatorIndex ( SCIP_EXPRGRAPHNODE node)

gives index belonging to a SCIP_EXPR_VARIDX or SCIP_EXPR_PARAM operand

Parameters
nodeexpression graph node

Definition at line 12213 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, SCIP_EXPR_PARAM, and SCIP_EXPR_VARIDX.

SCIP_Real SCIPexprgraphGetNodeOperatorReal ( SCIP_EXPRGRAPHNODE node)

gives real belonging to a SCIP_EXPR_CONST operand

Parameters
nodeexpression graph node

Definition at line 12224 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_CONST.

void* SCIPexprgraphGetNodeVar ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node 
)

gives variable belonging to a SCIP_EXPR_VARIDX expression

Parameters
exprgraphexpression graph
nodeexpression graph node

Definition at line 12235 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::op, SCIP_EXPR_VARIDX, and SCIP_ExprGraph::vars.

Referenced by SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_Real SCIPexprgraphGetNodeRealPowerExponent ( SCIP_EXPRGRAPHNODE node)

gives exponent belonging to a SCIP_EXPR_REALPOWER expression

Parameters
nodeexpression graph node

Definition at line 12250 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_REALPOWER.

Referenced by reformMonomial(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

int SCIPexprgraphGetNodeIntPowerExponent ( SCIP_EXPRGRAPHNODE node)

gives exponent belonging to a SCIP_EXPR_INTPOWER expression

Parameters
nodeexpression graph node

Definition at line 12261 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_INTPOWER.

Referenced by reformMonomial(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_Real SCIPexprgraphGetNodeSignPowerExponent ( SCIP_EXPRGRAPHNODE node)

gives exponent belonging to a SCIP_EXPR_SIGNPOWER expression

Parameters
nodeexpression graph node

Definition at line 12272 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_SIGNPOWER.

Referenced by reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_Real* SCIPexprgraphGetNodeLinearCoefs ( SCIP_EXPRGRAPHNODE node)

gives linear coefficients belonging to a SCIP_EXPR_LINEAR expression

Parameters
nodeexpression graph node

Definition at line 12283 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, SCIP_EXPR_LINEAR, and SCIP_Real.

Referenced by SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_Real SCIPexprgraphGetNodeLinearConstant ( SCIP_EXPRGRAPHNODE node)

gives constant belonging to a SCIP_EXPR_LINEAR expression

Parameters
nodeexpression graph node

Definition at line 12294 of file expr.c.

References SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::nchildren, NULL, SCIP_ExprGraphNode::op, SCIP_EXPR_LINEAR, and SCIP_Real.

Referenced by SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_Real SCIPexprgraphGetNodeQuadraticConstant ( SCIP_EXPRGRAPHNODE node)

gives constant belonging to a SCIP_EXPR_QUADRATIC expression

Parameters
nodeexpression graph node

Definition at line 12306 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_QUADRATIC.

Referenced by SCIP_DECL_NONLINCONSUPGD().

SCIP_Real* SCIPexprgraphGetNodeQuadraticLinearCoefs ( SCIP_EXPRGRAPHNODE node)

gives linear coefficients belonging to a SCIP_EXPR_QUADRATIC expression, or NULL if all coefficients are 0.0

Parameters
nodeexpression graph node

Definition at line 12318 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_QUADRATIC.

Referenced by SCIP_DECL_NONLINCONSUPGD().

SCIP_QUADELEM* SCIPexprgraphGetNodeQuadraticQuadElements ( SCIP_EXPRGRAPHNODE node)

gives quadratic elements belonging to a SCIP_EXPR_QUADRATIC expression

Parameters
nodeexpression graph node

Definition at line 12330 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_QUADRATIC.

Referenced by SCIP_DECL_NONLINCONSUPGD().

int SCIPexprgraphGetNodeQuadraticNQuadElements ( SCIP_EXPRGRAPHNODE node)

gives number of quadratic elements belonging to a SCIP_EXPR_QUADRATIC expression

Parameters
nodeexpression graph node

Definition at line 12342 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_QUADRATIC.

Referenced by SCIP_DECL_NONLINCONSUPGD().

SCIP_EXPRDATA_MONOMIAL** SCIPexprgraphGetNodePolynomialMonomials ( SCIP_EXPRGRAPHNODE node)

gives the monomials belonging to a SCIP_EXPR_POLYNOMIAL expression

Parameters
nodeexpression graph node

Definition at line 12354 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_POLYNOMIAL.

Referenced by reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

int SCIPexprgraphGetNodePolynomialNMonomials ( SCIP_EXPRGRAPHNODE node)

gives the number of monomials belonging to a SCIP_EXPR_POLYNOMIAL expression

Parameters
nodeexpression graph node

Definition at line 12366 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_POLYNOMIAL.

Referenced by reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_Real SCIPexprgraphGetNodePolynomialConstant ( SCIP_EXPRGRAPHNODE node)

gives the constant belonging to a SCIP_EXPR_POLYNOMIAL expression

Parameters
nodeexpression graph node

Definition at line 12378 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraphNode::op, and SCIP_EXPR_POLYNOMIAL.

Referenced by reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_INTERVAL SCIPexprgraphGetNodeBounds ( SCIP_EXPRGRAPHNODE node)

gets bounds of a node in an expression graph

Parameters
nodeexpression graph node

Definition at line 12390 of file expr.c.

References SCIP_ExprGraphNode::bounds, and NULL.

Referenced by propagateBounds(), propagateBoundsCons(), propagateConstraintSides(), reformEnsureChildrenMinCurvature(), reformMonomial(), reformNode2Var(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_Real SCIPexprgraphGetNodeVal ( SCIP_EXPRGRAPHNODE node)

gets value of expression associated to node from last evaluation call

Parameters
nodeexpression graph node

Definition at line 12400 of file expr.c.

References NULL, and SCIP_ExprGraphNode::value.

Referenced by computeViolation(), reformMonomial(), reformNode2Var(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), SCIP_DECL_NONLINCONSUPGD(), and SCIPexprgraphSimplify().

SCIP_EXPRCURV SCIPexprgraphGetNodeCurvature ( SCIP_EXPRGRAPHNODE node)

gets curvature of expression associated to node from last curvature check call

Parameters
nodeexpression graph node

Definition at line 12410 of file expr.c.

References SCIP_ExprGraphNode::curv, and NULL.

Referenced by reformEnsureChildrenMinCurvature(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), and SCIP_DECL_NONLINCONSUPGD().

SCIP_RETCODE SCIPexprgraphCreateNodeLinear ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPHNODE **  node,
int  ncoefs,
SCIP_Real coefs,
SCIP_Real  constant 
)

creates an expression graph node for a linear expression

Parameters
blkmemblock memory
nodebuffer to store expression graph node
ncoefsnumber of coefficients
coefscoefficients of linear expression
constantconstant of linear expression

Definition at line 12503 of file expr.c.

References BMSallocBlockMemoryArray, BMScopyMemoryArray, exprgraphCreateNode(), NULL, SCIP_ALLOC, SCIP_CALL, SCIP_EXPR_LINEAR, SCIP_OKAY, and SCIP_Real.

Referenced by reformulate(), and SCIP_DECL_EXPRGRAPHNODEREFORM().

SCIP_RETCODE SCIPexprgraphCreateNodeQuadratic ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPHNODE **  node,
int  nchildren,
SCIP_Real lincoefs,
int  nquadelems,
SCIP_QUADELEM quadelems,
SCIP_Real  constant 
)

creates an expression graph node for a quadratic expression

Parameters
blkmemblock memory
nodebuffer to store expression graph node
nchildrennumber of children
lincoefslinear coefficients for children, or NULL
nquadelemsnumber of quadratic elements
quadelemsquadratic elements, or NULL if nquadelems == 0
constantconstant

Definition at line 12529 of file expr.c.

References exprgraphCreateNode(), NULL, quadraticdataCreate(), SCIP_CALL, SCIP_EXPR_QUADRATIC, and SCIP_OKAY.

Referenced by reformulate().

SCIP_RETCODE SCIPexprgraphCreateNodePolynomial ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPHNODE **  node,
int  nmonomials,
SCIP_EXPRDATA_MONOMIAL **  monomials,
SCIP_Real  constant,
SCIP_Bool  copymonomials 
)

creates an expression graph node for a polynomial expression

Parameters
blkmemblock memory
nodebuffer to store expression graph node
nmonomialsnumber of monomials
monomialsmonomials
constantconstant of polynomial
copymonomialswhether to copy monomials or to assume ownership

Definition at line 12555 of file expr.c.

References exprgraphCreateNode(), NULL, polynomialdataCreate(), SCIP_CALL, SCIP_EXPR_POLYNOMIAL, and SCIP_OKAY.

Referenced by reformulate().

SCIP_RETCODE SCIPexprgraphNodePolynomialAddMonomials ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPHNODE node,
int  nmonomials,
SCIP_EXPRDATA_MONOMIAL **  monomials,
SCIP_Bool  copymonomials 
)

adds monomials to an expression graph node that is a polynomial expression

Parameters
blkmemblock memory
nodestore expression graph node with polynomial operator
nmonomialsnumber of monomials
monomialsmonomials
copymonomialswhether to copy monomials or to assume ownership

Definition at line 12580 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, polynomialdataAddMonomials(), SCIP_CALL, SCIP_EXPR_POLYNOMIAL, SCIP_OKAY, and SCIPexprgraphGetNodeOperator().

SCIP_RETCODE SCIPexprgraphNodeSplitOffLinear ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE **  node,
int  linvarssize,
int *  nlinvars,
void **  linvars,
SCIP_Real lincoefs,
SCIP_Real constant 
)

given a node of an expression graph, splitup a linear part which variables are not used somewhere else in the same expression E.g., if the expression is 1 + x + y + y^2, one gets 1 + x and the node remains at y + y^2. If the node is a linear expression, it may be freed. If it is not linear, the node may change, i.e., the remaining nonlinear part may be stored in a new node. It is assumed that the user had captured the node. It is assumed that the expression graph has been simplified before.

Parameters
exprgraphexpression graph
nodeexpression graph node where to splitup linear part
linvarssizelength of linvars and lincoefs arrays
nlinvarsbuffer to store length of linear term that have been splitup
linvarsbuffer to store variables of linear part
lincoefsbuffer to store coefficients of linear part
constantbuffer to store constant part

Definition at line 12605 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSclearMemoryArray, BMSfreeBlockMemoryArray, BMSreallocBlockMemoryArray, SCIP_ExprData_Monomial::childidxs, SCIP_ExprGraphNode::children, SCIP_ExprData_Monomial::coef, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, SCIP_ExprData_Monomial::exponents, exprgraphCreateNode(), exprgraphNodeGetVarsUsage(), exprgraphNodeRemoveParent(), exprgraphNodeRemovePolynomialNullChildren(), FALSE, SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprData_Polynomial::monomials, SCIP_ExprGraphNode::nchildren, SCIP_ExprGraph::needvarboundprop, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::op, polynomialdataMergeMonomials(), SCIP_ExprData_Quadratic::quadelems, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_ABS, SCIP_EXPR_CONST, SCIP_EXPR_COS, SCIP_EXPR_DIV, SCIP_EXPR_EXP, SCIP_EXPR_INTPOWER, SCIP_EXPR_LINEAR, SCIP_EXPR_LOG, SCIP_EXPR_MAX, SCIP_EXPR_MIN, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_PRODUCT, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SIGN, SCIP_EXPR_SIGNPOWER, SCIP_EXPR_SIN, SCIP_EXPR_SQRT, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_EXPR_TAN, SCIP_EXPR_VARIDX, SCIP_EXPRBOUNDSTATUS_CHILDTIGHTENED, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIP_REAL_MAX, SCIPdebugMessage, SCIPexprgraphAddNode(), SCIPexprgraphCaptureNode(), SCIPexprgraphReleaseNode(), SCIPexpropGetName(), SCIPintervalSetEntire(), SCIP_ExprData_Quadratic::sorted, SCIP_ExprData_Polynomial::sorted, TRUE, and SCIP_ExprGraph::vars.

Referenced by splitOffLinearPart().

SCIP_RETCODE SCIPexprgraphMoveNodeParents ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE **  srcnode,
SCIP_EXPRGRAPHNODE targetnode 
)

moves parents from a one node to another node in other words, replaces the child srcnode by targetnode in all parents of srcnode srcnode may be freed, if not captured it is assumes that targetnode represents the same expression as srcnode

Parameters
exprgraphexpression graph
srcnodenode which parents to move
targetnodenode where to move parents to

Definition at line 13415 of file expr.c.

References SCIP_ExprGraphNode::depth, exprgraphMoveNode(), exprgraphNodeReplaceChild(), NULL, SCIP_CALL, and SCIP_OKAY.

Referenced by reformReplaceNode(), SCIPexprgraphReplaceVarByLinearSum(), and SCIPexprgraphSimplify().

SCIP_RETCODE SCIPexprgraphReleaseNode ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE **  node 
)

releases node, i.e., decreases number of uses node is freed if no parents and no other uses children are recursively released if they have no other parents nodes that are removed are also freed if node correspond to a variable, then the variable is removed from the expression graph similar for constants

Parameters
exprgraphexpression graph
nodeexpression graph node to release

Definition at line 13446 of file expr.c.

References SCIP_ExprGraph::blkmem, SCIP_ExprGraph::constnodes, SCIP_ExprGraph::constssorted, SCIP_ExprGraphNode::depth, SCIP_ExprGraph::depth, exprgraphFindConstNodePos(), exprgraphNodeRemoveParent(), exprgraphRemoveVar(), SCIP_ExprGraph::nconsts, SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, NULL, SCIP_ExprGraphNode::pos, SCIP_CALL, SCIP_EXPR_CONST, SCIP_EXPR_VARIDX, SCIP_OKAY, SCIPdebugMessage, SCIPexprgraphFreeNode(), and SCIPexpropGetName().

Referenced by exprgraphNodeRemoveParent(), reformReplaceNode(), SCIP_DECL_CONSDEACTIVE(), and SCIPexprgraphNodeSplitOffLinear().

void SCIPexprgraphFreeNode ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPHNODE **  node 
)

frees a node of an expression graph

Parameters
blkmemblock memory
nodepointer to expression graph node that should be freed

Definition at line 13536 of file expr.c.

References BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

Referenced by SCIPexprgraphReleaseNode().

void SCIPexprgraphEnableNode ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node 
)

enables a node and recursively all its children in an expression graph

Parameters
exprgraphexpression graph
nodeexpression graph node to enable

Definition at line 13561 of file expr.c.

References SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::depth, SCIP_ExprGraphNode::enabled, SCIP_ExprGraphNode::nchildren, SCIP_ExprGraph::needvarboundprop, NULL, SCIP_ExprGraphNode::pos, SCIP_REAL_MAX, SCIPdebugMessage, SCIPexprgraphEnableNode(), SCIPintervalSetEntire(), and TRUE.

Referenced by SCIP_DECL_CONSENABLE(), and SCIPexprgraphEnableNode().

void SCIPexprgraphDisableNode ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node 
)

disables a node and recursively all children which have no enabled parents in an expression graph

Parameters
exprgraphexpression graph
nodeexpression graph node to enable

Definition at line 13588 of file expr.c.

References SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::depth, SCIP_ExprGraphNode::enabled, FALSE, SCIP_ExprGraphNode::nchildren, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::nuses, SCIP_ExprGraphNode::parents, SCIP_ExprGraphNode::pos, SCIPdebugMessage, SCIPexprgraphDisableNode(), and TRUE.

Referenced by SCIP_DECL_CONSDISABLE(), and SCIPexprgraphDisableNode().

SCIP_Bool SCIPexprgraphHasNodeSibling ( SCIP_EXPRGRAPHNODE node)

returns whether the node has siblings in the expression graph

Parameters
nodeexpression graph node

Definition at line 13619 of file expr.c.

References FALSE, SCIP_ExprGraphNode::nchildren, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::parents, and TRUE.

Referenced by reformulate(), and SCIP_DECL_EXPRGRAPHNODEREFORM().

SCIP_Bool SCIPexprgraphAreAllNodeChildrenVars ( SCIP_EXPRGRAPHNODE node)

returns whether all children of an expression graph node are variable nodes gives TRUE for nodes without children

Parameters
nodeexpression graph node

Definition at line 13637 of file expr.c.

References SCIP_ExprGraphNode::children, FALSE, SCIP_ExprGraphNode::nchildren, NULL, SCIP_ExprGraphNode::op, SCIP_EXPR_VARIDX, and TRUE.

Referenced by SCIP_DECL_NONLINCONSUPGD().

SCIP_Bool SCIPexprgraphHasNodeNonlinearAncestor ( SCIP_EXPRGRAPHNODE node)
void SCIPexprgraphPrintNode ( SCIP_EXPRGRAPHNODE node,
SCIP_MESSAGEHDLR messagehdlr,
FILE *  file 
)

prints an expression graph node

Parameters
nodeexpression graph node
messagehdlrmessage handler
filefile to print to, or NULL for stdout

Definition at line 13690 of file expr.c.

References exprgraphPrintNodeExpression(), FALSE, and NULL.

Referenced by reformulate().

void SCIPexprgraphTightenNodeBounds ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
SCIP_INTERVAL  nodebounds,
SCIP_Real  minstrength,
SCIP_Bool cutoff 
)

tightens the bounds in a node of the graph preparation for reverse propagation sets bound status to SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENTRECENT if tightening is strong enough and not cutoff

Parameters
exprgraphexpression graph
nodenode in expression graph with no parents
nodeboundsnew bounds for node
minstrengthminimal required relative bound strengthening in a node to trigger a propagation into children nodes (set to negative value if propagation should always be triggered)
cutoffbuffer to store whether a node's bounds were propagated to an empty interval

Definition at line 13705 of file expr.c.

References SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::boundstatus, SCIP_ExprGraphNode::depth, SCIP_ExprGraphNode::enabled, FALSE, SCIP_Interval::inf, isLbBetter(), isUbBetter(), NULL, SCIP_ExprGraphNode::pos, SCIP_EXPRBOUNDSTATUS_CHILDRELAXED, SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENT, SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENTFORCE, SCIP_EXPRBOUNDSTATUS_TIGHTENEDBYPARENTRECENT, SCIPdebugMessage, SCIPdebugPrintf, SCIPintervalIntersect(), SCIPintervalIsEmpty(), SCIP_Interval::sup, and TRUE.

Referenced by exprgraphNodePropagateBounds(), propagateBoundsCons(), propagateConstraintSides(), and reformNode2Var().

SCIP_RETCODE SCIPexprgraphUpdateNodeBoundsCurvature ( SCIP_EXPRGRAPHNODE node,
SCIP_Real  infinity,
SCIP_Real  minstrength,
SCIP_Bool  clearreverseprop 
)
int SCIPexprgraphGetDepth ( SCIP_EXPRGRAPH exprgraph)

get current maximal depth of expression graph

Parameters
exprgraphexpression graph

Definition at line 13915 of file expr.c.

References SCIP_ExprGraph::depth, and NULL.

Referenced by reformulate().

int* SCIPexprgraphGetNNodes ( SCIP_EXPRGRAPH exprgraph)

gets array with number of nodes at each depth of expression graph

Parameters
exprgraphexpression graph

Definition at line 13925 of file expr.c.

References SCIP_ExprGraph::nnodes, and NULL.

Referenced by reformulate().

SCIP_EXPRGRAPHNODE*** SCIPexprgraphGetNodes ( SCIP_EXPRGRAPH exprgraph)

gets nodes of expression graph, one array per depth

Parameters
exprgraphexpression graph

Definition at line 13935 of file expr.c.

References SCIP_ExprGraph::nodes, and NULL.

Referenced by reformulate().

int SCIPexprgraphGetNVars ( SCIP_EXPRGRAPH exprgraph)

gets number of variables in expression graph

Parameters
exprgraphpointer to expression graph that should be freed

Definition at line 13945 of file expr.c.

References NULL, and SCIP_ExprGraph::nvars.

Referenced by computeViolations(), presolveUpgrade(), propagateBounds(), propagateConstraintSides(), reformulate(), removeFixedNonlinearVariables(), SCIP_DECL_CONSCHECK(), SCIP_DECL_CONSFREE(), SCIP_DECL_CONSGETNVARS(), and SCIP_DECL_CONSGETVARS().

void** SCIPexprgraphGetVars ( SCIP_EXPRGRAPH exprgraph)

gets array of variables in expression graph

Parameters
exprgraphpointer to expression graph that should be freed

Definition at line 13955 of file expr.c.

References NULL, and SCIP_ExprGraph::vars.

Referenced by computeViolations(), presolveUpgrade(), propagateBounds(), propagateConstraintSides(), reformulate(), removeFixedNonlinearVariables(), SCIP_DECL_CONSCHECK(), and SCIP_DECL_CONSGETVARS().

SCIP_EXPRGRAPHNODE** SCIPexprgraphGetVarNodes ( SCIP_EXPRGRAPH exprgraph)

gets array of expression graph nodes corresponding to variables

Parameters
exprgraphpointer to expression graph that should be freed

Definition at line 13965 of file expr.c.

References NULL, and SCIP_ExprGraph::varnodes.

Referenced by propagateBounds(), and propagateConstraintSides().

void SCIPexprgraphSetVarNodeValue ( SCIP_EXPRGRAPHNODE varnode,
SCIP_Real  value 
)

sets value for a single variable given as expression graph node

Parameters
varnodeexpression graph node corresponding to variable
valuenew value for variable

Definition at line 13975 of file expr.c.

References NULL, SCIP_ExprGraphNode::op, SCIP_EXPR_VARIDX, and SCIP_ExprGraphNode::value.

Referenced by reformMonomial(), reformNode2Var(), reformulate(), and SCIP_DECL_EXPRGRAPHNODEREFORM().

void SCIPexprgraphSetVarsBounds ( SCIP_EXPRGRAPH exprgraph,
SCIP_INTERVAL varbounds 
)

sets bounds for variables

Parameters
exprgraphexpression graph
varboundsnew bounds for variables

Definition at line 13987 of file expr.c.

References BMScopyMemoryArray, NULL, SCIP_ExprGraph::nvars, and SCIP_ExprGraph::varbounds.

void SCIPexprgraphSetVarBounds ( SCIP_EXPRGRAPH exprgraph,
void *  var,
SCIP_INTERVAL  varbounds 
)

sets bounds for a single variable

Parameters
exprgraphexpression graph
varvariable
varboundsnew bounds of variable

Definition at line 13999 of file expr.c.

References NULL, SCIPhashmapExists(), SCIPhashmapGetImage(), SCIP_ExprGraph::varbounds, SCIP_ExprGraph::varidxs, and SCIP_ExprGraph::vars.

void SCIPexprgraphSetVarNodeBounds ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE varnode,
SCIP_INTERVAL  varbounds 
)

sets bounds for a single variable given as expression graph node

Parameters
exprgraphexpression graph
varnodeexpression graph node corresponding to variable
varboundsnew bounds of variable

Definition at line 14019 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_ExprGraph::varbounds, and SCIP_ExprGraph::varnodes.

Referenced by SCIP_DECL_EXPRGRAPHVARADDED().

void SCIPexprgraphSetVarNodeLb ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE varnode,
SCIP_Real  lb 
)

sets lower bound for a single variable given as expression graph node

Parameters
exprgraphexpression graph
varnodeexpression graph node corresponding to variable
lbnew lower bound for variable

Definition at line 14039 of file expr.c.

References SCIP_ExprGraphNode::data, SCIP_Interval::inf, NULL, SCIP_ExprGraph::varbounds, and SCIP_ExprGraph::varnodes.

Referenced by SCIP_DECL_EVENTEXEC().

void SCIPexprgraphSetVarNodeUb ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE varnode,
SCIP_Real  ub 
)

sets upper bound for a single variable given as expression graph node

Parameters
exprgraphexpression graph
varnodeexpression graph node corresponding to variable
ubnew upper bound for variable

Definition at line 14059 of file expr.c.

References SCIP_ExprGraphNode::data, NULL, SCIP_Interval::sup, SCIP_ExprGraph::varbounds, and SCIP_ExprGraph::varnodes.

Referenced by SCIP_DECL_EVENTEXEC().

SCIP_INTERVAL* SCIPexprgraphGetVarsBounds ( SCIP_EXPRGRAPH exprgraph)

gets bounds that are stored for all variables

Parameters
exprgraphexpression graph

Definition at line 14079 of file expr.c.

References SCIP_ExprGraph::varbounds.

SCIP_RETCODE SCIPexprgraphCreate ( BMS_BLKMEM blkmem,
SCIP_EXPRGRAPH **  exprgraph,
int  varssizeinit,
int  depthinit,
SCIP_DECL_EXPRGRAPHVARADDED((*exprgraphvaradded))  ,
SCIP_DECL_EXPRGRAPHVARREMOVE((*exprgraphvarremove))  ,
SCIP_DECL_EXPRGRAPHVARCHGIDX((*exprgraphvarchgidx))  ,
void *  userdata 
)

creates an empty expression graph

Parameters
blkmemblock memory
exprgraphbuffer to store pointer to expression graph
varssizeinitminimal initial size for variables array, or -1 to choose automatically
depthinitminimal initial depth of expression graph, or -1 to choose automatically
userdatacallback method to invoke when a variable changes its index in the expression graph, or NULL if not needed user data to pass to callback functions

Definition at line 14087 of file expr.c.

References BMSallocBlockMemory, BMSclearMemory, ensureBlockMemoryArraySize3, exprgraphEnsureDepth(), MAX, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_OKAY, SCIPcalcHashtableSize(), SCIPhashmapCreate(), and TRUE.

Referenced by SCIPincludeConshdlrBivariate(), and SCIPincludeConshdlrNonlinear().

SCIP_RETCODE SCIPexprgraphFree ( SCIP_EXPRGRAPH **  exprgraph)

frees an expression graph

Parameters
exprgraphpointer to expression graph that should be freed

Definition at line 14126 of file expr.c.

References BMSfreeBlockMemory, BMSfreeBlockMemoryArray, BMSfreeBlockMemoryArrayNull, NULL, SCIP_OKAY, and SCIPhashmapFree().

Referenced by SCIP_DECL_CONSFREE().

SCIP_RETCODE SCIPexprgraphAddNode ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
int  mindepth,
int  nchildren,
SCIP_EXPRGRAPHNODE **  children 
)

adds an expression graph node to an expression graph expression graph assumes ownership of node children are notified about new parent depth will be chosen to be the maximum of mindepth and the depth of all children plus one

Parameters
exprgraphexpression graph
nodeexpression graph node to add
mindepthminimal depth in expression graph where to add node, e.g., 0 or smaller to choose automatically
nchildrennumber of children
childrenchildren nodes, or NULL if no children

Definition at line 14174 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSduplicateBlockMemoryArray, SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::boundstatus, SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, SCIP_ExprGraph::depth, ensureBlockMemoryArraySize, exprgraphEnsureDepth(), exprgraphNodeAddParent(), exprgraphNodeEval(), MAX, SCIP_ExprGraphNode::nchildren, SCIP_ExprGraph::needvarboundprop, SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, SCIP_ExprGraph::nodessize, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::pos, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_CONST, SCIP_EXPR_VARIDX, SCIP_EXPRBOUNDSTATUS_CHILDTIGHTENED, SCIP_EXPRBOUNDSTATUS_VALID, SCIP_INVALID, SCIP_OKAY, SCIP_REAL_MAX, SCIPintervalSet(), SCIPintervalSetEntire(), TRUE, and SCIP_ExprGraphNode::value.

Referenced by exprgraphAddExpr(), reformMonomial(), reformulate(), SCIP_DECL_EXPRGRAPHNODEREFORM(), SCIPexprgraphAddConst(), SCIPexprgraphAddExprtreeSum(), SCIPexprgraphAddVars(), and SCIPexprgraphNodeSplitOffLinear().

SCIP_RETCODE SCIPexprgraphAddConst ( SCIP_EXPRGRAPH exprgraph,
SCIP_Real  constant,
SCIP_EXPRGRAPHNODE **  constnode 
)

adds a constant to an expression graph, if not existing yet also already existing nodes are enabled

Parameters
exprgraphexpression graph
constantconstant to add
constnodebuffer to store pointer to expression graph node corresponding to constant

Definition at line 14329 of file expr.c.

References SCIP_ExprGraph::blkmem, SCIP_ExprGraph::constnodes, SCIP_ExprGraph::constssize, SCIP_ExprGraph::constssorted, SCIP_ExprGraphNode::depth, ensureBlockMemoryArraySize, exprgraphCreateNode(), SCIP_ExprGraph::nconsts, SCIP_ExprGraph::nnodes, NULL, SCIP_CALL, SCIP_EXPR_CONST, SCIP_OKAY, SCIPdebugMessage, SCIPexprgraphAddNode(), SCIPexprgraphFindConstNode(), and TRUE.

Referenced by exprgraphAddExpr().

SCIP_RETCODE SCIPexprgraphAddExprtreeSum ( SCIP_EXPRGRAPH exprgraph,
int  nexprtrees,
SCIP_EXPRTREE **  exprtrees,
SCIP_Real coefs,
SCIP_EXPRGRAPHNODE **  rootnode,
SCIP_Bool rootnodeisnew 
)

adds sum of expression trees into expression graph node will also be captured

Parameters
exprgraphexpression graph
nexprtreesnumber of expression trees to add
exprtreesexpression trees that should be added
coefscoefficients of expression trees, or NULL if all 1.0
rootnodebuffer to store expression graph node corresponding to root of expression tree
rootnodeisnewbuffer to indicate whether the node in *rootnode has been newly created for this expression tree (otherwise, expression tree was already in graph)

Definition at line 14373 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMScopyMemoryArray, BMSfreeBlockMemoryArray, SCIP_ExprGraphNode::depth, exprgraphAddExpr(), exprgraphCreateNode(), exprgraphFindParentByOperator(), FALSE, NULL, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_LINEAR, SCIP_EXPR_MINUS, SCIP_EXPR_PLUS, SCIP_EXPR_SUM, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPexprgraphAddNode(), SCIPexprgraphCaptureNode(), and TRUE.

Referenced by SCIP_DECL_CONSACTIVE().

SCIP_RETCODE SCIPexprgraphReplaceVarByLinearSum ( SCIP_EXPRGRAPH exprgraph,
void *  var,
int  ncoefs,
SCIP_Real coefs,
void **  vars,
SCIP_Real  constant 
)

replaces variable in expression graph by a linear sum of variables variables will be added if not in the graph yet

Parameters
exprgraphexpression graph
varvariable to replace
ncoefsnumber of coefficients in linear term
coefscoefficients in linear term, or NULL if ncoefs == 0
varsvariables in linear term
constantconstant offset

Definition at line 14512 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMScopyMemoryArray, SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::boundstatus, SCIP_ExprGraphNode::children, SCIP_ExprGraph::constnodes, SCIP_ExprGraph::constssize, SCIP_ExprGraph::constssorted, SCIP_ExprGraphNode::data, ensureBlockMemoryArraySize, ensureBlockMemoryArraySize3, exprgraphMoveNode(), exprgraphNodeAddParent(), exprgraphRemoveVar(), FALSE, SCIP_ExprGraphNode::nchildren, SCIP_ExprGraph::nconsts, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::nuses, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::parents, SCIP_ALLOC, SCIP_CALL, SCIP_EXPR_CONST, SCIP_EXPR_LINEAR, SCIP_EXPR_SUM, SCIP_EXPRBOUNDSTATUS_CHILDRELAXED, SCIP_EXPRBOUNDSTATUS_VALID, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIP_REAL_MAX, SCIPdebugMessage, SCIPexprgraphAddVars(), SCIPexprgraphFindConstNode(), SCIPexprgraphFindVarNode(), SCIPexprgraphMoveNodeParents(), SCIPhashmapExists(), SCIPhashmapGetImage(), SCIPhashmapInsert(), SCIPintervalSet(), SCIPintervalSetEntire(), SCIP_ExprGraphNode::simplified, SCIP_ExprGraph::userdata, SCIP_ExprGraphNode::value, SCIP_ExprGraph::varbounds, SCIP_ExprGraph::varidxs, SCIP_ExprGraph::varnodes, SCIP_ExprGraph::vars, and SCIP_ExprGraph::varssize.

Referenced by removeFixedNonlinearVariables().

SCIP_Bool SCIPexprgraphFindVarNode ( SCIP_EXPRGRAPH exprgraph,
void *  var,
SCIP_EXPRGRAPHNODE **  varnode 
)

finds expression graph node corresponding to a variable

Parameters
exprgraphexpression graph
varvariable to search for
varnodebuffer to store node corresponding to variable, if found, or NULL if not found

Definition at line 14684 of file expr.c.

References FALSE, NULL, SCIP_EXPR_VARIDX, SCIPhashmapExists(), SCIPhashmapGetImage(), TRUE, SCIP_ExprGraph::varidxs, and SCIP_ExprGraph::varnodes.

Referenced by SCIPexprgraphAddVars(), and SCIPexprgraphReplaceVarByLinearSum().

SCIP_Bool SCIPexprgraphFindConstNode ( SCIP_EXPRGRAPH exprgraph,
SCIP_Real  constant,
SCIP_EXPRGRAPHNODE **  constnode 
)

finds expression graph node corresponding to a constant

Parameters
exprgraphexpression graph
constantconstant to search for
constnodebuffer to store node corresponding to constant, if found, or NULL if not found

Definition at line 14713 of file expr.c.

References SCIP_ExprGraph::constnodes, SCIP_ExprGraph::constssorted, SCIP_ExprGraphNode::data, exprgraphSortConstNodes(), FALSE, SCIP_ExprGraph::nconsts, NULL, SCIP_EXPR_CONST, and TRUE.

Referenced by SCIPexprgraphAddConst(), SCIPexprgraphReplaceVarByLinearSum(), and SCIPexprgraphSimplify().

SCIP_RETCODE SCIPexprgraphPrintDot ( SCIP_EXPRGRAPH exprgraph,
SCIP_MESSAGEHDLR messagehdlr,
FILE *  file,
const char **  varnames 
)

prints an expression graph in dot format

Parameters
exprgraphexpression graph
messagehdlrmessage handler
filefile to print to, or NULL for stdout
varnamesvariable names, or NULL for generic names

Definition at line 14761 of file expr.c.

References SCIP_ExprGraph::depth, exprgraphPrintNodeDot(), SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, SCIP_ExprGraphNode::nparents, NULL, SCIP_OKAY, and SCIPmessageFPrintInfo().

Referenced by propagateBounds(), propagateConstraintSides(), SCIP_DECL_CONSINIT(), and SCIPexprgraphSimplify().

SCIP_RETCODE SCIPexprgraphEval ( SCIP_EXPRGRAPH exprgraph,
SCIP_Real varvals 
)

evaluates nodes of expression graph for given values of variables

Parameters
exprgraphexpression graph
varvalsvalues for variables

Definition at line 14810 of file expr.c.

References SCIP_ExprGraph::depth, exprgraphNodeEval(), SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, NULL, SCIP_ExprGraph::nvars, SCIP_CALL, and SCIP_OKAY.

Referenced by computeViolations(), presolveUpgrade(), reformulate(), SCIP_DECL_CONSCHECK(), and SCIPexprgraphSimplify().

SCIP_RETCODE SCIPexprgraphPropagateVarBounds ( SCIP_EXPRGRAPH exprgraph,
SCIP_Real  infinity,
SCIP_Bool  clearreverseprop,
SCIP_Bool domainerror 
)

propagates bound changes in variables forward through the expression graph

Parameters
exprgraphexpression graph
infinityvalue for infinity in interval arithmetics
clearreversepropwhether to reset bound tightenings from reverse propagation
domainerrorbuffer to store whether a node with empty bounds has been found, propagation is interrupted in this case

Definition at line 14831 of file expr.c.

References SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::depth, SCIP_ExprGraph::depth, exprgraphNodeUpdateBounds(), exprgraphUpdateVarNodeBounds(), FALSE, SCIP_ExprGraph::needvarboundprop, SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, NULL, SCIP_ExprGraphNode::pos, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPdebugMessage, SCIPintervalIsEmpty(), and TRUE.

Referenced by propagateBounds(), reformulate(), and SCIP_DECL_CONSPRESOL().

void SCIPexprgraphPropagateNodeBounds ( SCIP_EXPRGRAPH exprgraph,
SCIP_Real  infinity,
SCIP_Real  minstrength,
SCIP_Bool cutoff 
)

propagates bound changes in nodes backward through the graph new bounds are not stored in varbounds, but only in nodes corresponding to variables NOTE: it is assumed that SCIPexprgraphPropagateVarBounds was called before if variable bounds were relaxed

Parameters
exprgraphexpression graph
infinityvalue for infinity in interval arithmetics
minstrengthminimal required relative bound strengthening in a node to trigger a propagation into children nodes
cutoffbuffer to store whether a node's bounds were propagated to an empty interval

Definition at line 14884 of file expr.c.

References SCIP_ExprGraph::depth, exprgraphNodePropagateBounds(), FALSE, SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, and NULL.

Referenced by propagateBounds(), and propagateConstraintSides().

SCIP_RETCODE SCIPexprgraphCheckCurvature ( SCIP_EXPRGRAPH exprgraph,
SCIP_Real  infinity,
SCIP_Bool  clearreverseprop 
)

updates curvature information in expression graph nodes w.r.t. currently stored variable bounds implies update of bounds in expression graph

Parameters
exprgraphexpression graph
infinityvalue for infinity in interval arithmetics
clearreversepropwhether to reset bound tightenings from reverse propagation

Definition at line 14915 of file expr.c.

References SCIP_ExprGraphNode::bounds, SCIP_ExprGraphNode::curv, SCIP_ExprGraph::depth, exprgraphUpdateVarNodeBounds(), SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, NULL, SCIP_Bool, SCIP_CALL, SCIP_EXPRCURV_LINEAR, SCIP_OKAY, SCIPerrorMessage, SCIPexprgraphUpdateNodeBoundsCurvature(), and SCIPintervalIsEmpty().

SCIP_RETCODE SCIPexprgraphSimplify ( SCIP_EXPRGRAPH exprgraph,
SCIP_MESSAGEHDLR messagehdlr,
SCIP_Real  eps,
int  maxexpansionexponent,
SCIP_Bool havechange,
SCIP_Bool domainerror 
)

aims at simplifying an expression graph a domain error can occur when variables were fixed to values for which a parent expression is not defined (e.g., 0^(-1) or log(-1))

Parameters
exprgraphexpression graph
messagehdlrmessage handler
epsthreshold, under which positive values are treat as 0
maxexpansionexponentmaximal exponent for which we still expand non-monomial polynomials
havechangebuffer to indicate whether the graph has been modified
domainerrorbuffer to indicate whether a domain error has been encountered, i.e., some expressions turned into NaN

Definition at line 14957 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocMemoryArray, BMSfreeBlockMemoryArrayNull, BMSfreeMemoryArray, SCIP_ExprGraphNode::children, SCIP_ExprGraphNode::data, SCIP_ExprGraph::depth, ensureBlockMemoryArraySize, EPSZ, exprgraphMoveNode(), exprgraphNodeEval(), exprgraphNodeReplaceChild(), exprgraphNodeSimplify(), exprUnconvertPolynomial(), FALSE, SCIP_ExprGraphNode::nchildren, SCIP_ExprGraph::nnodes, SCIP_ExprGraph::nodes, SCIP_ExprGraphNode::nparents, NULL, SCIP_ExprGraphNode::nuses, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::parents, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_EXPR_CONST, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_SUM, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPexprgraphEval(), SCIPexprgraphFindConstNode(), SCIPexprgraphGetNodeVal(), SCIPexprgraphMoveNodeParents(), SCIPexprgraphPrintDot(), SCIPgetRandomReal(), SCIPhashmapCreate(), SCIPhashmapExists(), SCIPhashmapFree(), SCIPhashmapGetImage(), SCIPhashmapInsert(), SCIPrelDiff(), SCIP_ExprGraphNode::simplified, TRUE, and SCIP_ExprGraphNode::value.

Referenced by SCIP_DECL_CONSEXITPRE(), and SCIP_DECL_CONSPRESOL().

SCIP_RETCODE SCIPexprgraphGetTree ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE rootnode,
SCIP_EXPRTREE **  exprtree 
)

creates an expression tree from a given node in an expression graph

Parameters
exprgraphexpression graph
rootnodeexpression graph node that should represent root of expression tree
exprtreebuffer to store pointer to created expression tree

Definition at line 15216 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, SCIP_ExprGraphNode::depth, exprgraphNodeCreateExpr(), NULL, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::pos, SCIP_ALLOC, SCIP_CALL, SCIP_OKAY, SCIPexprtreeCreate(), and SCIP_ExprGraph::vars.

Referenced by createNlRow(), SCIP_DECL_CONSCOPY(), SCIP_DECL_CONSDEACTIVE(), SCIP_DECL_CONSPRINT(), SCIPexprgraphGetSeparableTrees(), SCIPexprgraphGetSumTrees(), and SCIPwriteGms().

SCIP_RETCODE SCIPexprgraphGetSeparableTrees ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
int  exprtreessize,
int *  nexprtrees,
SCIP_EXPRTREE **  exprtrees,
SCIP_Real exprtreecoefs 
)

creates a sum of expression trees with pairwise disjoint variables from a given node in an expression graph Giving SCIPexprgraphGetNodeNChildren() for exprtreesize is always sufficient.

Parameters
exprgraphexpression graph
nodeexpression graph node which represents expression to get
exprtreessizelength of exprtrees and exprtreecoefs arrays, need to be at least one
nexprtreesbuffer to store number of expression trees
exprtreesarray where to store expression trees
exprtreecoefsarray where to store coefficients of expression trees

Definition at line 15268 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, BMSfreeBlockMemoryArrayNull, SCIP_ExprData_Monomial::childidxs, SCIP_ExprGraphNode::children, SCIP_ExprData_Monomial::coef, SCIP_QuadElement::coef, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, SCIP_ExprData_Monomial::exponents, exprgraphNodeCheckSeparabilityComponent(), exprgraphNodeCreateExpr(), FALSE, SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_ExprData_Quadratic::lincoefs, MAX, MIN, SCIP_ExprData_Polynomial::monomials, SCIP_ExprGraphNode::nchildren, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::pos, SCIP_ExprData_Quadratic::quadelems, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_ERROR, SCIP_EXPR_CONST, SCIP_EXPR_LINEAR, SCIP_EXPR_MINUS, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_QUADRATIC, SCIP_EXPR_SUM, SCIP_OKAY, SCIP_Real, SCIPerrorMessage, SCIPexprCreate(), SCIPexprCreateLinear(), SCIPexprCreateMonomial(), SCIPexprCreatePolynomial(), SCIPexprCreateQuadratic(), SCIPexprgraphGetTree(), SCIPexprtreeCreate(), TRUE, SCIP_ExprTree::vars, and SCIP_ExprGraph::vars.

void SCIPexprgraphGetSubtreeVarsUsage ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
int *  varsusage 
)

returns how often expression graph variables are used in a subtree of the expression graph

Parameters
exprgraphexpression graph
noderoot node of expression graph subtree
varsusagearray where to count usage of variables, length must be at least the number of variables in the graph

Definition at line 15701 of file expr.c.

References BMSclearMemoryArray, exprgraphNodeGetVarsUsage(), NULL, and SCIP_ExprGraph::nvars.

Referenced by SCIP_DECL_CONSGETNVARS(), and SCIP_DECL_CONSGETVARS().

int SCIPexprgraphGetSumTreesNSummands ( SCIP_EXPRGRAPHNODE node)

gives the number of summands which the expression of an expression graph node consists of

Parameters
nodeexpression graph node

Definition at line 15717 of file expr.c.

References SCIP_ExprGraphNode::data, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprGraphNode::nchildren, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprGraphNode::op, SCIP_EXPR_LINEAR, SCIP_EXPR_MINUS, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_QUADRATIC, and SCIP_EXPR_SUM.

Referenced by SCIP_DECL_CONSEXITPRE().

SCIP_RETCODE SCIPexprgraphGetSumTrees ( SCIP_EXPRGRAPH exprgraph,
SCIP_EXPRGRAPHNODE node,
int  exprtreessize,
int *  nexprtrees,
SCIP_EXPRTREE **  exprtrees,
SCIP_Real exprtreecoefs 
)

creates a sum of expression trees, possibly sharing variables, from a given node in an expression graph

Parameters
exprgraphexpression graph
nodeexpression graph node which represents expression to get
exprtreessizelength of exprtrees and exptreecoefs arrays, should be at least SCIPexprgraphGetSumTreesNSummands()
nexprtreesbuffer to store number of expression trees
exprtreesarray where to store expression trees
exprtreecoefsarray where to store coefficients of expression trees

Definition at line 15753 of file expr.c.

References SCIP_ExprGraph::blkmem, BMSallocBlockMemoryArray, BMSfreeBlockMemoryArray, SCIP_ExprData_Monomial::childidxs, SCIP_ExprGraphNode::children, SCIP_ExprData_Monomial::coef, SCIP_QuadElement::coef, SCIP_ExprData_Quadratic::constant, SCIP_ExprData_Polynomial::constant, SCIP_ExprGraphNode::data, SCIP_ExprGraphNode::depth, EPSISINT, SCIP_ExprData_Monomial::exponents, exprgraphNodeCreateExpr(), FALSE, SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, SCIP_ExprData_Quadratic::lincoefs, SCIP_ExprData_Polynomial::monomials, SCIP_ExprGraphNode::nchildren, SCIP_ExprData_Monomial::nfactors, SCIP_ExprData_Polynomial::nmonomials, SCIP_ExprData_Quadratic::nquadelems, NULL, SCIP_ExprGraph::nvars, SCIP_ExprGraphNode::op, SCIP_ExprGraphNode::pos, SCIP_ExprData_Quadratic::quadelems, SCIP_ALLOC, SCIP_CALL, SCIP_ERROR, SCIP_EXPR_CONST, SCIP_EXPR_INTPOWER, SCIP_EXPR_LINEAR, SCIP_EXPR_MINUS, SCIP_EXPR_MUL, SCIP_EXPR_PLUS, SCIP_EXPR_POLYNOMIAL, SCIP_EXPR_QUADRATIC, SCIP_EXPR_REALPOWER, SCIP_EXPR_SQUARE, SCIP_EXPR_SUM, SCIP_OKAY, SCIP_Real, SCIPerrorMessage, SCIPexprCreate(), SCIPexprCreateMonomial(), SCIPexprCreatePolynomial(), SCIPexprgraphGetTree(), SCIPexprtreeAddExpr(), SCIPexprtreeCreate(), SCIP_ExprTree::vars, and SCIP_ExprGraph::vars.

Referenced by SCIP_DECL_CONSEXITPRE().

Variable Documentation

const char* curvnames[4]
static
Initial value:
=
{
"unknown",
"convex",
"concave",
"linear"
}

curvature names as strings

Definition at line 173 of file expr.c.

Referenced by SCIPexprcurvGetName().

struct exprOpTableElement exprOpTable[]
static

table containing for each operand the name, the number of children, and some evaluation functions

Definition at line 3083 of file expr.c.