Go to the documentation of this file.
42 #ifndef __GECODE_MINIMODEL_HH__
43 #define __GECODE_MINIMODEL_HH__
47 #ifdef GECODE_HAS_SET_VARS
50 #ifdef GECODE_HAS_FLOAT_VARS
61 #if !defined(GECODE_STATIC_LIBS) && \
62 (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
64 #ifdef GECODE_BUILD_MINIMODEL
65 #define GECODE_MINIMODEL_EXPORT __declspec( dllexport )
67 #define GECODE_MINIMODEL_EXPORT __declspec( dllimport )
72 #ifdef GECODE_GCC_HAS_CLASS_VISIBILITY
74 #define GECODE_MINIMODEL_EXPORT __attribute__ ((visibility("default")))
78 #define GECODE_MINIMODEL_EXPORT
84 #ifndef GECODE_BUILD_MINIMODEL
85 #define GECODE_LIBRARY_NAME "MiniModel"
92 namespace MiniModel {}
207 #ifdef GECODE_HAS_SET_VARS
210 #ifdef GECODE_HAS_FLOAT_VARS
233 void*
operator new(
size_t s);
235 void operator delete(
void*
p,
size_t s);
247 #ifdef GECODE_HAS_SET_VARS
250 #ifdef GECODE_HAS_FLOAT_VARS
791 #ifdef GECODE_HAS_FLOAT_VARS
810 void*
operator new(
size_t s);
812 void operator delete(
void*
p,
size_t s);
1162 #ifdef GECODE_HAS_SET_VARS
1381 #ifdef GECODE_HAS_FLOAT_VARS
1386 #ifdef GECODE_HAS_SET_VARS
1466 #ifdef GECODE_HAS_SET_VARS
1478 #ifdef GECODE_HAS_FLOAT_VARS
1495 #ifdef GECODE_HAS_SET_VARS
1586 #ifdef GECODE_HAS_FLOAT_VARS
1591 #ifdef GECODE_HAS_SET_VARS
1616 namespace MiniModel {
1635 std::string toString(
void)
const;
1652 const REG& operator =(
const REG&
r);
1657 REG& operator +=(
const REG&
r);
1661 REG& operator |=(
const REG&
r);
1667 REG operator ()(
unsigned int n,
unsigned int m);
1669 REG operator ()(
unsigned int n);
1671 template<
class Char,
class Traits>
1672 std::basic_ostream<Char,Traits>&
1673 print(std::basic_ostream<Char,Traits>& os)
const;
1683 template<
class Char,
class Traits>
1684 std::basic_ostream<Char,Traits>&
1710 abs(
const LinIntExpr& e);
1713 min(
const LinIntExpr&
x,
const LinIntExpr&
y);
1716 min(
const IntVarArgs&
x);
1719 max(
const LinIntExpr&
x,
const LinIntExpr&
y);
1722 max(
const IntVarArgs&
x);
1725 sqr(
const LinIntExpr&
x);
1728 sqrt(
const LinIntExpr&
x);
1731 pow(
const LinIntExpr&
x,
int n);
1734 nroot(
const LinIntExpr&
x,
int n);
1737 element(
const IntVarArgs&
x,
const LinIntExpr&
y);
1740 element(
const BoolVarArgs&
x,
const LinIntExpr&
y);
1743 element(
const IntArgs&
x,
const LinIntExpr&
y);
1746 ite(
const BoolExpr&
b,
const LinIntExpr&
x,
const LinIntExpr&
y);
1749 #ifdef GECODE_HAS_FLOAT_VARS
1752 operator *(
const FloatVar&,
const FloatVar&);
1755 operator *(
const FloatVar&,
const LinFloatExpr&);
1758 operator *(
const LinFloatExpr&,
const FloatVar&);
1761 abs(
const LinFloatExpr& e);
1764 min(
const LinFloatExpr&
x,
const LinFloatExpr&
y);
1767 min(
const FloatVarArgs&
x);
1770 max(
const LinFloatExpr&
x,
const LinFloatExpr&
y);
1773 max(
const FloatVarArgs&
x);
1776 operator *(
const LinFloatExpr&
x,
const LinFloatExpr&
y);
1779 operator /(
const LinFloatExpr&
x,
const LinFloatExpr&
y);
1782 sqr(
const LinFloatExpr&
x);
1785 sqrt(
const LinFloatExpr&
x);
1788 pow(
const LinFloatExpr&
x,
int n);
1791 nroot(
const LinFloatExpr&
x,
int n);
1794 #ifdef GECODE_HAS_MPFR
1803 exp(
const LinFloatExpr&
x);
1806 log(
const LinFloatExpr&
x);
1817 asin(
const LinFloatExpr&
x);
1820 sin(
const LinFloatExpr&
x);
1823 acos(
const LinFloatExpr&
x);
1826 cos(
const LinFloatExpr&
x);
1829 atan(
const LinFloatExpr&
x);
1832 tan(
const LinFloatExpr&
x);
1853 #ifdef GECODE_HAS_FLOAT_VARS
1858 #ifdef GECODE_HAS_SET_VARS
1886 atmost(Home home,
const IntVarArgs&
x,
int n,
int m,
1893 atmost(Home home,
const IntVarArgs&
x, IntVar
y,
int m,
1903 atmost(Home home,
const IntVarArgs&
x,
const IntArgs&
y,
int m,
1910 atmost(Home home,
const IntVarArgs&
x,
int n, IntVar
z,
1917 atmost(Home home,
const IntVarArgs&
x, IntVar
y, IntVar
z,
1927 atmost(Home home,
const IntVarArgs&
x,
const IntArgs&
y, IntVar
z,
1935 atleast(Home home,
const IntVarArgs&
x,
int n,
int m,
1942 atleast(Home home,
const IntVarArgs&
x, IntVar
y,
int m,
1952 atleast(Home home,
const IntVarArgs&
x,
const IntArgs&
y,
int m,
1959 atleast(Home home,
const IntVarArgs&
x,
int n, IntVar
z,
1966 atleast(Home home,
const IntVarArgs&
x, IntVar
y, IntVar
z,
1976 atleast(Home home,
const IntVarArgs&
x,
const IntArgs&
y, IntVar
z,
1984 exactly(Home home,
const IntVarArgs&
x,
int n,
int m,
1991 exactly(Home home,
const IntVarArgs&
x, IntVar
y,
int m,
2001 exactly(Home home,
const IntVarArgs&
x,
const IntArgs&
y,
int m,
2008 exactly(Home home,
const IntVarArgs&
x,
int n, IntVar
z,
2015 exactly(Home home,
const IntVarArgs&
x, IntVar
y, IntVar
z,
2025 exactly(Home home,
const IntVarArgs&
x,
const IntArgs&
y, IntVar
z,
2042 values(Home home,
const IntVarArgs&
x, IntSet
y,
2046 #ifdef GECODE_HAS_SET_VARS
2063 channel(Home home,
const IntVarArgs&
x, SetVar
y);
2068 range(Home home,
const IntVarArgs&
x, SetVar
y, SetVar
z);
2076 roots(Home home,
const IntVarArgs&
x, SetVar
y, SetVar
z);
2120 operator const ArgsType(
void)
const;
2205 int width(
void)
const;
2246 template<
class Char,
class Traits,
class A>
2247 std::basic_ostream<Char,Traits>&
2253 template<
class Char,
class Traits,
class A>
2254 std::basic_ostream<Char,Traits>&
2289 #ifdef GECODE_HAS_SET_VARS
2351 sum(
const Matrix<IntArgs>& matrix);
2379 virtual void constrain(
const Space& best);
2381 virtual IntVar cost(
void)
const = 0;
2396 virtual void constrain(
const Space& best);
2398 virtual IntVar cost(
void)
const = 0;
2413 virtual void constrain(
const Space& best);
2430 virtual void constrain(
const Space& best);
2435 #ifdef GECODE_HAS_FLOAT_VARS
2457 virtual void constrain(
const Space& best);
2459 virtual FloatVar cost(
void)
const = 0;
2482 virtual void constrain(
const Space& best);
2484 virtual FloatVar cost(
void)
const = 0;
void values(Home home, const IntVarArgs &x, IntSet y, IntPropLevel ipl)
Post constraint .
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
FloatNum step
Step by which a next solution has to have lower cost.
IntPropLevel nroot(void) const
Return integer propagation level for root constraints.
LinFloatExpr sum(const FloatVarArgs &x)
Construct linear float expression as sum of float variables.
FloatNum step
Step by which a next solution has to have lower cost.
const LinFloatExpr & operator=(const LinFloatExpr &e)
Assignment operator.
void pow(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for $n\geq 0$.
Post propagator for SetVar x
IntRelType
Relation types for integers.
SymmetryHandle rows_interchange(const Matrix< A > &m)
Interchangeable rows symmetry specification.
Post propagator for SetVar SetOpType SetVar y
Matrix(A a, int w, int h)
Basic constructor.
NodeType
Type of linear expression.
#define GECODE_VTABLE_EXPORT
IntPropLevels(IntPropLevel ipl=IPL_DEF)
Initialize with default propagation level.
IntPropLevel _min
For minimum.
Addition of linear terms.
SymmetryHandle columns_interchange(const Matrix< A > &m)
Interchangeable columns symmetry specification.
Archive & operator>>(Archive &e, FloatNumBranch &nl)
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Linear term with Boolean variable.
bool operator<(const FloatVal &x, const FloatVal &y)
IntPropLevel _linear
For n-ary linear.
Multiplication by coefficient.
IntPropLevel _sqr
For square.
IntPropLevel pow(void) const
Return integer propagation level for power constraints.
IntPropLevel _element
For element.
const SetExpr & operator=(const SetExpr &e)
Assignment operator.
SymmetryHandle diagonal_reflect(const Matrix< A > &m)
Reflect around main diagonal symmetry specification.
void log(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Passing integer variables.
NonLinIntExpr * nle(void) const
Return non-linear expression inside, or null if not non-linear.
void element(Home home, IntSharedArray c, IntVar x0, IntVar x1, IntPropLevel)
Post domain consistent propagator for .
int width(void) const
Return the width of the matrix.
Slice< A > row(int r) const
Access row r.
Comparison relation (for two-sided comparisons)
SetExpr r
Right side of relation.
Other Boolean expression.
void atleast(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl)
Post constraint .
void sqr(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Post propagator for SetVar SetOpType SetVar SetRelType SetVar z
Class for lexicographically minimizing integer costs.
SetCmpRel(const SetExpr &l, SetRelType srt, const SetExpr &r)
Constructor.
Linear term with variable.
IntPropLevel _max2
For binary maximum.
Class for maximizing integer cost.
Linear expressions over integer variables.
void exactly(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl)
Post constraint .
void sin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void range(Home home, const IntVarArgs &x, SetVar y, SetVar z)
Post constraint .
IntPropLevel _pow
For power.
IntPropLevel mod(void) const
Return integer propagation level for modulo constraints.
IntPropLevel
Propagation levels for integer propagators.
SymmetryHandle rows_reflect(const Matrix< A > &m)
Reflect rows symmetry specification.
IntPropLevel _min2
For binary minimum.
IntPropLevel _sqrt
For square root.
FloatVal operator+(const FloatVal &x)
Regular expressions over integer values.
FloatRelType
Relation types for floats.
void post(Home home, IntRelType irt, const IntPropLevels &ipls) const
Post propagator.
SetExpr operator|(const SetExpr &l, const SetExpr &r)
Union of set expressions.
BoolExpr operator^(const BoolExpr &l, const BoolExpr &r)
Exclusive-or of Boolean expressions.
void atmost(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl)
Post constraint .
IntPropLevel _abs
For absolute value.
SetExpr singleton(const LinIntExpr &e)
Singleton expression.
ValueType & operator()(int c, int r)
Access element (c, r) of the matrix.
void acos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Class for specifying integer propagation levels used by minimodel.
LinIntExpr operator%(const LinIntExpr &e0, const LinIntExpr &e1)
Return expression for .
Implementation of the actual expression tree.
~LinIntExpr(void)
Destructor.
~BoolExpr(void)
Destructor.
Linear term with integer variable.
IntPropLevel _ite
For if-then-else.
union Gecode::@602::NNF::@65 u
Union depending on nodetype t.
Gecode toplevel namespace
static IntVar result(Home home, IntVar *x)
Return fresh variable if x is null, x otherwise.
bool operator>(const FloatVal &x, const FloatVal &y)
Multiplication by coefficient.
IntPropLevel abs(void) const
Return integer propagation level for absolute value constraints.
IntPropLevel sqrt(void) const
Return integer propagation level for square root constraints.
FloatVal operator*(const FloatVal &x, const FloatVal &y)
IntPropLevel max2(void) const
Return integer propagation level for binary maximum constraints.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
void rel(Home home, const IntPropLevels &ipls) const
Post propagators for relation.
NonLinFloatExpr * nlfe(void) const
Return non-linear expression inside, or null if not non-linear.
BoolExpr operator!(const BoolExpr &e)
Negated Boolean expression.
BoolVar expr(Home home, const BoolExpr &e, const IntPropLevels &ipls)
Post Boolean expression and return its value.
Passing Boolean variables.
void nroot(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for $n\geq 0$.
bool operator>=(const FloatVal &x, const FloatVal &y)
virtual ~NonLinIntExpr(void)
Destructor.
Home class for posting propagators
BoolVar expr(Home home, const IntPropLevels &ipls) const
Post propagators for expression.
SymmetryHandle columns_reflect(const Matrix< A > &m)
Reflect columns symmetry specification.
IntPropLevel _div
For division.
Subtraction of linear terms.
Linear relations over integer variables.
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Addition of linear terms.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Post propagator for SetVar SetOpType SetVar SetRelType r
double FloatNum
Floating point number base type.
Boolean integer variables.
SetExpr(void)
Default constructor.
ArrayTraits< A >::ArgsType ArgsType
The type of the Args-array type for ValueType values.
void tan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
IntPropLevel _max
For n-ary maximum.
Base class for non-linear expressions over integer variables.
TFE post(PropagatorGroup g)
Only post functions (but not propagators) from g are considered.
IntPropLevel mult(void) const
Return integer propagation level for multiplication constraints.
IntPropLevel _mult
For multiplication.
BoolExpr operator&&(const BoolExpr &l, const BoolExpr &r)
Conjunction of Boolean expressions.
LinIntExpr cardinality(const SetExpr &e)
Cardinality of set expression.
NodeType
Type of Boolean expression.
FloatVal operator/(const FloatVal &x, const FloatVal &y)
IntPropLevel max(void) const
Return integer propagation level for non-binary maximum constraints.
IntPropLevel div(void) const
Return integer propagation level for division constraints.
Slice< A > slice(int fc, int tc, int fr, int tr) const
Access slice of the matrix.
Sum of integer variables.
Class for lexicographically maximizing integer costs.
SetRelType
Common relation types for sets.
SetExpr operator&(const SetExpr &l, const SetExpr &r)
Intersection of set expressions.
Class for minimizing integer cost.
SetExpr setunion(const SetVarArgs &x)
Union of set variables.
Slice(const Matrix< A > &a, int fc, int tc, int fr, int tr)
Construct slice.
NodeType
Type of set expression.
Base class for heap allocated objects.
bool operator!=(const FloatVal &x, const FloatVal &y)
virtual FloatVar post(Home home, FloatVar *ret) const =0
Return variable constrained to be equal to the expression.
void abs(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void post(Home home, FloatRelType frt) const
Post propagator.
FloatVal operator-(const FloatVal &x)
Matrix-interface for arrays.
void post(Home home, bool t, const IntPropLevels &ipls) const
Post propagator for relation (if t is false for negated relation)
Class for maximizing float cost.
IntPropLevel ite(void) const
Return integer propagation level for if-then-else constraints.
IntPropLevel min(void) const
Return integer propagation level for non-binary minimum constraints.
IntRelType neg(IntRelType irt)
Return negated relation type of irt.
bool operator<=(const FloatVal &x, const FloatVal &y)
int height(void) const
Return the height of the matrix.
const ArgsType get_array(void) const
Return an Args-array of the contents of the matrix.
void lex(Home home, const IntVarArgs &x, IntRelType r, const IntVarArgs &y, IntPropLevel ipl)
Post lexical order between x and y.
ArrayTraits< A >::ValueType ValueType
The type of elements of this array.
Sum of Boolean variables.
SetRel(void)
Default constructor.
A reference-counted pointer to a SymmetryObject.
Deterministic finite automaton (DFA)
IntPropLevel _nroot
For root.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
Slice< A > col(int c) const
Access column c.
Node for Boolean expression
Slice & reverse(void)
Reverses the contents of the slice, and returns a reference to it.
virtual ~NonLinFloatExpr(void)
Destructor.
SetRelType srt
Which relation.
Simple propagation levels.
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
IntPropLevel min2(void) const
Return integer propagation level for binary minimum constraints.
#define GECODE_MINIMODEL_EXPORT
SetExpr setdunion(const SetVarArgs &x)
Disjoint union of set variables.
NodeType
Type of linear expression.
IntPropLevel linear2(void) const
Return integer propagation level for binary linear constraints.
Base class for non-linear float expressions.
bool neg
Is atomic formula negative.
static const IntPropLevels def
Default propagation levels for all constraints.
Traits of arrays in Gecode.
IntPropLevel _linear2
For binary linear.
Number of bits required (internal)
void post(Home home, bool t) const
Post propagators for relation (or negated relation if t is false)
void asin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Miscealloneous Boolean expressions.
void ite(Home home, BoolVar b, FloatVar x, FloatVar y, FloatVar z)
Post propagator for if-then-else constraint.
const BoolExpr & operator=(const BoolExpr &e)
Assignment operator.
LinIntExpr(void)
Default constructor.
Class for minimizing float cost.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
void atan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Post propagator for f(x \diamond_{\mathit{op}} y) \sim_r z \f$ void rel(Home home
IntPropLevel sqr(void) const
Return integer propagation level for square constraints.
BoolExpr operator||(const BoolExpr &l, const BoolExpr &r)
Disjunction of Boolean expressions.
Gecode::FloatVal c(-8, 8)
void roots(Home home, const IntVarArgs &x, SetVar y, SetVar z)
Post constraint .
const unsigned int slice
Size of a slice in a portfolio and scale factor for restarts(in number of failures)
BoolExpr(void)
Default constructor.
void exp(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
IntPropLevel element(void) const
Return integer propagation level for element constraints.
SetExpr l
Left side of relation.
int n
Number of negative literals for node type.
ArrayTraits< A >::ArgsType ArgsType
The type of the Args-array type for ValueType values.
Subtraction of linear terms.
Passing integer arguments.
LinFloatExpr(void)
Default constructor.
SetVar post(Home home) const
Post propagators for expression.
Gecode::IntArgs i({1, 2, 3, 4})
void post(Home home, bool t) const
Post propagator for relation (if t is false for negated relation)
~LinFloatExpr(void)
Destructor.
SetExpr inter(const SetVarArgs &x)
Intersection of set variables.
void cos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
int p
Number of positive literals for node type.
const LinIntExpr & operator=(const LinIntExpr &e)
Assignment operator.
Archive & operator<<(Archive &e, FloatNumBranch nl)
IntPropLevel linear(void) const
Return integer propagation level for non-binary linear constraints.
IntPropLevel _mod
For modulo.
virtual IntVar post(Home home, IntVar *ret, const IntPropLevels &ipls) const =0
Return variable constrained to be equal to the expression.
~SetExpr(void)
Destructor.
void print(const Search::Statistics &stat, bool restart)
Print statistics.
static FloatVar result(Home home, FloatVar *x)
Return fresh variable if x is null, x otherwise.
bool operator==(const FloatVal &x, const FloatVal &y)