Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

quotient nonlinear handler

Author
Benjamin Mueller
Fabian Wegscheider

Definition in file nlhdlr_quotient.c.

#include <string.h>
#include "scip/nlhdlr_quotient.h"
#include "scip/cons_nonlinear.h"
#include "scip/pub_misc_rowprep.h"
#include "scip/nlhdlr.h"
#include "scip/nlhdlr_bilinear.h"

Go to the source code of this file.

Macros

#define NLHDLR_NAME   "quotient"
 
#define NLHDLR_DESC   "nonlinear handler for quotient expressions"
 
#define NLHDLR_DETECTPRIORITY   20
 
#define NLHDLR_ENFOPRIORITY   20
 
#define infty2infty(infty1, infty2, val)   ((val) >= (infty1) ? (infty2) : (val))
 

Functions

static SCIP_RETCODE exprdataCreate (SCIP *scip, SCIP_NLHDLREXPRDATA **nlhdlrexprdata, SCIP_EXPR *numexpr, SCIP_Real numcoef, SCIP_Real numconst, SCIP_EXPR *denomexpr, SCIP_Real denomcoef, SCIP_Real denomconst, SCIP_Real constant)
 
static SCIP_RETCODE exprdataFree (SCIP *scip, SCIP_NLHDLREXPRDATA **nlhdlrexprdata)
 
static void transformExpr (SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR **target, SCIP_Real *coef, SCIP_Real *constant)
 
static SCIP_RETCODE detectExpr (SCIP *scip, SCIP_EXPR *expr, SCIP_NLHDLREXPRDATA **nlhdlrexprdata, SCIP_Bool *success)
 
static SCIP_INTERVAL intEvalQuotient (SCIP *scip, SCIP_INTERVAL bnds, SCIP_Real a, SCIP_Real b, SCIP_Real c, SCIP_Real d, SCIP_Real e)
 
static SCIP_INTERVAL reversepropQuotient (SCIP_INTERVAL bnds, SCIP_Real a, SCIP_Real b, SCIP_Real c, SCIP_Real d, SCIP_Real e)
 
static SCIP_RETCODE createRowprep (SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_VAR **vars, SCIP_Real *coefs, SCIP_Real constant, int nlinvars)
 
static SCIP_RETCODE estimateUnivariate (SCIP *scip, SCIP_Real lbx, SCIP_Real ubx, SCIP_Real gllbx, SCIP_Real glubx, SCIP_Real solx, SCIP_Real a, SCIP_Real b, SCIP_Real c, SCIP_Real d, SCIP_Real e, SCIP_Real *coef, SCIP_Real *constant, SCIP_Bool overestimate, SCIP_Bool *local, SCIP_Bool *branchinguseful, SCIP_Bool *success)
 
static SCIP_RETCODE estimateUnivariateQuotient (SCIP *scip, SCIP_SOL *sol, SCIP_EXPR *xexpr, SCIP_Real a, SCIP_Real b, SCIP_Real c, SCIP_Real d, SCIP_Real e, SCIP_Bool overestimate, SCIP_ROWPREP *rowprep, SCIP_Bool *branchinguseful, SCIP_Bool *success)
 
static void hcGradCut (SCIP_Real lbx, SCIP_Real ubx, SCIP_Real solx, SCIP_Real soly, SCIP_Real *coefx, SCIP_Real *coefy, SCIP_Real *constant)
 
static SCIP_RETCODE estimateBivariate (SCIP *scip, SCIP_Real lbx, SCIP_Real ubx, SCIP_Real lby, SCIP_Real uby, SCIP_Real lbz, SCIP_Real ubz, SCIP_Real solx, SCIP_Real soly, SCIP_Real solz, SCIP_Bool overestimate, SCIP_Real *coefx, SCIP_Real *coefy, SCIP_Real *constant, SCIP_Bool *branchingusefulx, SCIP_Bool *branchingusefuly, SCIP_Bool *success)
 
static SCIP_RETCODE estimateBivariateQuotient (SCIP *scip, SCIP_EXPR *xexpr, SCIP_EXPR *yexpr, SCIP_VAR *auxvar, SCIP_SOL *sol, SCIP_Real a, SCIP_Real b, SCIP_Real c, SCIP_Real d, SCIP_Real e, SCIP_Bool overestimate, SCIP_ROWPREP *rowprep, SCIP_Bool *branchingusefulx, SCIP_Bool *branchingusefuly, SCIP_Bool *success)
 
static SCIP_DECL_NLHDLRCOPYHDLR (nlhdlrCopyhdlrQuotient)
 
static SCIP_DECL_NLHDLRFREEEXPRDATA (nlhdlrFreeExprDataQuotient)
 
static SCIP_DECL_NLHDLRDETECT (nlhdlrDetectQuotient)
 
static SCIP_DECL_NLHDLREVALAUX (nlhdlrEvalauxQuotient)
 
static SCIP_DECL_NLHDLRESTIMATE (nlhdlrEstimateQuotient)
 
static SCIP_DECL_NLHDLRINTEVAL (nlhdlrIntevalQuotient)
 
static SCIP_DECL_NLHDLRREVERSEPROP (nlhdlrReversepropQuotient)
 
SCIP_RETCODE SCIPincludeNlhdlrQuotient (SCIP *scip)
 

Macro Definition Documentation

◆ NLHDLR_NAME

#define NLHDLR_NAME   "quotient"

Definition at line 44 of file nlhdlr_quotient.c.

Referenced by SCIP_DECL_NLHDLRCOPYHDLR(), and SCIPincludeNlhdlrQuotient().

◆ NLHDLR_DESC

#define NLHDLR_DESC   "nonlinear handler for quotient expressions"

Definition at line 45 of file nlhdlr_quotient.c.

Referenced by SCIPincludeNlhdlrQuotient().

◆ NLHDLR_DETECTPRIORITY

#define NLHDLR_DETECTPRIORITY   20

Definition at line 46 of file nlhdlr_quotient.c.

Referenced by SCIPincludeNlhdlrQuotient().

◆ NLHDLR_ENFOPRIORITY

#define NLHDLR_ENFOPRIORITY   20

Definition at line 47 of file nlhdlr_quotient.c.

Referenced by SCIPincludeNlhdlrQuotient().

◆ infty2infty

#define infty2infty (   infty1,
  infty2,
  val 
)    ((val) >= (infty1) ? (infty2) : (val))

translate from one value of infinity to another

if val is ≥ infty1, then give infty2, else give val

Definition at line 53 of file nlhdlr_quotient.c.

Referenced by estimateBivariateQuotient(), and estimateUnivariateQuotient().

Function Documentation

◆ exprdataCreate()

static SCIP_RETCODE exprdataCreate ( SCIP scip,
SCIP_NLHDLREXPRDATA **  nlhdlrexprdata,
SCIP_EXPR numexpr,
SCIP_Real  numcoef,
SCIP_Real  numconst,
SCIP_EXPR denomexpr,
SCIP_Real  denomcoef,
SCIP_Real  denomconst,
SCIP_Real  constant 
)
static

helper method to create nonlinear handler expression data

Parameters
scipSCIP data structure
nlhdlrexprdatanonlinear handler expression data
numexprexpression of the numerator
numcoefcoefficient of the numerator
numconstconstant of the numerator
denomexprexpression of the denominator
denomcoefcoefficient of the denominator
denomconstconstant of the denominator
constantconstant

Definition at line 79 of file nlhdlr_quotient.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPcaptureExpr(), and SCIPisZero().

Referenced by detectExpr().

◆ exprdataFree()

static SCIP_RETCODE exprdataFree ( SCIP scip,
SCIP_NLHDLREXPRDATA **  nlhdlrexprdata 
)
static

helper method to free nonlinear handler expression data

Parameters
scipSCIP data structure
nlhdlrexprdatanonlinear handler expression data

Definition at line 118 of file nlhdlr_quotient.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPfreeBlockMemory, and SCIPreleaseExpr().

Referenced by SCIP_DECL_NLHDLRFREEEXPRDATA().

◆ transformExpr()

static void transformExpr ( SCIP scip,
SCIP_EXPR expr,
SCIP_EXPR **  target,
SCIP_Real coef,
SCIP_Real constant 
)
static

helper method to transform an expression g(x) into a*f(x) + b

Parameters
scipSCIP data structure
exprexpression
targetpointer to store the expression f(x)
coefpointer to store the coefficient
constantpointer to store the constant

Definition at line 140 of file nlhdlr_quotient.c.

References NULL, SCIPexprGetChildren(), SCIPexprGetNChildren(), SCIPgetCoefsExprSum(), SCIPgetConstantExprSum(), and SCIPisExprSum().

Referenced by detectExpr().

◆ detectExpr()

static SCIP_RETCODE detectExpr ( SCIP scip,
SCIP_EXPR expr,
SCIP_NLHDLREXPRDATA **  nlhdlrexprdata,
SCIP_Bool success 
)
static

helper method to detect an expression of the form (a*x + b) / (c*y + d) + e

Due to the expansion of products, there are two types of expressions that can be detected:

  1. prod(f(x), pow(g(y),-1))
  2. sum(prod(f(x),pow(g(y),-1)), pow(g(y),-1))
Parameters
scipSCIP data structure
exprexpression
nlhdlrexprdatapointer to store nonlinear handler expression data
successpointer to store whether nonlinear handler should be called for this expression

Definition at line 179 of file nlhdlr_quotient.c.

References a, b, exprdataCreate(), FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPdebug, SCIPdebugMsg, SCIPexprGetChildren(), SCIPexprGetNChildren(), SCIPgetCoefExprProduct(), SCIPgetCoefsExprSum(), SCIPgetConstantExprSum(), SCIPgetExponentExprPow(), SCIPgetExprNAuxvarUsesNonlinear(), SCIPinfoMessage(), SCIPisExprPower(), SCIPisExprProduct(), SCIPisExprSum(), SCIPprintExpr(), SCIPregisterExprUsageNonlinear(), transformExpr(), and TRUE.

Referenced by SCIP_DECL_NLHDLRDETECT().

◆ intEvalQuotient()

static SCIP_INTERVAL intEvalQuotient ( SCIP scip,
SCIP_INTERVAL  bnds,
SCIP_Real  a,
SCIP_Real  b,
SCIP_Real  c,
SCIP_Real  d,
SCIP_Real  e 
)
static

helper method to compute interval for (a x + b) / (c x + d) + e

Parameters
scipSCIP data structure
bndsbounds on x
acoefficient in numerator
bconstant in numerator
ccoefficient in denominator
dconstant in denominator
econstant

Definition at line 354 of file nlhdlr_quotient.c.

References SCIP_Interval::inf, NULL, REALABS, SCIP_INTERVAL_INFINITY, SCIP_Real, SCIPintervalAddScalar(), SCIPintervalDiv(), SCIPintervalDivScalar(), SCIPintervalGetInf(), SCIPintervalGetSup(), SCIPintervalIsEmpty(), SCIPintervalMulScalar(), SCIPintervalSet(), SCIPintervalSetEmpty(), SCIPintervalSetEntire(), SCIPintervalUnify(), SCIPisInfinity(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_NLHDLRINTEVAL().

◆ reversepropQuotient()

static SCIP_INTERVAL reversepropQuotient ( SCIP_INTERVAL  bnds,
SCIP_Real  a,
SCIP_Real  b,
SCIP_Real  c,
SCIP_Real  d,
SCIP_Real  e 
)
static

helper method to compute reverse propagation for (a x + b) / (c x + d) + e

Parameters
bndsbounds on (a x + b) / (c x + d) + e
acoefficient in numerator
bconstant in numerator
ccoefficient in denominator
dconstant in denominator
econstant

Definition at line 438 of file nlhdlr_quotient.c.

References SCIP_Interval::inf, SCIP_INTERVAL_INFINITY, SCIP_Real, SCIPintervalAddScalar(), SCIPintervalDiv(), SCIPintervalIsEmpty(), SCIPintervalMulScalar(), SCIPintervalSet(), SCIPintervalSetEmpty(), SCIPintervalSetEntire(), SCIPintervalSubScalar(), SCIPintervalUnify(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_NLHDLRREVERSEPROP().

◆ createRowprep()

static SCIP_RETCODE createRowprep ( SCIP scip,
SCIP_ROWPREP rowprep,
SCIP_VAR **  vars,
SCIP_Real coefs,
SCIP_Real  constant,
int  nlinvars 
)
static

adds data to given rowprep; the generated estimator is always locally valid

Note
the constant is moved to the left- or right-hand side
other than the name of this function may indicate, it does not create a rowprep
Parameters
scipSCIP data structure
rowprepa rowprep where to store the estimator
varsvariables
coefscoefficients
constantconstant
nlinvarstotal number of variables

Definition at line 500 of file nlhdlr_quotient.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPaddRowprepTerms(), SCIPensureRowprepSize(), and SCIProwprepAddSide().

Referenced by estimateBivariateQuotient(), and estimateUnivariateQuotient().

◆ estimateUnivariate()

static SCIP_RETCODE estimateUnivariate ( SCIP scip,
SCIP_Real  lbx,
SCIP_Real  ubx,
SCIP_Real  gllbx,
SCIP_Real  glubx,
SCIP_Real  solx,
SCIP_Real  a,
SCIP_Real  b,
SCIP_Real  c,
SCIP_Real  d,
SCIP_Real  e,
SCIP_Real coef,
SCIP_Real constant,
SCIP_Bool  overestimate,
SCIP_Bool local,
SCIP_Bool branchinguseful,
SCIP_Bool success 
)
static

computes an estimator at a given point for the univariate case (ax + b) / (cx + d) + e

Depending on the reference point, the estimator is a tangent or a secant on the graph. It depends on whether we are under- or overestimating, whether we are on the left or on the right side of the singularity at -d/c, and whether it is the monotone increasing (ad - bc > 0) or decreasing part (ad - bc < 0). Together, there are 8 cases:

  • mon. incr. + overestimate + left hand side –> secant
  • mon. incr. + overestimate + right hand side –> tangent
  • mon. incr. + understimate + left hand side –> tangent
  • mon. incr. + understimate + right hand side –> secant
  • mon. decr. + overestimate + left hand side –> tangent
  • mon. decr. + overestimate + right hand side –> secant
  • mon. decr. + understimate + left hand side –> secant
  • mon. decr. + understimate + right hand side –> tangent
Parameters
scipSCIP data structure
lbxlocal lower bound of x
ubxlocal upper bound of x
gllbxglobal lower bound of x
glubxglobal upper bound of x
solxsolution value of x
acoefficient in numerator
bconstant in numerator
ccoefficient in denominator
dconstant in denominator
econstant
coefpointer to store the coefficient
constantpointer to store the constant
overestimatewhether the expression should be overestimated
localpointer to store whether the estimate is locally valid
branchingusefulpointer to store whether branching on the expression would improve the estimator
successbuffer to store whether separation was successful

Definition at line 541 of file nlhdlr_quotient.c.

References b, FALSE, NULL, REALABS, SCIP_Bool, SCIP_OKAY, SCIP_Real, SCIPisGE(), SCIPisHugeValue(), SCIPisInfinity(), SCIPisLE(), and TRUE.

Referenced by estimateUnivariateQuotient().

◆ estimateUnivariateQuotient()

static SCIP_RETCODE estimateUnivariateQuotient ( SCIP scip,
SCIP_SOL sol,
SCIP_EXPR xexpr,
SCIP_Real  a,
SCIP_Real  b,
SCIP_Real  c,
SCIP_Real  d,
SCIP_Real  e,
SCIP_Bool  overestimate,
SCIP_ROWPREP rowprep,
SCIP_Bool branchinguseful,
SCIP_Bool success 
)
static

helper method to compute estimator for the univariate case; the estimator is stored in a given rowprep

Parameters
scipSCIP data structure
solsolution point (or NULL for the LP solution)
xexprargument expression
acoefficient in numerator
bconstant in numerator
ccoefficient in denominator
dconstant in denominator
econstant
overestimatewhether the expression should be overestimated
rowprepa rowprep where to store the estimator
branchingusefulpointer to store whether branching on the expression would improve the estimator
successbuffer to store whether separation was successful

Definition at line 633 of file nlhdlr_quotient.c.

References createRowprep(), estimateUnivariate(), FALSE, SCIP_Interval::inf, infty2infty, MAX, NULL, SCIP_Bool, SCIP_CALL, SCIP_INTERVAL_INFINITY, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPepsilon(), SCIPevalExprActivity(), SCIPexprGetActivity(), SCIPgetExprAuxVarNonlinear(), SCIPgetNLPs(), SCIPgetSolVal(), SCIPinfinity(), SCIPintervalIntersectEps(), SCIPintervalSetBounds(), SCIPisEQ(), SCIProwprepGetName(), SCIProwprepSetLocal(), SCIPsnprintf(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIP_Interval::sup, and x.

Referenced by SCIP_DECL_NLHDLRESTIMATE().

◆ hcGradCut()

static void hcGradCut ( SCIP_Real  lbx,
SCIP_Real  ubx,
SCIP_Real  solx,
SCIP_Real  soly,
SCIP_Real coefx,
SCIP_Real coefy,
SCIP_Real constant 
)
static

helper method to compute a gradient cut for

\[ h^c(x,y) := \frac{1}{y} \left(\frac{x + \sqrt{\text{lbx}\cdot\text{ubx}}}{\sqrt{\text{lbx}} + \sqrt{\text{ubx}}}\right)^2 \]

at a given reference point

See Zamora and Grossmann (1988) for more details.

Parameters
lbxlower bound of x
ubxupper bound of x
solxsolution value of x
solysolution value of y
coefxpointer to store the coefficient of x
coefypointer to store the coefficient of y
constantpointer to store the constant

Definition at line 712 of file nlhdlr_quotient.c.

References NULL, and SCIP_Real.

Referenced by estimateBivariate().

◆ estimateBivariate()

static SCIP_RETCODE estimateBivariate ( SCIP scip,
SCIP_Real  lbx,
SCIP_Real  ubx,
SCIP_Real  lby,
SCIP_Real  uby,
SCIP_Real  lbz,
SCIP_Real  ubz,
SCIP_Real  solx,
SCIP_Real  soly,
SCIP_Real  solz,
SCIP_Bool  overestimate,
SCIP_Real coefx,
SCIP_Real coefy,
SCIP_Real constant,
SCIP_Bool branchingusefulx,
SCIP_Bool branchingusefuly,
SCIP_Bool success 
)
static

computes an over- or underestimator at a given point for the bivariate case x/y ≤/≥ z

There are the following cases for y > 0:

  1. lbx < 0 < ubx: Rewrite x / y = z as x = y * z and use McCormick to compute a valid inequality of the form x = y * z ≤ a * y + b * z + c. Note that b > 0 because of y > 0. The inequality is then transformed to x / b - a/b * y - c/b ≤ z, which results in a valid underestimator for x / y over the set {(x,y) | lbz ≤ x / y ≤ ubz}. Note that overestimating/underestimating the bilinear term with McCormick results in an underestimator/overestimator for x / y.
  2. lbx ≥ 0 or ubx ≤ 0:
    • overestimation: use \(z \leq \frac{1}{\text{lby}\cdot\text{uby}} \min(\text{uby}\cdot x - \text{lbx}\cdot y + \text{lbx}\cdot\text{lby}, \text{lby}\cdot x - \text{ubx}\cdot y + \text{ubx}\cdot\text{uby})\)
    • underestimation: use \(z \geq x/y \geq \frac{1}{y} \frac{x + \sqrt{\text{lbx}\cdot\text{ubx}}}{\sqrt{\text{lbx} + \sqrt{\text{ubx}}}}\) and build gradient cut

If y < 0, swap and negate its bounds and compute the respective opposite estimator (and negate it).

If 0 is in the interval of y, nothing is possible.

Parameters
scipSCIP data structure
lbxlower bound of x
ubxupper bound of x
lbylower bound of y
ubyupper bound of y
lbzlower bound of z
ubzlower bound of z
solxreference point for x
solyreference point for y
solzreference point for z
overestimatewhether the expression should be overestimated
coefxpointer to store the x coefficient
coefypointer to store the y coefficient
constantpointer to store the constant
branchingusefulxpointer to store whether branching on x would improve the estimator
branchingusefulypointer to store whether branching on y would improve the estimator
successbuffer to store whether computing the estimator was successful

Definition at line 761 of file nlhdlr_quotient.c.

References FALSE, hcGradCut(), NULL, REALABS, SCIP_Bool, SCIP_OKAY, SCIP_Real, SCIPaddBilinMcCormick(), SCIPisGE(), SCIPisHugeValue(), SCIPisLE(), and TRUE.

Referenced by estimateBivariateQuotient().

◆ estimateBivariateQuotient()

static SCIP_RETCODE estimateBivariateQuotient ( SCIP scip,
SCIP_EXPR xexpr,
SCIP_EXPR yexpr,
SCIP_VAR auxvar,
SCIP_SOL sol,
SCIP_Real  a,
SCIP_Real  b,
SCIP_Real  c,
SCIP_Real  d,
SCIP_Real  e,
SCIP_Bool  overestimate,
SCIP_ROWPREP rowprep,
SCIP_Bool branchingusefulx,
SCIP_Bool branchingusefuly,
SCIP_Bool success 
)
static

construct an estimator for a quotient expression of the form (ax + b) / (cy + d) + e

The resulting estimator is stored in a rowprep.

The method first computes an estimator for x' / y' with x := ax + b and y := cy + d and then transforms this estimator to one for the quotient (ax + b) / (cy + d) + e.

Parameters
scipSCIP data structure
xexprnumerator expression
yexprdenominator expression
auxvarauxiliary variable
solsolution point (or NULL for the LP solution)
acoefficient of numerator
bconstant of numerator
ccoefficient of denominator
dconstant of denominator
econstant term
overestimatewhether the expression should be overestimated
rowprepa rowprep where to store the estimator
branchingusefulxpointer to store whether branching on x would improve the estimator
branchingusefulypointer to store whether branching on y would improve the estimator
successbuffer to store whether separation was successful

Definition at line 920 of file nlhdlr_quotient.c.

References a, createRowprep(), estimateBivariate(), FALSE, SCIP_Interval::inf, infty2infty, MAX, NULL, SCIP_CALL, SCIP_INTERVAL_INFINITY, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPepsilon(), SCIPevalExprActivity(), SCIPexprGetActivity(), SCIPgetExprAuxVarNonlinear(), SCIPgetNLPs(), SCIPgetSolVal(), SCIPinfinity(), SCIPintervalIntersectEps(), SCIPintervalSetBounds(), SCIPisEQ(), SCIProwprepGetName(), SCIPsnprintf(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_NLHDLRESTIMATE().

◆ SCIP_DECL_NLHDLRCOPYHDLR()

static SCIP_DECL_NLHDLRCOPYHDLR ( nlhdlrCopyhdlrQuotient  )
static

nonlinear handler copy callback

Definition at line 1031 of file nlhdlr_quotient.c.

References NLHDLR_NAME, NULL, SCIP_CALL, SCIP_OKAY, SCIPincludeNlhdlrQuotient(), and SCIPnlhdlrGetName().

◆ SCIP_DECL_NLHDLRFREEEXPRDATA()

static SCIP_DECL_NLHDLRFREEEXPRDATA ( nlhdlrFreeExprDataQuotient  )
static

callback to free expression specific data

Definition at line 1045 of file nlhdlr_quotient.c.

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

◆ SCIP_DECL_NLHDLRDETECT()

static SCIP_DECL_NLHDLRDETECT ( nlhdlrDetectQuotient  )
static

callback to detect structure in expression tree

Definition at line 1059 of file nlhdlr_quotient.c.

References detectExpr(), NULL, SCIP_Bool, SCIP_CALL, SCIP_NLHDLR_METHOD_ACTIVITY, SCIP_NLHDLR_METHOD_SEPABOTH, SCIP_OKAY, and SCIPgetExprNAuxvarUsesNonlinear().

◆ SCIP_DECL_NLHDLREVALAUX()

static SCIP_DECL_NLHDLREVALAUX ( nlhdlrEvalauxQuotient  )
static

auxiliary evaluation callback of nonlinear handler

! [SnippetNlhdlrEvalauxQuotient]

! [SnippetNlhdlrEvalauxQuotient]

Definition at line 1089 of file nlhdlr_quotient.c.

References NULL, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIPgetExprAuxVarNonlinear(), and SCIPgetSolVal().

◆ SCIP_DECL_NLHDLRESTIMATE()

static SCIP_DECL_NLHDLRESTIMATE ( nlhdlrEstimateQuotient  )
static

◆ SCIP_DECL_NLHDLRINTEVAL()

static SCIP_DECL_NLHDLRINTEVAL ( nlhdlrIntevalQuotient  )
static

nonlinear handler interval evaluation callback

! [SnippetNlhdlrIntevalQuotient]

! [SnippetNlhdlrIntevalQuotient]

Definition at line 1201 of file nlhdlr_quotient.c.

References intEvalQuotient(), NULL, SCIP_OKAY, and SCIPexprGetActivity().

◆ SCIP_DECL_NLHDLRREVERSEPROP()

static SCIP_DECL_NLHDLRREVERSEPROP ( nlhdlrReversepropQuotient  )
static

nonlinear handler callback for reverse propagation

! [SnippetNlhdlrReversepropQuotient]

! [SnippetNlhdlrReversepropQuotient]

Definition at line 1229 of file nlhdlr_quotient.c.

References SCIP_Interval::inf, NULL, reversepropQuotient(), SCIP_CALL, SCIP_OKAY, SCIPdebugMsg, SCIPgetExprBoundsNonlinear(), SCIPtightenExprIntervalNonlinear(), and SCIP_Interval::sup.