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 .
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.
@ NT_ADD
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 .
@ NT_VAR_BOOL
Linear term with Boolean variable.
bool operator<(const FloatVal &x, const FloatVal &y)
IntPropLevel _linear
For n-ary linear.
@ NT_MUL
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)
@ NT_SUM
Sum of float variables.
SetExpr r
Right side of relation.
@ NT_LEXP
Linear expression.
@ NT_MISC
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.
@ NT_RLIN
Reified linear relation.
@ NT_VAR
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.
@ NT_VAR_INT
Linear term with integer variable.
IntPropLevel _ite
For if-then-else.
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)
union Gecode::@602::NNF::@65 u
Union depending on nodetype t.
@ NT_MUL
Multiplication by coefficient.
IntPropLevel abs(void) const
Return integer propagation level for absolute value constraints.
@ NT_RLINFLOAT
Reified linear relation.
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.
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.
@ NT_SUB
Subtraction of linear terms.
Linear relations over integer variables.
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
@ NT_ADD
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.
@ NT_NONLIN
Non-linear expression.
@ NT_NONLIN
Non-linear expression.
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.
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
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.
@ NT_SUM_INT
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.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
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.
@ NT_SUM_BOOL
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.
@ IPL_DEF
Simple propagation levels.
@ NT_CONST
Integer constant.
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.
@ _IPL_BITS
Number of bits required (internal)
void post(Home home, bool t) const
Post propagators for relation (or negated relation if t is false)
@ NT_DUNION
Disjoint union.
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.
@ NT_SUB
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.
@ NT_CONST
Float value constant.
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.
@ NT_RSET
Reified set relation.
bool operator==(const FloatVal &x, const FloatVal &y)