36 #ifdef GECODE_HAS_FLOAT_VARS 77 static void*
operator new(
size_t size);
79 static void operator delete(
void*
p,
size_t size);
106 LinFloatExpr::Node::operator
new(
size_t size) {
111 LinFloatExpr::Node::operator
delete(
void*
p, size_t) {
153 if (home.
failed())
return;
186 if (home.
failed())
return;
215 if ((n->
n_float == 1) && (c == 0) && (fts[0].
a == 1))
269 for (
int i=x.
size();
i--; ) {
285 for (
int i=x.
size();
i--; ) {
296 n->
l = e0.n; n->
l->
use++;
297 n->
r = e1.n; n->
r->
use++;
305 n->
r = e.n; n->
r->
use++;
313 n->
l = e.n; n->
l->
use++;
354 tf->
a=m*
a; tf->
x=x_float; tf++;
357 tf->
a=m; tf->
x=
sum.ne->
post(home, NULL); tf++;
360 for (
int i=n_float;
i--; ) {
371 l->fill(home,tf,m,d);
373 r->fill(home,tf,m,d);
380 l->fill(home,tf,m,d);
382 r->fill(home,tf,-m,d);
386 l->fill(home,tf,m*a,d);
FloatVal operator-(const FloatVal &x)
FloatVar x_float
Float variable (potentially)
int n_float
Float variables in tree.
bool valid(const FloatVal &n)
Return whether float n is a valid number.
int size(void) const
Return size of array (number of elements)
void post(Home home, Term *t, int n, FloatRelType frt, FloatVal c)
Post propagator for linear constraint over floats.
NodeType t
Type of expression.
const FloatNum max
Largest allowed float value.
void rfree(void *p)
Free memory block starting at p.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
unsigned int use
Nodes are reference counted.
bool assigned(void) const
Test whether view is assigned.
void * ralloc(size_t s)
Allocate s bytes from heap.
union Gecode::LinFloatExpr::Node::@65 sum
Sum of integer or Boolean variables, or non-linear expression.
Linear term with variable.
virtual FloatVar post(Home home, FloatVar *ret) const =0
Return variable constrained to be equal to the expression.
FloatVal val(void) const
Return assigned value.
bool decrement(void)
Decrement reference count and possibly free memory.
FloatVal a
Coefficient and offset.
Nodes for linear expressions.
Gecode::FloatVal c(-8, 8)
int p
Number of positive literals for node type.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from heap.
const FloatNum min
Smallest allowed float value.
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
Base class for non-linear float expressions.
FloatVal operator+(const FloatVal &x)
FloatRelType
Relation types for floats.
Class to set group information when a post function is executed.
bool failed(void) const
Check whether corresponding space is failed.
unsigned int size(I &i)
Size of all ranges of range iterator i.
Subtraction of linear terms.
Float::Linear::Term * tf
Integer views and coefficients.
LinFloatExpr(void)
Default constructor.
~LinFloatExpr(void)
Destructor.
void fill(Home home, Float::Linear::Term *&tf, FloatVal m, FloatVal &d) const
Generate linear terms from expression.
NodeType
Type of linear expression.
Multiplication by coefficient.
BoolVar expr(Home home, const BoolExpr &e, IntPropLevel ipl)
Post Boolean expression and return its value.
Boolean integer variables.
Post propagator for SetVar SetOpType SetVar SetRelType r
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 .
struct Gecode::@585::NNF::@62::@63 b
For binary nodes (and, or, eqv)
const LinFloatExpr & operator=(const LinFloatExpr &e)
Assignment operator.
Post propagator for SetVar SetOpType SetVar y
FloatVal operator*(const FloatVal &x, const FloatVal &y)
void free(T *b, long unsigned int n)
Delete n objects starting at b.
NonLinFloatExpr * ne
Non-linear expression.
struct Gecode::@585::NNF::@62::@64 a
For atomic nodes.
Node(void)
Default constructor.
Heap heap
The single global heap.
void estimate(Term *t, int n, FloatVal c, FloatNum &l, FloatNum &u)
Estimate lower and upper bounds.
Exception: Arguments are of different size
Post propagator for SetVar x
Class for describing linear term .
#define GECODE_MINIMODEL_EXPORT
Addition of linear terms.
Gecode toplevel namespace
LinFloatExpr sum(const FloatVarArgs &x)
Construct linear float expression as sum of float variables.
NonLinFloatExpr * nlfe(void) const
Return non-linear expression inside, or NULL if not non-linear.
Home class for posting propagators
double FloatNum
Floating point number base type.
#define GECODE_NEVER
Assert that this command is never executed.
void post(Home home, FloatRelType frt) const
Post propagator.