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 {
138 public gecode_boost::numeric::interval_lib::rounded_arith_opp<FloatNum> {
141 typedef gecode_boost::numeric::interval_lib::rounded_arith_opp<FloatNum>
Base;
185 #ifdef GECODE_HAS_MPFR 268 namespace Gecode {
namespace Float {
356 template<
class Char,
class Traits>
357 friend std::basic_ostream<Char,Traits>&
358 operator <<(std::basic_ostream<Char,Traits>& os,
const FloatVal&
x);
373 #ifdef GECODE_HAS_MPFR 403 typedef gecode_boost::numeric::interval_lib::save_state<Float::Rounding>
R;
405 typedef gecode_boost::numeric::interval_lib::checking_strict<FloatNum>
P;
407 typedef gecode_boost::numeric::interval
409 gecode_boost::numeric::interval_lib::policies<R, P> >
423 FloatVal(
const FloatNum&
l,
const FloatNum&
u);
428 FloatVal& operator =(
const FloatNum& n);
433 void assign(FloatNum
const &
l, FloatNum
const &
u);
438 FloatNum
min(
void)
const;
441 FloatNum
max(
void)
const;
443 FloatNum
size(
void)
const;
445 FloatNum med(
void)
const;
450 bool tight(
void)
const;
455 bool in(FloatNum n)
const;
457 bool zero_in(
void)
const;
474 FloatVal& operator +=(
const FloatNum& n);
477 FloatVal& operator -=(
const FloatNum& n);
479 FloatVal& operator *=(
const FloatNum& n);
481 FloatVal& operator /=(
const FloatNum& n);
664 template<
class Char,
class Traits>
665 std::basic_ostream<Char,Traits>&
666 operator <<(std::basic_ostream<Char,Traits>& os,
const FloatVal&
x);
725 #ifdef GECODE_HAS_MPFR 822 namespace Gecode {
namespace Float {
926 template<
class Char,
class Traits>
927 std::basic_ostream<Char,Traits>&
928 operator <<(std::basic_ostream<Char,Traits>& os,
const FloatVar&
x);
950 template<
class InputIterator>
956 FloatValArgs(
int n,
const FloatVal* e);
961 static FloatValArgs create(
int n,
FloatVal start,
int inc=1);
981 template<
class InputIterator>
1196 #ifdef GECODE_HAS_MPFR 1541 SEL_ACTIVITY_SIZE_MAX
1562 Select select(
void)
const;
1666 Select select(
void)
const;
1720 Select select(
void)
const;
#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.
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 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: )
Argument array for primtive types.
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$.
gecode_boost::numeric::interval_lib::rounded_arith_opp< FloatNum > Base
Base class.
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)
FloatVarBranch FLOAT_VAR_NONE(void)
Select first unassigned variable.
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)
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...
bool proper_subset(const FloatVal &x, const FloatVal &y)
Gecode::IntArgs i(4, 1, 2, 3, 4)
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: )
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: )
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...
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)
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)
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: )
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)
struct Gecode::@519::NNF::@60::@62 a
For atomic nodes.
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: )
union Gecode::@519::NNF::@60 u
Union depending on nodetype t.
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.
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 .
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 .
FloatVal operator*(const FloatVal &x, const FloatVal &y)
Variable branching information.
BrancherHandle assign(Home home, const FloatVarArgs &x, FloatAssign fa, FloatBranchFilter bf, FloatVarValPrint vvp)
Assign all x with value selection vals.
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)
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)
Which values to select for assignment.
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: )
BrancherHandle 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.
FloatVarBranch FLOAT_VAR_ACTIVITY_MIN(double d, BranchTbl tbl)
Select variable with lowest activity with decay factor d.
void(* FloatVarValPrint)(const Space &home, const BrancherHandle &bh, unsigned int a, FloatVar x, int i, const FloatNumBranch &n, std::ostream &o)
Function type for explaining branching alternatives for set variables.
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: )
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.
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.