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) {
118 if ((
l !=
nullptr) &&
l->decrement())
120 if ((
r !=
nullptr) &&
r->decrement())
153 if (home.
failed())
return;
186 if (home.
failed())
return;
215 if ((n->
n_float == 1) && (c == 0) && (fts[0].
a == 1))
230 n->
l = n->
r =
nullptr;
238 n->
l = n->
r =
nullptr;
248 n->
l = n->
r =
nullptr;
257 n->
l = n->
r =
nullptr;
266 n->
l = n->
r =
nullptr;
268 n->sum.tf = heap.alloc<Float::Linear::Term>(x.size());
269 for (int i=x.size(); i--; ) {
270 n->sum.tf[i].x = x[i];
271 n->sum.tf[i].a = 1.0;
278 if (
a.size() !=
x.size())
282 n->
l = n->
r =
nullptr;
284 n->sum.tf = heap.alloc<Float::Linear::Term>(x.size());
285 for (int i=x.size(); i--; ) {
286 n->sum.tf[i].x = x[i];
287 n->sum.tf[i].a = a[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++;
322 n->
l = n->
r =
nullptr;
struct Gecode::@603::NNF::@65::@66 b
For binary nodes (and, or, eqv)
int p
Number of positive literals for node type.
int n
Number of negative literals for node type.
struct Gecode::@603::NNF::@65::@67 a
For atomic nodes.
Node * x
Pointer to corresponding Boolean expression node.
Boolean integer variables.
Exception: Arguments are of different size
Class for describing linear term .
void free(T *b, long unsigned int n)
Delete n objects starting at b.
void rfree(void *p)
Free memory block starting at p.
void * ralloc(size_t s)
Allocate s bytes from heap.
Home class for posting propagators
bool failed(void) const
Check whether corresponding space is failed.
Nodes for linear expressions.
union Gecode::LinFloatExpr::Node::@68 sum
Sum of integer or Boolean variables, or non-linear expression.
NonLinFloatExpr * ne
Non-linear expression.
NodeType t
Type of expression.
FloatVal a
Coefficient and offset.
FloatVar x_float
Float variable (potentially)
unsigned int use
Nodes are reference counted.
int n_float
Float variables in tree.
Node(void)
Default constructor.
void fill(Home home, Float::Linear::Term *&tf, FloatVal m, FloatVal &d) const
Generate linear terms from expression.
bool decrement(void)
Decrement reference count and possibly free memory.
Float::Linear::Term * tf
Integer views and coefficients.
NonLinFloatExpr * nlfe(void) const
Return non-linear expression inside, or null if not non-linear.
LinFloatExpr(void)
Default constructor.
const LinFloatExpr & operator=(const LinFloatExpr &e)
Assignment operator.
~LinFloatExpr(void)
Destructor.
void post(Home home, FloatRelType frt) const
Post propagator.
NodeType
Type of linear expression.
@ NT_VAR
Linear term with variable.
@ NT_CONST
Float value constant.
@ NT_SUM
Sum of float variables.
@ NT_NONLIN
Non-linear expression.
@ NT_ADD
Addition of linear terms.
@ NT_MUL
Multiplication by coefficient.
@ NT_SUB
Subtraction of linear terms.
Base class for non-linear float expressions.
virtual FloatVar post(Home home, FloatVar *ret) const =0
Return variable constrained to be equal to the expression.
Class to set group information when a post function is executed.
bool assigned(void) const
Test whether view is assigned.
VarImpType * x
Pointer to variable implementation.
void post(Home home, Term *t, int n, FloatRelType frt, FloatVal c)
Post propagator for linear constraint over floats.
Heap heap
The single global heap.
double FloatNum
Floating point number base type.
FloatRelType
Relation types for floats.
@ FRT_LQ
Less or equal ( )
@ FRT_GQ
Greater or equal ( )
#define GECODE_MINIMODEL_EXPORT
const FloatNum max
Largest allowed float value.
bool valid(const FloatVal &n)
Return whether float n is a valid number.
const FloatNum min
Smallest allowed float value.
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 estimate(Term *t, int n, FloatVal c, FloatNum &l, FloatNum &u)
Estimate lower and upper bounds.
Gecode toplevel namespace
FloatVal operator-(const FloatVal &x)
FloatVal operator+(const FloatVal &x)
Post propagator for SetVar SetOpType SetVar SetRelType r
IntVar expr(Home home, const LinIntExpr &e, const IntPropLevels &ipls=IntPropLevels::def)
Post linear expression and return its value.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Post propagator for SetVar SetOpType SetVar y
LinIntExpr sum(const IntVarArgs &x)
Construct linear expression as sum of integer variables.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
FloatVal operator*(const FloatVal &x, const FloatVal &y)
Post propagator for SetVar x
#define GECODE_NEVER
Assert that this command is never executed.