42 #ifndef __GECODE_FLOAT_HH__ 43 #define __GECODE_FLOAT_HH__ 56 #if !defined(GECODE_STATIC_LIBS) && \ 57 (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER)) 59 #ifdef GECODE_BUILD_FLOAT 60 #define GECODE_FLOAT_EXPORT __declspec( dllexport ) 62 #define GECODE_FLOAT_EXPORT __declspec( dllimport ) 67 #ifdef GECODE_GCC_HAS_CLASS_VISIBILITY 68 #define GECODE_FLOAT_EXPORT __attribute__ ((visibility("default"))) 70 #define GECODE_FLOAT_EXPORT 76 #ifndef GECODE_BUILD_FLOAT 77 #define GECODE_LIBRARY_NAME "Float" 82 #include <gecode/third-party/boost/numeric/interval.hpp> 130 namespace Gecode {
namespace Float {
133 #if defined(_MSC_VER) && (defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP > 0))) 140 typedef gecode_boost::numeric::interval_lib::rounded_arith_std<FloatNum>
146 typedef gecode_boost::numeric::interval_lib::rounded_arith_opp<FloatNum>
200 #ifdef GECODE_HAS_MPFR 283 namespace Gecode {
namespace Float {
371 template<
class Char,
class Traits>
372 friend std::basic_ostream<Char,Traits>&
373 operator <<(std::basic_ostream<Char,Traits>& os,
const FloatVal&
x);
388 #ifdef GECODE_HAS_MPFR 418 typedef gecode_boost::numeric::interval_lib::save_state<Float::Rounding>
R;
420 typedef gecode_boost::numeric::interval_lib::checking_strict<FloatNum>
P;
422 typedef gecode_boost::numeric::interval
424 gecode_boost::numeric::interval_lib::policies<R, P> >
438 FloatVal(
const FloatNum&
l,
const FloatNum&
u);
443 FloatVal& operator =(
const FloatNum& n);
448 void assign(FloatNum
const &
l, FloatNum
const &
u);
453 FloatNum
min(
void)
const;
456 FloatNum
max(
void)
const;
458 FloatNum
size(
void)
const;
460 FloatNum med(
void)
const;
465 bool tight(
void)
const;
470 bool in(FloatNum n)
const;
472 bool zero_in(
void)
const;
489 FloatVal& operator +=(
const FloatNum& n);
492 FloatVal& operator -=(
const FloatNum& n);
494 FloatVal& operator *=(
const FloatNum& n);
496 FloatVal& operator /=(
const FloatNum& n);
679 template<
class Char,
class Traits>
680 std::basic_ostream<Char,Traits>&
681 operator <<(std::basic_ostream<Char,Traits>& os,
const FloatVal&
x);
740 #ifdef GECODE_HAS_MPFR 837 namespace Gecode {
namespace Float {
941 template<
class Char,
class Traits>
942 std::basic_ostream<Char,Traits>&
943 operator <<(std::basic_ostream<Char,Traits>& os,
const FloatVar&
x);
965 template<
class InputIterator>
994 template<
class InputIterator>
1209 #ifdef GECODE_HAS_MPFR 1560 SEL_ACTIVITY_SIZE_MAX
1581 Select select(
void)
const;
1685 Select select(
void)
const;
1739 Select select(
void)
const;
1912 virtual void init(
const Space& home,
const FloatTraceRecorder&
t);
1914 virtual void prune(
const Space& home,
const FloatTraceRecorder&
t,
1917 virtual void fix(
const Space& home,
const FloatTraceRecorder&
t);
1919 virtual void done(
const Space& home,
const FloatTraceRecorder&
t);
1933 FloatTracer&
t = StdFloatTracer::def);
1941 FloatTracer&
t = StdFloatTracer::def);
#define GECODE_FLOAT_EXPORT
FloatNum pi_half_upper(void)
Return upper bound of .
Select values greater than mean of smallest and largest value.
FloatVal operator-(const FloatVal &x)
With smallest degree divided by domain size.
SetExpr singleton(const LinIntExpr &e)
Singleton expression.
FloatNum atanh_down(FloatNum x)
Return lower bound of hyperbolic arctangent of x (domain: )
FloatVarBranch FLOAT_VAR_DEGREE_MAX(BranchTbl tbl)
Select variable with largest degree.
FloatNum tanh_up(FloatNum x)
Return upper bound of hyperbolic tangent of x (domain: )
Variables as interfaces to variable implementations.
FloatNum add_down(FloatNum x, FloatNum y)
Return lower bound of x plus y (domain: )
FloatNum asinh_down(FloatNum x)
Return lower bound of hyperbolic arcsine of x (domain: )
Select
Which value selection.
Combine variable selection criteria for tie-breaking.
FloatVarArgs(int n)
Allocate array with n elements.
Which values to select for branching first.
TraceRecorder< Float::FloatView > FloatTraceRecorder
TraceRecorder for float variables.
void mult(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
FloatVarArgs(const std::vector< FloatVar > &a)
Initialize from vector a.
With smallest domain size.
FloatNum div_up(FloatNum x, FloatNum y)
Return upper bound of x divided y (domain: )
void linear(Home home, const FloatVarArgs &x, FloatRelType frt, FloatNum c)
Post propagator for .
FloatNum mul_down(FloatNum x, FloatNum y)
Return lower bound of x times y (domain: )
FloatValBranch FLOAT_VAL_SPLIT_MAX(void)
Select values greater than mean of smallest and largest value.
FloatVarArgs(const FloatVarArgs &a)
Initialize from variable argument array a (copy elements)
bool valid(const FloatVal &n)
Return whether float n is a valid number.
With largest domain size.
FloatNum cosh_down(FloatNum x)
Return lower bound of hyperbolic cosine of x (domain: )
bool subset(const FloatVal &x, const FloatVal &y)
With smallest accumulated failure count divided by domain size.
FloatNum asinh_up(FloatNum x)
Return upper bound of hyperbolic arcsine of x (domain: )
void log(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void trace(Home home, const FloatVarArgs &x, TraceFilter tf, int te, FloatTracer &t)
Create a tracer for float variables.
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
FloatNumBranch(* FloatBranchVal)(const Space &home, FloatVar x, int i)
Branch value function type for float variables.
const FloatNum max
Largest allowed float value.
FloatNum int_down(FloatNum x)
Return next downward-rounded integer of x (domain: )
FloatVal operator/(const FloatVal &x, const FloatVal &y)
FloatAssign FLOAT_ASSIGN_MAX(void)
Select median value of the upper part.
FloatNum tanh_down(FloatNum x)
Return lower bound of hyperbolic tangent of x (domain: )
FloatVal fmod(const FloatVal &x, const FloatVal &y)
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
void abs(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void nroot(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for $n 0$.
bool overlap(const FloatVal &x, const FloatVal &y)
Select median value of a randomly chosen part.
void pow(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for $n 0$.
FloatVarBranch FLOAT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Select variable with largest degree divided by domain size.
FloatAssign FLOAT_ASSIGN_MIN(void)
Select median value of the lower part.
Select s
Which value to select.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
double(* FloatBranchMerit)(const Space &home, FloatVar x, int i)
Branch merit function type for float variables.
bool(* FloatBranchFilter)(const Space &home, FloatVar x, int i)
Branch filter function type for float variables.
FloatVal hull(const FloatVal &x, const FloatVal &y)
FloatNum sqrt_down(FloatNum x)
Return lower bound of square root of x (domain: )
With largest accumulated failure count.
FloatVarBranch FLOAT_VAR_AFC_MIN(double d, BranchTbl tbl)
Select variable with smallest accumulated failure count with decay factor d.
FloatNum asin_up(FloatNum x)
Return upper bound of arcsine of x (domain: )
Which variable to select for branching.
gecode_boost::numeric::interval_lib::checking_strict< FloatNum > P
Used checking policy.
FloatVarBranch FLOAT_VAR_ACTIVITY_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest activity divided by domain size with decay factor d. ...
Select values randomly which are not greater or not smaller than mean of largest and smallest value...
Select
Which variable selection.
FloatNum sinh_up(FloatNum x)
Return upper bound of hyperbolic sine of x (domain: )
FloatNum sqrt_up(FloatNum x)
Return upper bound of square root of x (domain: )
FloatVarBranch FLOAT_VAR_ACTIVITY_MAX(double d, BranchTbl tbl)
Select variable with highest activity with decay factor d.
gecode_boost::numeric::interval< FloatNum, gecode_boost::numeric::interval_lib::policies< R, P > > FloatValImpType
Implementation type for float value.
FloatValBranch FLOAT_VAL(FloatBranchVal v, FloatBranchCommit c)
ExecStatus prune(Space &home, ViewArray< VX > &x, ConstIntView)
FloatVarBranch FLOAT_VAR_NONE(void)
Select first unassigned variable.
void(* FloatVarValPrint)(const Space &home, const Brancher &b, unsigned int a, FloatVar x, int i, const FloatNumBranch &n, std::ostream &o)
Function type for explaining branching alternatives for set variables.
Select s
Which value to select.
FloatValBranch FLOAT_VAL_SPLIT_RND(Rnd r)
Select values randomly which are not greater or not smaller than mean of largest and smallest value...
FloatValImpType x
Implementation of float value.
std::string expand(Gecode::IntRelType irt)
Expand relation to abbreviation.
FloatNum pi_twice_lower(void)
Return lower bound of .
Gecode::FloatVal c(-8, 8)
void branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf, FloatVarValPrint vvp)
Branch over x with variable selection vars and value selection vals.
FloatNum log_down(FloatNum x)
Return lower bound of logarithm of x (domain: )
FloatVarBranch FLOAT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count divided by domain size with decay factor d...
struct Gecode::@554::NNF::@60::@62 a
For atomic nodes.
int p
Number of positive literals for node type.
Standard float variable tracer.
bool proper_subset(const FloatVal &x, const FloatVal &y)
Gecode::IntArgs i(4, 1, 2, 3, 4)
Base-class for branchers.
FloatNum n
The middle value for branching.
Class for AFC (accumulated failure count) management.
FloatNum asin_down(FloatNum x)
Return lower bound of arcsine of x (domain: )
void assign(Home home, const FloatVarArgs &x, FloatAssign fa, FloatBranchFilter bf, FloatVarValPrint vvp)
Assign all x with value selection vals.
int n
Number of negative literals for node type.
FloatNum sin_up(FloatNum x)
Return upper bound of sine of x (domain: )
FloatNum int_up(FloatNum x)
Return next upward-rounded integer of x (domain: )
Argument array for non-primitive types.
FloatVarArgs(const VarArray< FloatVar > &a)
Initialize from variable array a (copy elements)
FloatAssign FLOAT_ASSIGN_RND(Rnd r)
Select median value of a randomly chosen part.
FloatVal sinh(const FloatVal &x)
FloatVarBranch FLOAT_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl)
Select variable with smalllest accumulated failure count divided by domain size with decay factor d...
union Gecode::@554::NNF::@60 u
Union depending on nodetype t.
FloatVarBranch FLOAT_VAR_DEGREE_MIN(BranchTbl tbl)
Select variable with smallest degree.
FloatNum pi_twice_upper(void)
Return upper bound of .
FloatVal intersect(const FloatVal &x, const FloatVal &y)
Value description class for branching.
FloatVal operator+(const FloatVal &x)
Propagator for recording trace information.
void sqr(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
FloatRelType
Relation types for floats.
FloatNum log_up(FloatNum x)
Return upper bound of logarithm of x (domain: )
bool operator!=(const FloatVal &x, const FloatVal &y)
New view Float::FloatView n
FloatVarBranch FLOAT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl)
Select variable with smallest degree divided by domain size.
FloatNum cos_down(FloatNum x)
Return lower bound of cosine of x (domain: )
Output stream to use std::ostream & os
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
unsigned int size(I &i)
Size of all ranges of range iterator i.
Reification specification.
bool l
Whether to try the lower or upper half first.
FloatVal cosh(const FloatVal &x)
FloatNum pi_half_lower(void)
Return lower bound of .
FloatValBranch FLOAT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
void(* VoidFunction)(void)
Base type for any function pointer.
FloatVarBranch FLOAT_VAR_MERIT_MAX(FloatBranchMerit bm, BranchTbl tbl)
Select variable with highest merit according to branch merit function bm.
FloatNum atanh_up(FloatNum x)
Return upper bound of hyperbolic arctangent of x (domain: )
With largest accumulated failure count divided by domain size.
FloatVarBranch FLOAT_VAR_MAX_MAX(BranchTbl tbl)
Select variable with largest max.
void asin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
FloatVarBranch FLOAT_VAR_RND(Rnd r)
Select random variable (uniform distribution, for tie breaking)
Select values not greater than mean of smallest and largest value.
FloatVarArgs(InputIterator first, InputIterator last)
Initialize from InputIterator first and last.
Floating point rounding policy.
Random (uniform, for tie breaking)
FloatNum tan_up(FloatNum x)
Return upper bound of tangent of x (domain: )
Recording activities for float variables.
FloatNum atan_up(FloatNum x)
Return upper bound of arctangent of x (domain: )
Float view for float variables.
With smallest activity divided by domain size.
Boolean integer variables.
void check(const FloatVal &n, const char *l)
Check whether float n is a valid number, otherwise throw out of limits exception with information l...
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
FloatNum cos_up(FloatNum x)
Return upper bound of cosine of x (domain: )
void cos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Trace delta information for float variables.
FloatNum acosh_up(FloatNum x)
Return upper bound of hyperbolic arccosine of x (domain: )
Value branching information.
void div(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
void relax(Home home, const FloatVarArgs &x, const FloatVarArgs &sx, Rnd r, double p)
const double base
Base for geometric restart sequence.
FloatVal operator*(const FloatVal &x, const FloatVal &y)
Variable branching information.
FloatNum atan_down(FloatNum x)
Return lower bound of arctangent of x (domain: )
Node * x
Pointer to corresponding Boolean expression node.
FloatVarBranch FLOAT_VAR_MIN_MIN(BranchTbl tbl)
Select variable with smallest min.
Rounding(void)
Default constructor (configures full rounding mode)
Generic domain change information to be supplied to advisors.
FloatNum sub_down(FloatNum x, FloatNum y)
Return lower bound of x minus y (domain: )
Select median value of the upper part.
FloatNum acosh_down(FloatNum x)
Return lower bound of hyperbolic arccosine of x (domain: )
void tan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
With smallest accumulated failure count.
Select
Which value selection.
Select s
Which variable to select.
FloatVarBranch FLOAT_VAR_MAX_MIN(BranchTbl tbl)
Select variable with smallest max.
bool operator>=(const FloatVal &x, const FloatVal &y)
FloatVal acosh(const FloatVal &x)
FloatNum div_down(FloatNum x, FloatNum y)
Return lower bound of x divided by y (domain: )
FloatNum exp_up(FloatNum x)
Return upper bound of exponential of x (domain: )
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
FloatNum acos_up(FloatNum x)
Return upper bound of arccossine of x (domain: )
With largest degree divided by domain size.
FloatVal atanh(const FloatVal &x)
FloatVal asinh(const FloatVal &x)
gecode_boost::numeric::interval_lib::rounded_arith_opp< FloatNum > RoundingBase
Rounding Base class (optimized version)
Which values to select for assignment.
Delta information const Delta & d
Tracer that process trace information.
FloatNum cosh_up(FloatNum x)
Return upper bound of hyperbolic cosine of x (domain: )
FloatNum exp_down(FloatNum x)
Return lower bound of exponential of x (domain: )
FloatAssign FLOAT_ASSIGN(FloatBranchVal v, FloatBranchCommit c)
gecode_boost::numeric::interval_lib::save_state< Float::Rounding > R
Used rounding policies.
Select median value of the lower part.
bool operator>(const FloatVal &x, const FloatVal &y)
FloatNum sinh_down(FloatNum x)
Return lower bound of hyperbolic sine of x (domain: )
FloatNum sub_up(FloatNum x, FloatNum y)
Return upper bound of x minus y (domain: )
bool operator<(const FloatVal &x, const FloatVal &y)
bool operator==(const FloatVal &x, const FloatVal &y)
bool operator<=(const FloatVal &x, const FloatVal &y)
FloatNum add_up(FloatNum x, FloatNum y)
Return upper bound of x plus y (domain: )
Gecode toplevel namespace
Argument array for variables.
void wait(Home home, FloatVar x, void(*c)(Space &home))
Execute c when x becomes assigned.
void sin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
FloatNum acos_down(FloatNum x)
Return lower bound of arccosine of x (domain: )
FloatVarBranch FLOAT_VAR_ACTIVITY_MIN(double d, BranchTbl tbl)
Select variable with lowest activity with decay factor d.
FloatVarBranch FLOAT_VAR_ACTIVITY_SIZE_MIN(double d, BranchTbl tbl)
Select variable with smallest activity divided by domain size with decay factor d.
void acos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Class for activity management.
void exp(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
FloatVarBranch FLOAT_VAR_SIZE_MAX(BranchTbl tbl)
Select variable with largest domain size.
FloatNum pi_lower(void)
Return lower bound of .
FloatNum mul_up(FloatNum x, FloatNum y)
Return upper bound of x times y (domain: )
struct Gecode::@554::NNF::@60::@61 b
For binary nodes (and, or, eqv)
FloatVal tanh(const FloatVal &x)
Home class for posting propagators
double tbl(const Gecode::Space &, double w, double b)
Test function for tie-break limit function.
double FloatNum
Floating point number base type.
FloatVarBranch FLOAT_VAR_MIN_MAX(BranchTbl tbl)
Select variable with largest min.
Tracer< Float::FloatView > FloatTracer
Tracer for float variables.
Shared array with arbitrary number of elements.
~Rounding(void)
Destructor (restores previous rounding mode)
FloatVarBranch FLOAT_VAR_MERIT_MIN(FloatBranchMerit bm, BranchTbl tbl)
Select variable with least merit according to branch merit function bm.
FloatVarBranch FLOAT_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
FloatNum median(FloatNum x, FloatNum y)
Return median of x and y (domain: )
void atan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
FloatNum sin_down(FloatNum x)
Return lower bound of sine of x (domain: )
Recording AFC information for float variables.
FloatNum tan_down(FloatNum x)
Return lower bound of tangent of x (domain: )
FloatNum pi_upper(void)
Return upper bound of .
void(* FloatBranchCommit)(Space &home, unsigned int a, FloatVar x, int i, FloatNumBranch nl)
Branch commit function type for float variables.
FloatVarBranch FLOAT_VAR_SIZE_MIN(BranchTbl tbl)
Select variable with smallest domain size.
double(* BranchTbl)(const Space &home, double w, double b)
Tie-break limit function.