Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

interval arithmetics for provable bounds

Author
Tobias Achterberg
Stefan Vigerske
Kati Wolter

Definition in file intervalarith.c.

#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include "scip/def.h"
#include "scip/intervalarith.h"
#include "scip/pub_message.h"
#include "scip/misc.h"

Go to the source code of this file.

Macros

#define SCIP_ROUND_DOWNWARDS   0
 
#define SCIP_ROUND_UPWARDS   1
 
#define SCIP_ROUND_NEAREST   2
 
#define SCIP_ROUND_ZERO   3
 
#define CALCB(y)   ((bx + axy * (y)) / (2.0 * sqrtax))
 
#define CALCR(c, y)   (rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y))
 

Functions

SCIP_Bool SCIPintervalHasRoundingControl (void)
 
static void intervalSetRoundingMode (SCIP_ROUNDMODE roundmode)
 
static SCIP_ROUNDMODE intervalGetRoundingMode (void)
 
void SCIPintervalSetRoundingMode (SCIP_ROUNDMODE roundmode)
 
SCIP_ROUNDMODE SCIPintervalGetRoundingMode (void)
 
static SCIP_Real negate (SCIP_Real x)
 
void SCIPintervalSetRoundingModeDownwards (void)
 
void SCIPintervalSetRoundingModeUpwards (void)
 
void SCIPintervalSetRoundingModeToNearest (void)
 
void SCIPintervalSetRoundingModeTowardsZero (void)
 
SCIP_Real SCIPintervalNegateReal (SCIP_Real x)
 
SCIP_Real SCIPintervalGetInf (SCIP_INTERVAL interval)
 
SCIP_Real SCIPintervalGetSup (SCIP_INTERVAL interval)
 
void SCIPintervalSet (SCIP_INTERVAL *resultant, SCIP_Real value)
 
void SCIPintervalSetBounds (SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
 
void SCIPintervalSetEmpty (SCIP_INTERVAL *resultant)
 
SCIP_Bool SCIPintervalIsEmpty (SCIP_Real infinity, SCIP_INTERVAL operand)
 
void SCIPintervalSetEntire (SCIP_Real infinity, SCIP_INTERVAL *resultant)
 
SCIP_Bool SCIPintervalIsEntire (SCIP_Real infinity, SCIP_INTERVAL operand)
 
SCIP_Bool SCIPintervalIsPositiveInfinity (SCIP_Real infinity, SCIP_INTERVAL operand)
 
SCIP_Bool SCIPintervalIsNegativeInfinity (SCIP_Real infinity, SCIP_INTERVAL operand)
 
SCIP_Bool SCIPintervalIsSubsetEQ (SCIP_Real infinity, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
SCIP_Bool SCIPintervalAreDisjoint (SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
SCIP_Bool SCIPintervalAreDisjointEps (SCIP_Real eps, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalIntersect (SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalIntersectEps (SCIP_INTERVAL *resultant, SCIP_Real eps, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalUnify (SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAddInf (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAddSup (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAdd (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAddScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalAddVectors (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_INTERVAL *operand2)
 
void SCIPintervalSub (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalSubScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalMulInf (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalMulSup (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalMul (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalMulScalarInf (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalMulScalarSup (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalMulScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalDiv (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalDivScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalScalprod (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_INTERVAL *operand2)
 
void SCIPintervalScalprodScalarsInf (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
 
void SCIPintervalScalprodScalarsSup (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
 
void SCIPintervalScalprodScalars (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
 
void SCIPintervalSquare (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalSquareRoot (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalPower (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
SCIP_Real SCIPintervalPowerScalarIntegerInf (SCIP_Real operand1, int operand2)
 
SCIP_Real SCIPintervalPowerScalarIntegerSup (SCIP_Real operand1, int operand2)
 
void SCIPintervalPowerScalarInteger (SCIP_INTERVAL *resultant, SCIP_Real operand1, int operand2)
 
void SCIPintervalPowerScalarScalar (SCIP_INTERVAL *resultant, SCIP_Real operand1, SCIP_Real operand2)
 
void SCIPintervalPowerScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalPowerScalarInverse (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL basedomain, SCIP_Real exponent, SCIP_INTERVAL image)
 
void SCIPintervalSignPowerScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalReciprocal (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalExp (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalLog (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalMin (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalMax (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAbs (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalSin (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalCos (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalSign (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalEntropy (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
SCIP_Real SCIPintervalQuadUpperBound (SCIP_Real infinity, SCIP_Real a, SCIP_INTERVAL b_, SCIP_INTERVAL x)
 
void SCIPintervalQuad (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL xrng)
 
void SCIPintervalSolveUnivariateQuadExpressionPositive (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
 
void SCIPintervalSolveUnivariateQuadExpressionNegative (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
 
void SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_Real lincoeff, SCIP_Real rhs, SCIP_INTERVAL xbnds)
 
void SCIPintervalSolveUnivariateQuadExpression (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
 
void SCIPintervalQuadBivar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real ax, SCIP_Real ay, SCIP_Real axy, SCIP_Real bx, SCIP_Real by, SCIP_INTERVAL xbnds, SCIP_INTERVAL ybnds)
 
void SCIPintervalSolveBivariateQuadExpressionAllScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real ax, SCIP_Real ay, SCIP_Real axy, SCIP_Real bx, SCIP_Real by, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds, SCIP_INTERVAL ybnds)
 
int SCIPintervalPropagateWeightedSum (SCIP_Real infinity, int noperands, SCIP_INTERVAL *operands, SCIP_Real *weights, SCIP_Real constant, SCIP_INTERVAL rhs, SCIP_INTERVAL *resultants, SCIP_Bool *infeasible)
 

Variables

static const double pi_d_l = (3373259426.0 + 273688.0 / (1<<21)) / (1<<30)
 
static const double pi_d_u = (3373259426.0 + 273689.0 / (1<<21)) / (1<<30)
 

Macro Definition Documentation

◆ SCIP_ROUND_DOWNWARDS

◆ SCIP_ROUND_UPWARDS

◆ SCIP_ROUND_NEAREST

◆ SCIP_ROUND_ZERO

#define SCIP_ROUND_ZERO   3

round always towards zero

Definition at line 224 of file intervalarith.c.

Referenced by SCIPintervalSetRoundingModeTowardsZero().

◆ CALCB

#define CALCB (   y)    ((bx + axy * (y)) / (2.0 * sqrtax))

◆ CALCR

#define CALCR (   c,
  y 
)    (rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y))

Function Documentation

◆ intervalSetRoundingMode()

◆ intervalGetRoundingMode()

◆ negate()

static SCIP_Real negate ( SCIP_Real  x)
static

gets the negation of a double

Fallback implementation that calls the negation method from misc.o. Having the implementation in a different object file will hopefully prevent it from being "optimized away".

Parameters
xnumber that should be negated

Definition at line 321 of file intervalarith.c.

References SCIPnegateReal().

Referenced by polyscip::global::print(), SCIPintervalGetRoundingMode(), SCIPintervalNegateReal(), SCIPintervalPowerScalarInteger(), SCIPintervalQuadUpperBound(), SCIPintervalSignPowerScalar(), and SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar().

Variable Documentation

◆ pi_d_l

const double pi_d_l = (3373259426.0 + 273688.0 / (1<<21)) / (1<<30)
static

Definition at line 2680 of file intervalarith.c.

◆ pi_d_u

const double pi_d_u = (3373259426.0 + 273689.0 / (1<<21)) / (1<<30)
static

Definition at line 2681 of file intervalarith.c.