Scippy

    SCIP

    Solving Constraint Integer Programs

    Detailed Description

    bilinear nonlinear handler

    Author
    Benjamin Mueller

    Definition in file nlhdlr_bilinear.c.

    #include <string.h>
    #include "scip/nlhdlr_bilinear.h"
    #include "scip/cons_nonlinear.h"
    #include "scip/expr_product.h"
    #include "scip/expr_var.h"

    Go to the source code of this file.

    Macros

    #define NLHDLR_NAME   "bilinear"
     
    #define NLHDLR_DESC   "bilinear handler for expressions"
     
    #define NLHDLR_DETECTPRIORITY   -10
     
    #define NLHDLR_ENFOPRIORITY   -10
     
    #define MIN_INTERIORITY   0.01
     
    #define MIN_ABSBOUNDSIZE   0.1
     
    #define TABLE_NAME_BILINEAR   "nlhdlr_bilinear"
     
    #define TABLE_DESC_BILINEAR   "bilinear nlhdlr statistics table"
     
    #define TABLE_POSITION_BILINEAR   14800
     
    #define TABLE_EARLIEST_STAGE_BILINEAR   SCIP_STAGE_INITSOLVE
     
    #define nlhdlrInitBilinear   NULL
     
    #define nlhdlrInitSepaBilinear   NULL
     
    #define nlhdlrExitSepaBilinear   NULL
     
    #define nlhdlrEnfoBilinear   NULL
     

    Functions

    static void getIneqViol (SCIP_VAR *x, SCIP_VAR *y, SCIP_Real xcoef, SCIP_Real ycoef, SCIP_Real constant, SCIP_Real *viol1, SCIP_Real *viol2)
     
    static SCIP_Bool useBilinIneqs (SCIP *scip, SCIP_VAR *x, SCIP_VAR *y, SCIP_Real refx, SCIP_Real refy)
     
    static void updateBilinearRelaxation (SCIP *scip, SCIP_VAR *RESTRICT x, SCIP_VAR *RESTRICT y, SCIP_Real bilincoef, SCIP_SIDETYPE violside, SCIP_Real refx, SCIP_Real refy, SCIP_Real *RESTRICT ineqs, int nineqs, SCIP_Real mccormickval, SCIP_Real *RESTRICT bestcoefx, SCIP_Real *RESTRICT bestcoefy, SCIP_Real *RESTRICT bestconst, SCIP_Real *RESTRICT bestval, SCIP_Bool *success)
     
    static SCIP_Bool isPointFeasible (SCIP *scip, SCIP_Real x, SCIP_Real y, SCIP_Real lbx, SCIP_Real ubx, SCIP_Real lby, SCIP_Real uby, SCIP_Real *ineqs, int nineqs)
     
    static void getFeasiblePointsBilinear (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_EXPR *expr, SCIP_INTERVAL exprbounds, SCIP_Real *underineqs, int nunderineqs, SCIP_Real *overineqs, int noverineqs, SCIP_Bool levelset, SCIP_Real *xs, SCIP_Real *ys, int *npoints)
     
    static SCIP_INTERVAL intevalBilinear (SCIP *scip, SCIP_EXPR *expr, SCIP_Real *underineqs, int nunderineqs, SCIP_Real *overineqs, int noverineqs)
     
    static void reversePropBilinear (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_EXPR *expr, SCIP_INTERVAL exprbounds, SCIP_Real *underineqs, int nunderineqs, SCIP_Real *overineqs, int noverineqs, SCIP_INTERVAL *intervalx, SCIP_INTERVAL *intervaly)
     
    static void computeBilinEnvelope2 (SCIP *scip, SCIP_Real x, SCIP_Real y, SCIP_Real mi, SCIP_Real qi, SCIP_Real mj, SCIP_Real qj, SCIP_Real *RESTRICT xi, SCIP_Real *RESTRICT yi, SCIP_Real *RESTRICT xj, SCIP_Real *RESTRICT yj, SCIP_Real *RESTRICT xcoef, SCIP_Real *RESTRICT ycoef, SCIP_Real *RESTRICT constant)
     
    static SCIP_DECL_TABLEOUTPUT (tableOutputBilinear)
     
    static SCIP_DECL_TABLECOLLECT (tableCollectBilinear)
     
    static SCIP_DECL_NLHDLRCOPYHDLR (nlhdlrCopyhdlrBilinear)
     
    static SCIP_DECL_NLHDLRFREEHDLRDATA (nlhdlrFreehdlrdataBilinear)
     
    static SCIP_DECL_NLHDLRFREEEXPRDATA (nlhdlrFreeExprDataBilinear)
     
    static SCIP_DECL_NLHDLREXIT (nlhdlrExitBilinear)
     
    static SCIP_DECL_NLHDLRDETECT (nlhdlrDetectBilinear)
     
    static SCIP_DECL_NLHDLREVALAUX (nlhdlrEvalauxBilinear)
     
    static SCIP_DECL_NLHDLRESTIMATE (nlhdlrEstimateBilinear)
     
    static SCIP_DECL_NLHDLRINTEVAL (nlhdlrIntevalBilinear)
     
    static SCIP_DECL_NLHDLRREVERSEPROP (nlhdlrReversepropBilinear)
     
    SCIP_RETCODE SCIPincludeNlhdlrBilinear (SCIP *scip)
     
    SCIP_EXPR ** SCIPgetExprsBilinear (SCIP_NLHDLR *nlhdlr)
     
    int SCIPgetNExprsBilinear (SCIP_NLHDLR *nlhdlr)
     
    SCIP_RETCODE SCIPaddIneqBilinear (SCIP *scip, SCIP_NLHDLR *nlhdlr, SCIP_EXPR *expr, SCIP_Real xcoef, SCIP_Real ycoef, SCIP_Real constant, SCIP_Bool *success)
     
    void SCIPaddBilinLinearization (SCIP *scip, SCIP_Real bilincoef, SCIP_Real refpointx, SCIP_Real refpointy, SCIP_Real *lincoefx, SCIP_Real *lincoefy, SCIP_Real *linconstant, SCIP_Bool *success)
     
    void SCIPaddBilinMcCormick (SCIP *scip, SCIP_Real bilincoef, SCIP_Real lbx, SCIP_Real ubx, SCIP_Real refpointx, SCIP_Real lby, SCIP_Real uby, SCIP_Real refpointy, SCIP_Bool overestimate, SCIP_Real *lincoefx, SCIP_Real *lincoefy, SCIP_Real *linconstant, SCIP_Bool *success)
     
    void SCIPcomputeBilinEnvelope1 (SCIP *scip, SCIP_Real bilincoef, SCIP_Real lbx, SCIP_Real ubx, SCIP_Real refpointx, SCIP_Real lby, SCIP_Real uby, SCIP_Real refpointy, SCIP_Bool overestimate, SCIP_Real xcoef, SCIP_Real ycoef, SCIP_Real constant, SCIP_Real *RESTRICT lincoefx, SCIP_Real *RESTRICT lincoefy, SCIP_Real *RESTRICT linconstant, SCIP_Bool *RESTRICT success)
     
    void SCIPcomputeBilinEnvelope2 (SCIP *scip, SCIP_Real bilincoef, SCIP_Real lbx, SCIP_Real ubx, SCIP_Real refpointx, SCIP_Real lby, SCIP_Real uby, SCIP_Real refpointy, SCIP_Bool overestimate, SCIP_Real xcoef1, SCIP_Real ycoef1, SCIP_Real constant1, SCIP_Real xcoef2, SCIP_Real ycoef2, SCIP_Real constant2, SCIP_Real *RESTRICT lincoefx, SCIP_Real *RESTRICT lincoefy, SCIP_Real *RESTRICT linconstant, SCIP_Bool *RESTRICT success)
     

    Macro Definition Documentation

    ◆ NLHDLR_NAME

    #define NLHDLR_NAME   "bilinear"

    Definition at line 41 of file nlhdlr_bilinear.c.

    ◆ NLHDLR_DESC

    #define NLHDLR_DESC   "bilinear handler for expressions"

    Definition at line 42 of file nlhdlr_bilinear.c.

    ◆ NLHDLR_DETECTPRIORITY

    #define NLHDLR_DETECTPRIORITY   -10

    it is important that the nlhdlr runs after the default nldhlr

    Definition at line 43 of file nlhdlr_bilinear.c.

    ◆ NLHDLR_ENFOPRIORITY

    #define NLHDLR_ENFOPRIORITY   -10

    Definition at line 44 of file nlhdlr_bilinear.c.

    ◆ MIN_INTERIORITY

    #define MIN_INTERIORITY   0.01

    minimum interiority for a reference point for applying separation

    Definition at line 46 of file nlhdlr_bilinear.c.

    ◆ MIN_ABSBOUNDSIZE

    #define MIN_ABSBOUNDSIZE   0.1

    minimum size of variable bounds for applying separation

    Definition at line 47 of file nlhdlr_bilinear.c.

    ◆ TABLE_NAME_BILINEAR

    #define TABLE_NAME_BILINEAR   "nlhdlr_bilinear"

    Definition at line 50 of file nlhdlr_bilinear.c.

    ◆ TABLE_DESC_BILINEAR

    #define TABLE_DESC_BILINEAR   "bilinear nlhdlr statistics table"

    Definition at line 51 of file nlhdlr_bilinear.c.

    ◆ TABLE_POSITION_BILINEAR

    #define TABLE_POSITION_BILINEAR   14800

    the position of the statistics table

    Definition at line 52 of file nlhdlr_bilinear.c.

    ◆ TABLE_EARLIEST_STAGE_BILINEAR

    #define TABLE_EARLIEST_STAGE_BILINEAR   SCIP_STAGE_INITSOLVE

    output of the statistics table is only printed from this stage onwards

    Definition at line 53 of file nlhdlr_bilinear.c.

    ◆ nlhdlrInitBilinear

    #define nlhdlrInitBilinear   NULL

    callback to be called in initialization

    Definition at line 1196 of file nlhdlr_bilinear.c.

    ◆ nlhdlrInitSepaBilinear

    #define nlhdlrInitSepaBilinear   NULL

    separation initialization method of a nonlinear handler (called during CONSINITLP)

    Definition at line 1337 of file nlhdlr_bilinear.c.

    ◆ nlhdlrExitSepaBilinear

    #define nlhdlrExitSepaBilinear   NULL

    separation deinitialization method of a nonlinear handler (called during CONSEXITSOL)

    Definition at line 1340 of file nlhdlr_bilinear.c.

    ◆ nlhdlrEnfoBilinear

    #define nlhdlrEnfoBilinear   NULL

    nonlinear handler separation callback

    Definition at line 1343 of file nlhdlr_bilinear.c.

    Function Documentation

    ◆ getIneqViol()

    static void getIneqViol ( SCIP_VAR x,
    SCIP_VAR y,
    SCIP_Real  xcoef,
    SCIP_Real  ycoef,
    SCIP_Real  constant,
    SCIP_Real viol1,
    SCIP_Real viol2 
    )
    static

    helper function to compute the violation of an inequality of the form xcoef * x <= ycoef * y + constant for two corner points of the domain [lbx,ubx] x [lby,uby]

    Parameters
    xfirst variable
    ysecond variable
    xcoefx-coefficient
    ycoefy-coefficient
    constantconstant
    viol1buffer to store the violation of the first corner point
    viol2buffer to store the violation of the second corner point

    Definition at line 95 of file nlhdlr_bilinear.c.

    References MAX, NULL, SCIP_Real, SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), SQR, x, and y.

    Referenced by SCIPaddIneqBilinear().

    ◆ useBilinIneqs()

    static SCIP_Bool useBilinIneqs ( SCIP scip,
    SCIP_VAR x,
    SCIP_VAR y,
    SCIP_Real  refx,
    SCIP_Real  refy 
    )
    static

    auxiliary function to decide whether to use inequalities for a strong relaxation of bilinear terms or not

    Parameters
    scipSCIP data structure
    xx variable
    yy variable
    refxreference point for x
    refyreference point for y

    Definition at line 128 of file nlhdlr_bilinear.c.

    References MAX, MIN, MIN_ABSBOUNDSIZE, MIN_INTERIORITY, NULL, SCIP_Real, SCIPepsilon(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), x, and y.

    Referenced by SCIP_DECL_NLHDLRESTIMATE().

    ◆ updateBilinearRelaxation()

    static void updateBilinearRelaxation ( SCIP scip,
    SCIP_VAR *RESTRICT  x,
    SCIP_VAR *RESTRICT  y,
    SCIP_Real  bilincoef,
    SCIP_SIDETYPE  violside,
    SCIP_Real  refx,
    SCIP_Real  refy,
    SCIP_Real *RESTRICT  ineqs,
    int  nineqs,
    SCIP_Real  mccormickval,
    SCIP_Real *RESTRICT  bestcoefx,
    SCIP_Real *RESTRICT  bestcoefy,
    SCIP_Real *RESTRICT  bestconst,
    SCIP_Real *RESTRICT  bestval,
    SCIP_Bool success 
    )
    static

    helper function to update the best relaxation for a bilinear term when using valid linear inequalities

    Parameters
    scipSCIP data structure
    xfirst variable
    ysecond variable
    bilincoefcoefficient of the bilinear term
    violsideside of quadratic constraint that is violated
    refxreference point for the x variable
    refyreference point for the y variable
    ineqscoefficients of each linear inequality; stored as triple (xcoef,ycoef,constant)
    nineqstotal number of inequalities
    mccormickvalvalue of the McCormick relaxation at the reference point
    bestcoefxpointer to update the x coefficient
    bestcoefypointer to update the y coefficient
    bestconstpointer to update the constant
    bestvalvalue of the best relaxation that have been found so far
    successbuffer to store whether we found a better relaxation

    Definition at line 164 of file nlhdlr_bilinear.c.

    References MAX, NULL, REALABS, SCIP_Bool, SCIP_Real, SCIP_SIDETYPE_LEFT, SCIPcomputeBilinEnvelope1(), SCIPcomputeBilinEnvelope2(), SCIPdebugMsg, SCIPisFeasGE(), SCIPisFeasLE(), SCIPisRelGT(), SCIPisRelLT(), SCIPisZero(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), TRUE, x, and y.

    Referenced by SCIP_DECL_NLHDLRESTIMATE().

    ◆ isPointFeasible()

    static SCIP_Bool isPointFeasible ( SCIP scip,
    SCIP_Real  x,
    SCIP_Real  y,
    SCIP_Real  lbx,
    SCIP_Real  ubx,
    SCIP_Real  lby,
    SCIP_Real  uby,
    SCIP_Real ineqs,
    int  nineqs 
    )
    static

    helper function to determine whether a given point satisfy given inequalities

    Parameters
    scipSCIP data structure
    xx-coordinate
    yy-coordinate
    lbxlower bound of x
    ubxupper bound of x
    lbylower bound of y
    ubyupper bound of y
    ineqsinequalities of the form coefx x <= coefy y + constant
    nineqstotal number of inequalities

    Definition at line 282 of file nlhdlr_bilinear.c.

    References FALSE, NULL, SCIP_Real, SCIPisGT(), SCIPisLT(), TRUE, x, and y.

    Referenced by getFeasiblePointsBilinear(), and reversePropBilinear().

    ◆ getFeasiblePointsBilinear()

    static void getFeasiblePointsBilinear ( SCIP scip,
    SCIP_CONSHDLR conshdlr,
    SCIP_EXPR expr,
    SCIP_INTERVAL  exprbounds,
    SCIP_Real underineqs,
    int  nunderineqs,
    SCIP_Real overineqs,
    int  noverineqs,
    SCIP_Bool  levelset,
    SCIP_Real xs,
    SCIP_Real ys,
    int *  npoints 
    )
    static

    helper function for computing all vertices of the polytope described by the linear inequalities and the local extrema of the bilinear term along each inequality

    Note
    there are at most 22 points where the min/max can be achieved (given that there are at most 4 inequalities)
    • corners of [lbx,ubx]x[lby,uby] (4)
    • two intersection points for each inequality with the box (8)
    • global maximum / minimum on each inequality (4)
    • intersection between two inequalities (6)
    Parameters
    scipSCIP data structure
    conshdlrconstraint handler, if levelset == TRUE, otherwise can be NULL
    exprproduct expression
    exprboundsbounds on product expression, only used if levelset == TRUE
    underineqsinequalities for underestimation
    nunderineqstotal number of inequalities for underestimation
    overineqsinequalities for overestimation
    noverineqstotal number of inequalities for overestimation
    levelsetshould the level set be considered?
    xsarray to store x-coordinates of computed points
    ysarray to store y-coordinates of computed points
    npointsbuffer to store the total number of computed points

    Definition at line 329 of file nlhdlr_bilinear.c.

    References SCIP_Interval::inf, isPointFeasible(), NULL, SCIP_INTERVAL_INFINITY, SCIP_Real, SCIPdebugMsg, SCIPexprGetActivity(), SCIPexprGetChildren(), SCIPexprGetNChildren(), SCIPgetCoefExprProduct(), SCIPgetExprBoundsNonlinear(), SCIPintervalGetInf(), SCIPintervalGetSup(), SCIPintervalIsEmpty(), SCIPintervalSet(), SCIPintervalSetBounds(), SCIPintervalSolveUnivariateQuadExpression(), SCIPisRelEQ(), SCIPisRelGE(), SCIPisRelLE(), SCIPisZero(), and SCIP_Interval::sup.

    Referenced by intevalBilinear(), and reversePropBilinear().

    ◆ intevalBilinear()

    static SCIP_INTERVAL intevalBilinear ( SCIP scip,
    SCIP_EXPR expr,
    SCIP_Real underineqs,
    int  nunderineqs,
    SCIP_Real overineqs,
    int  noverineqs 
    )
    static

    computes interval for a bilinear term when using at least one inequality

    Parameters
    scipSCIP data structure
    exprproduct expression
    underineqsinequalities for underestimation
    nunderineqstotal number of inequalities for underestimation
    overineqsinequalities for overestimation
    noverineqstotal number of inequalities for overestimation

    Definition at line 612 of file nlhdlr_bilinear.c.

    References FALSE, getFeasiblePointsBilinear(), MAX, MIN, NULL, SCIP_INTERVAL_INFINITY, SCIP_Real, SCIPdebugMsg, SCIPexprGetActivity(), SCIPexprGetChildren(), SCIPexprGetNChildren(), SCIPgetCoefExprProduct(), SCIPintervalIsEmpty(), SCIPintervalMulScalar(), SCIPintervalSetBounds(), SCIPintervalSetEmpty(), and SCIPintervalSetEntire().

    Referenced by SCIP_DECL_NLHDLRINTEVAL().

    ◆ reversePropBilinear()

    static void reversePropBilinear ( SCIP scip,
    SCIP_CONSHDLR conshdlr,
    SCIP_EXPR expr,
    SCIP_INTERVAL  exprbounds,
    SCIP_Real underineqs,
    int  nunderineqs,
    SCIP_Real overineqs,
    int  noverineqs,
    SCIP_INTERVAL intervalx,
    SCIP_INTERVAL intervaly 
    )
    static

    uses inequalities for bilinear terms to get stronger bounds during reverse propagation

    Parameters
    scipSCIP data structure
    conshdlrconstraint handler
    exprproduct expression
    exprboundsbounds on product expression
    underineqsinequalities for underestimation
    nunderineqstotal number of inequalities for underestimation
    overineqsinequalities for overestimation
    noverineqstotal number of inequalities for overestimation
    intervalxbuffer to store the new interval for x
    intervalybuffer to store the new interval for y

    Definition at line 686 of file nlhdlr_bilinear.c.

    References FALSE, getFeasiblePointsBilinear(), SCIP_Interval::inf, isPointFeasible(), MAX, MIN, NULL, SCIP_Bool, SCIP_Real, SCIPdebugMsg, SCIPexprGetActivity(), SCIPexprGetChildren(), SCIPexprGetNChildren(), SCIPfeastol(), SCIPgetCoefExprProduct(), SCIPintervalSet(), SCIPintervalSetEmpty(), SCIPisRelGE(), SCIPisRelLE(), SCIP_Interval::sup, and TRUE.

    Referenced by SCIP_DECL_NLHDLRREVERSEPROP().

    ◆ computeBilinEnvelope2()

    static void computeBilinEnvelope2 ( SCIP scip,
    SCIP_Real  x,
    SCIP_Real  y,
    SCIP_Real  mi,
    SCIP_Real  qi,
    SCIP_Real  mj,
    SCIP_Real  qj,
    SCIP_Real *RESTRICT  xi,
    SCIP_Real *RESTRICT  yi,
    SCIP_Real *RESTRICT  xj,
    SCIP_Real *RESTRICT  yj,
    SCIP_Real *RESTRICT  xcoef,
    SCIP_Real *RESTRICT  ycoef,
    SCIP_Real *RESTRICT  constant 
    )
    static

    helper function to compute the convex envelope of a bilinear term when two linear inequalities are given; we use the same notation and formulas as in Locatelli 2016

    Parameters
    scipSCIP data structure
    xreference point for x
    yreference point for y
    micoefficient of x in the first linear inequality
    qiconstant in the first linear inequality
    mjcoefficient of x in the second linear inequality
    qjconstant in the second linear inequality
    xibuffer to store x coordinate of the first point
    yibuffer to store y coordinate of the first point
    xjbuffer to store x coordinate of the second point
    yjbuffer to store y coordinate of the second point
    xcoefbuffer to store the x coefficient of the envelope
    ycoefbuffer to store the y coefficient of the envelope
    constantbuffer to store the constant of the envelope

    Definition at line 779 of file nlhdlr_bilinear.c.

    References computeBilinEnvelope2(), EPSEQ, NULL, QUAD, QUAD_TO_DBL, REALABS, SCIP_Real, SCIPisEQ(), SCIPquadprecDivQD, SCIPquadprecDivQQ, SCIPquadprecProdDD, SCIPquadprecProdQD, SCIPquadprecSqrtQ, SCIPquadprecSquareQ, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, x, and y.

    Referenced by computeBilinEnvelope2(), and SCIPcomputeBilinEnvelope2().

    ◆ SCIP_DECL_TABLEOUTPUT()

    ◆ SCIP_DECL_TABLECOLLECT()

    ◆ SCIP_DECL_NLHDLRCOPYHDLR()

    static SCIP_DECL_NLHDLRCOPYHDLR ( nlhdlrCopyhdlrBilinear  )
    static

    nonlinear handler copy callback

    Definition at line 1122 of file nlhdlr_bilinear.c.

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

    ◆ SCIP_DECL_NLHDLRFREEHDLRDATA()

    static SCIP_DECL_NLHDLRFREEHDLRDATA ( nlhdlrFreehdlrdataBilinear  )
    static

    callback to free data of handler

    Definition at line 1135 of file nlhdlr_bilinear.c.

    References NULL, SCIP_OKAY, SCIPfreeBlockMemory, SCIPfreeBlockMemoryArrayNull, SCIPhashmapFree(), and SCIPhashmapGetNElements().

    ◆ SCIP_DECL_NLHDLRFREEEXPRDATA()

    static SCIP_DECL_NLHDLRFREEEXPRDATA ( nlhdlrFreeExprDataBilinear  )
    static

    ◆ SCIP_DECL_NLHDLREXIT()

    static SCIP_DECL_NLHDLREXIT ( nlhdlrExitBilinear  )
    static

    callback to be called in deinitialization

    Definition at line 1200 of file nlhdlr_bilinear.c.

    References NULL, SCIP_OKAY, and SCIPnlhdlrGetData().

    ◆ SCIP_DECL_NLHDLRDETECT()

    ◆ SCIP_DECL_NLHDLREVALAUX()

    static SCIP_DECL_NLHDLREVALAUX ( nlhdlrEvalauxBilinear  )
    static

    auxiliary evaluation callback of nonlinear handler

    Definition at line 1316 of file nlhdlr_bilinear.c.

    References NULL, SCIP_OKAY, SCIP_Real, SCIPexprGetChildren(), SCIPexprGetNChildren(), SCIPgetCoefExprProduct(), SCIPgetExprAuxVarNonlinear(), SCIPgetSolVal(), and SCIPisExprProduct().

    ◆ SCIP_DECL_NLHDLRESTIMATE()

    ◆ SCIP_DECL_NLHDLRINTEVAL()

    static SCIP_DECL_NLHDLRINTEVAL ( nlhdlrIntevalBilinear  )
    static

    nonlinear handler interval evaluation callback

    Definition at line 1477 of file nlhdlr_bilinear.c.

    References SCIP_Interval::inf, intevalBilinear(), NULL, SCIP_OKAY, SCIPintervalIntersect(), SCIPisGT(), SCIPisLT(), SCIPnlhdlrGetData(), and SCIP_Interval::sup.

    ◆ SCIP_DECL_NLHDLRREVERSEPROP()

    static SCIP_DECL_NLHDLRREVERSEPROP ( nlhdlrReversepropBilinear  )
    static