Scippy

SCIP

Solving Constraint Integer Programs

exprinterpret.h File Reference

Detailed Description

methods to interpret (evaluate) an expression tree "fast"

Author
Stefan Vigerske
Thorsten Gellermann Realized similar to LPI: one implementation of an interpreter is linked in.

Definition in file exprinterpret.h.

Go to the source code of this file.

Functions

const char * SCIPexprintGetName (void)
 
const char * SCIPexprintGetDesc (void)
 
SCIP_EXPRINTCAPABILITY SCIPexprintGetCapability (void)
 
SCIP_RETCODE SCIPexprintCreate (BMS_BLKMEM *blkmem, SCIP_EXPRINT **exprint)
 
SCIP_RETCODE SCIPexprintFree (SCIP_EXPRINT **exprint)
 
SCIP_RETCODE SCIPexprintCompile (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree)
 
SCIP_EXPRINTCAPABILITY SCIPexprintGetExprtreeCapability (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree)
 
SCIP_RETCODE SCIPexprintFreeData (SCIP_EXPRINTDATA **interpreterdata)
 
SCIP_RETCODE SCIPexprintNewParametrization (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree)
 
SCIP_RETCODE SCIPexprintEval (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree, SCIP_Real *varvals, SCIP_Real *val)
 
SCIP_RETCODE SCIPexprintEvalInt (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree, SCIP_Real infinity, SCIP_INTERVAL *varvals, SCIP_INTERVAL *val)
 
SCIP_RETCODE SCIPexprintGrad (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree, SCIP_Real *varvals, SCIP_Bool new_varvals, SCIP_Real *val, SCIP_Real *gradient)
 
SCIP_RETCODE SCIPexprintGradInt (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree, SCIP_Real infinity, SCIP_INTERVAL *varvals, SCIP_Bool new_varvals, SCIP_INTERVAL *val, SCIP_INTERVAL *gradient)
 
SCIP_RETCODE SCIPexprintHessianSparsityDense (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree, SCIP_Real *varvals, SCIP_Bool *sparsity)
 
SCIP_RETCODE SCIPexprintHessianDense (SCIP_EXPRINT *exprint, SCIP_EXPRTREE *tree, SCIP_Real *varvals, SCIP_Bool new_varvals, SCIP_Real *val, SCIP_Real *hessian)
 

Function Documentation

const char* SCIPexprintGetName ( void  )

gets name and version of expression interpreter

Definition at line 2157 of file exprinterpret_cppad.cpp.

Referenced by SCIP_DECL_CONSINIT(), SCIPcreate(), and SCIPnlpiOracleCreate().

const char* SCIPexprintGetDesc ( void  )

gets descriptive text of expression interpreter

Definition at line 2163 of file exprinterpret_cppad.cpp.

Referenced by SCIPcreate().

SCIP_RETCODE SCIPexprintCreate ( BMS_BLKMEM blkmem,
SCIP_EXPRINT **  exprint 
)

creates an expression interpreter object

Parameters
blkmemblock memory data structure
exprintbuffer to store pointer to expression interpreter

Definition at line 2179 of file exprinterpret_cppad.cpp.

References BMSallocMemory, NULL, SCIP_ALLOC, SCIP_NOMEMORY, SCIP_OKAY, and SCIPdebugMessage.

Referenced by createCoveringProblem(), SCIPincludeConshdlrBivariate(), SCIPincludeConshdlrNonlinear(), and SCIPnlpiOracleCreate().

SCIP_RETCODE SCIPexprintFree ( SCIP_EXPRINT **  exprint)

frees an expression interpreter object

Parameters
exprintexpression interpreter that should be freed

Definition at line 2196 of file exprinterpret_cppad.cpp.

References BMSfreeMemory, NULL, and SCIP_OKAY.

Referenced by createCoveringProblem(), SCIP_DECL_CONSFREE(), and SCIPnlpiOracleFree().

SCIP_EXPRINTCAPABILITY SCIPexprintGetExprtreeCapability ( SCIP_EXPRINT exprint,
SCIP_EXPRTREE tree 
)

gives the capability to evaluate an expression by the expression interpreter

In cases of user-given expressions, higher order derivatives may not be available for the user-expression, even if the expression interpreter could handle these. This method allows to recognize that, e.g., the Hessian for an expression is not available because it contains a user expression that does not provide Hessians.

Parameters
exprintinterpreter data structure
treeexpression tree

Definition at line 2264 of file exprinterpret_cppad.cpp.

References NULL, SCIP_EXPRINTCAPABILITY_NONE, and SCIPexprtreeGetInterpreterData().

Referenced by SCIPnlpiOracleGetEvalCapability().

SCIP_RETCODE SCIPexprintFreeData ( SCIP_EXPRINTDATA **  interpreterdata)

frees interpreter data

Parameters
interpreterdatainterpreter data that should freed

Definition at line 2278 of file exprinterpret_cppad.cpp.

References NULL, SCIP_OKAY, and SCIPexprFreeDeep().

Referenced by SCIPexprtreeFreeInterpreterData().

SCIP_RETCODE SCIPexprintNewParametrization ( SCIP_EXPRINT exprint,
SCIP_EXPRTREE tree 
)

notify expression interpreter that a new parameterization is used this probably causes retaping by AD algorithms

notify expression interpreter that a new parameterization is used

This probably causes retaping by AD algorithms.

Parameters
exprintinterpreter data structure
treeexpression tree

Definition at line 2298 of file exprinterpret_cppad.cpp.

References NULL, SCIP_OKAY, and SCIPexprtreeGetInterpreterData().

Referenced by generateConvexConcaveUnderestimator().

SCIP_RETCODE SCIPexprintEvalInt ( SCIP_EXPRINT exprint,
SCIP_EXPRTREE tree,
SCIP_Real  infinity,
SCIP_INTERVAL varvals,
SCIP_INTERVAL val 
)

evaluates an expression tree on intervals

Parameters
exprintinterpreter data structure
treeexpression tree
infinityvalue for infinity
varvalsinterval values of variables
valbuffer to store interval value of expression

Definition at line 2385 of file exprinterpret_cppad.cpp.

References eval(), NULL, SCIP_CALL, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIPerrorMessage, SCIPexprtreeEvalInt(), SCIPexprtreeGetInterpreterData(), SCIPexprtreeGetNVars(), SCIPexprtreeGetParamVals(), and SCIPexprtreeGetRoot().

Referenced by SCIPexprintGradInt().

SCIP_RETCODE SCIPexprintGrad ( SCIP_EXPRINT exprint,
SCIP_EXPRTREE tree,
SCIP_Real varvals,
SCIP_Bool  new_varvals,
SCIP_Real val,
SCIP_Real gradient 
)

computes value and gradient of an expression tree

Parameters
exprintinterpreter data structure
treeexpression tree
varvalsvalues of variables, can be NULL if new_varvals is FALSE
new_varvalshave variable values changed since last call to a point evaluation routine?
valbuffer to store expression value
gradientbuffer to store expression gradient, need to have length at least SCIPexprtreeGetNVars(tree)

Definition at line 2451 of file exprinterpret_cppad.cpp.

References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIPerrorMessage, SCIPexprintEval(), SCIPexprtreeGetInterpreterData(), and SCIPexprtreeGetNVars().

Referenced by addLinearization(), computeViolation(), evalFunctionGradient(), generate1ConvexIndefiniteUnderestimatorAtBoundary(), generate1ConvexIndefiniteUnderestimatorInTheInteriorPatternA(), generate1ConvexIndefiniteUnderestimatorInTheInteriorPatternB(), generateConvexConcaveUnderestimator(), generateLinearizationCut(), generateOrthogonal_lx_ly_Underestimator(), generateOrthogonal_lx_uy_Underestimator(), generateUnderestimatorParallelYFacets(), getGradientMaxElement(), lifting(), SCIPnlpiOracleEvalJacobian(), and solveDerivativeEquation().

SCIP_RETCODE SCIPexprintGradInt ( SCIP_EXPRINT exprint,
SCIP_EXPRTREE tree,
SCIP_Real  infinity,
SCIP_INTERVAL varvals,
SCIP_Bool  new_varvals,
SCIP_INTERVAL val,
SCIP_INTERVAL gradient 
)

computes interval value and interval gradient of an expression tree

Parameters
exprintinterpreter data structure
treeexpression tree
infinityvalue for infinity
varvalsinterval values of variables, can be NULL if new_varvals is FALSE
new_varvalshave variable interval values changed since last call to an interval evaluation routine?
valbuffer to store expression interval value
gradientbuffer to store expression interval gradient, need to have length at least SCIPexprtreeGetNVars(tree)

Definition at line 2498 of file exprinterpret_cppad.cpp.

References NULL, SCIP_CALL, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIPerrorMessage, SCIPexprintEvalInt(), SCIPexprtreeGetInterpreterData(), and SCIPexprtreeGetNVars().

Referenced by addIntervalGradientEstimator().

SCIP_RETCODE SCIPexprintHessianSparsityDense ( SCIP_EXPRINT exprint,
SCIP_EXPRTREE tree,
SCIP_Real varvals,
SCIP_Bool sparsity 
)

gives sparsity pattern of hessian

NOTE: this function might be replaced later by something nicer. Since the AD code might need to do a forward sweep, you should pass variable values in here.

gives sparsity pattern of hessian NOTE: this function might be replaced later by something nicer Since the AD code might need to do a forward sweep, you should pass variable values in here.

Parameters
exprintinterpreter data structure
treeexpression tree
varvalsvalues of variables
sparsitybuffer to store sparsity pattern of Hessian, sparsity[i+n*j] indicates whether entry (i,j) is nonzero in the hessian

Definition at line 2548 of file exprinterpret_cppad.cpp.

References NULL, SCIP_CALL, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIP_Real, SCIPdebugMessage, SCIPerrorMessage, SCIPexprintEval(), SCIPexprtreeGetInterpreterData(), SCIPexprtreeGetNVars(), and TRUE.

Referenced by hessLagSparsitySetNzFlagForExprtree(), initSepaData(), and processNlRow().

SCIP_RETCODE SCIPexprintHessianDense ( SCIP_EXPRINT exprint,
SCIP_EXPRTREE tree,
SCIP_Real varvals,
SCIP_Bool  new_varvals,
SCIP_Real val,
SCIP_Real hessian 
)

computes value and dense hessian of an expression tree

The full hessian is computed (lower left and upper right triangle).

computes value and dense hessian of an expression tree the full hessian is computed (lower left and upper right triangle)

Parameters
exprintinterpreter data structure
treeexpression tree
varvalsvalues of variables, can be NULL if new_varvals is FALSE
new_varvalshave variable values changed since last call to an evaluation routine?
valbuffer to store function value
hessianbuffer to store hessian values, need to have size at least n*n

Definition at line 2621 of file exprinterpret_cppad.cpp.

References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIPerrorMessage, SCIPexprintEval(), SCIPexprtreeGetInterpreterData(), and SCIPexprtreeGetNVars().

Referenced by generate1ConvexIndefiniteUnderestimator(), hessLagAddExprtree(), and solveDerivativeEquation().