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"
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
1250 void post(
Home home,
bool t)
const;
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);
1655 REG operator +(
const REG&
r);
1657 REG& operator +=(
const REG&
r);
1659 REG operator |(
const REG&
r);
1661 REG& operator |=(
const REG&
r);
1663 REG operator *(
void);
1665 REG operator +(
void);
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
2046#ifdef GECODE_HAS_SET_VARS
2087 template<
class>
class Matrix;
2188 Matrix(A a,
int w,
int h);
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
2348 sum(
const Slice<IntArgs>& slice);
2351 sum(
const Matrix<IntArgs>& matrix);
2435#ifdef GECODE_HAS_FLOAT_VARS
Traits of arrays in Gecode.
Miscealloneous Boolean expressions.
Misc(void)
Default constructor.
virtual void post(Home home, BoolVar b, bool neg, const IntPropLevels &ipls)=0
Node for Boolean expression
BoolExpr(void)
Default constructor.
NodeType
Type of Boolean expression.
@ NT_RLINFLOAT
Reified linear relation.
@ NT_RLIN
Reified linear relation.
@ NT_MISC
Other Boolean expression.
@ NT_RSET
Reified set relation.
const BoolExpr & operator=(const BoolExpr &e)
Assignment operator.
BoolVar expr(Home home, const IntPropLevels &ipls) const
Post propagators for expression.
~BoolExpr(void)
Destructor.
void rel(Home home, const IntPropLevels &ipls) const
Post propagators for relation.
Passing Boolean variables.
Boolean integer variables.
Deterministic finite automaton (DFA)
virtual void constrain(const Space &best)
Member function constraining according to cost.
FloatNum step
Step by which a next solution has to have lower cost.
virtual FloatVar cost(void) const =0
Return variable with current cost.
FloatMaximizeSpace(FloatNum s=0.0)
Constructor with step s.
virtual FloatVar cost(void) const =0
Return variable with current cost.
virtual void constrain(const Space &best)
Member function constraining according to cost.
FloatMinimizeSpace(FloatNum s=0.0)
Constructor with step s.
FloatNum step
Step by which a next solution has to have lower cost.
Base class for heap allocated objects.
Home class for posting propagators
Passing integer arguments.
virtual IntVarArgs cost(void) const =0
Return variables with current costs.
IntLexMaximizeSpace(void)
Default constructor.
virtual void constrain(const Space &best)
Member function constraining according to increasing costs.
virtual IntVarArgs cost(void) const =0
Return variables with current costs.
virtual void constrain(const Space &best)
Member function constraining according to decreasing costs.
IntLexMinimizeSpace(void)
Default constructor.
virtual IntVar cost(void) const =0
Return variable with current cost.
IntMaximizeSpace(void)
Default constructor.
virtual void constrain(const Space &best)
Member function constraining according to increasing cost.
virtual IntVar cost(void) const =0
Return variable with current cost.
IntMinimizeSpace(void)
Default constructor.
virtual void constrain(const Space &best)
Member function constraining according to decreasing cost.
Class for specifying integer propagation levels used by minimodel.
IntPropLevel _linear
For n-ary linear.
IntPropLevel div(void) const
Return integer propagation level for division constraints.
IntPropLevel element(void) const
Return integer propagation level for element constraints.
IntPropLevel _sqr
For square.
IntPropLevel mod(void) const
Return integer propagation level for modulo constraints.
IntPropLevel linear(void) const
Return integer propagation level for non-binary linear constraints.
IntPropLevel max2(void) const
Return integer propagation level for binary maximum constraints.
IntPropLevel _mult
For multiplication.
IntPropLevel _mod
For modulo.
IntPropLevel ite(void) const
Return integer propagation level for if-then-else constraints.
IntPropLevel mult(void) const
Return integer propagation level for multiplication constraints.
IntPropLevel min(void) const
Return integer propagation level for non-binary minimum constraints.
IntPropLevel _sqrt
For square root.
IntPropLevel _ite
For if-then-else.
IntPropLevel nroot(void) const
Return integer propagation level for root constraints.
IntPropLevel abs(void) const
Return integer propagation level for absolute value constraints.
IntPropLevel _max
For n-ary maximum.
IntPropLevel _nroot
For root.
IntPropLevel _pow
For power.
IntPropLevel _element
For element.
IntPropLevel _div
For division.
IntPropLevel _abs
For absolute value.
IntPropLevel sqrt(void) const
Return integer propagation level for square root constraints.
IntPropLevels(IntPropLevel ipl=IPL_DEF)
Initialize with default propagation level.
static const IntPropLevels def
Default propagation levels for all constraints.
IntPropLevel linear2(void) const
Return integer propagation level for binary linear constraints.
IntPropLevel min2(void) const
Return integer propagation level for binary minimum constraints.
IntPropLevel _min2
For binary minimum.
IntPropLevel pow(void) const
Return integer propagation level for power constraints.
IntPropLevel _min
For minimum.
IntPropLevel _linear2
For binary linear.
IntPropLevel _max2
For binary maximum.
IntPropLevel max(void) const
Return integer propagation level for non-binary maximum constraints.
IntPropLevel sqr(void) const
Return integer propagation level for square constraints.
Passing integer variables.
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.
void post(Home home, bool t) const
Post propagator for relation (if t is false for negated relation)
Linear expressions over integer variables.
NodeType
Type of linear expression.
@ NT_CONST
Integer constant.
@ NT_SUB
Subtraction of linear terms.
@ NT_SUM_BOOL
Sum of Boolean variables.
@ NT_ADD
Addition of linear terms.
@ NT_SUM_INT
Sum of integer variables.
@ NT_VAR_BOOL
Linear term with Boolean variable.
@ NT_MUL
Multiplication by coefficient.
@ NT_NONLIN
Non-linear expression.
@ NT_VAR_INT
Linear term with integer variable.
LinIntExpr(void)
Default constructor.
friend class LinFloatExpr
~LinIntExpr(void)
Destructor.
void post(Home home, IntRelType irt, const IntPropLevels &ipls) const
Post propagator.
const LinIntExpr & operator=(const LinIntExpr &e)
Assignment operator.
NonLinIntExpr * nle(void) const
Return non-linear expression inside, or null if not non-linear.
Linear relations over integer variables.
void post(Home home, bool t, const IntPropLevels &ipls) const
Post propagator for relation (if t is false for negated relation)
Matrix-interface for arrays.
int width(void) const
Return the width of the matrix.
ValueType & operator()(int c, int r)
Access element (c, r) of the matrix.
Slice< A > slice(int fc, int tc, int fr, int tr) const
Access slice of the matrix.
Slice< A > col(int c) const
Access column c.
ArrayTraits< A >::ValueType ValueType
The type of elements of this array.
Slice< A > row(int r) const
Access row r.
ArgsType const get_array(void) const
Return an Args-array of the contents of the matrix.
Matrix(A a, int w, int h)
Basic constructor.
ArrayTraits< A >::ArgsType ArgsType
The type of the Args-array type for ValueType values.
int height(void) const
Return the height of the matrix.
Base class for non-linear float expressions.
virtual void post(Home home, FloatRelType frt, FloatVal c) const =0
Post expression to be in relation frt with c.
static FloatVar result(Home home, FloatVar *x)
Return fresh variable if x is null, x otherwise.
virtual ~NonLinFloatExpr(void)
Destructor.
virtual void post(Home home, FloatRelType frt, FloatVal c, BoolVar b) const =0
Post reified expression to be in relation frt with c.
virtual FloatVar post(Home home, FloatVar *ret) const =0
Return variable constrained to be equal to the expression.
Base class for non-linear expressions over integer variables.
virtual void post(Home home, IntRelType irt, int c, BoolVar b, const IntPropLevels &ipls) const =0
Post reified expression to be in relation irt with c.
static IntVar result(Home home, IntVar *x)
Return fresh variable if x is null, x otherwise.
virtual void post(Home home, IntRelType irt, int c, const IntPropLevels &ipls) const =0
Post expression to be in relation irt with c.
virtual IntVar post(Home home, IntVar *ret, const IntPropLevels &ipls) const =0
Return variable constrained to be equal to the expression.
virtual ~NonLinIntExpr(void)
Destructor.
Implementation of the actual expression tree.
Regular expressions over integer values.
Comparison relation (for two-sided comparisons)
SetRelType srt
Which relation.
SetExpr l
Left side of relation.
SetExpr r
Right side of relation.
SetCmpRel(const SetExpr &l, SetRelType srt, const SetExpr &r)
Constructor.
SetExpr(void)
Default constructor.
SetVar post(Home home) const
Post propagators for expression.
~SetExpr(void)
Destructor.
NodeType
Type of set expression.
@ NT_DUNION
Disjoint union.
@ NT_LEXP
Linear expression.
const SetExpr & operator=(const SetExpr &e)
Assignment operator.
void post(Home home, bool t) const
Post propagators for relation (or negated relation if t is false)
SetRel(void)
Default constructor.
Slice(const Matrix< A > &a, int fc, int tc, int fr, int tr)
Construct slice.
Slice & reverse(void)
Reverses the contents of the slice, and returns a reference to it.
ArrayTraits< A >::ArgsType ArgsType
The type of the Args-array type for ValueType values.
A reference-counted pointer to a SymmetryObject.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
void ite(Home home, BoolVar b, FloatVar x, FloatVar y, FloatVar z)
Post propagator for if-then-else constraint.
double FloatNum
Floating point number base type.
FloatRelType
Relation types for floats.
IntRelType
Relation types for integers.
IntPropLevel
Propagation levels for integer propagators.
@ _IPL_BITS
Number of bits required (internal)
@ IPL_DEF
Simple propagation levels.
Space(void)
Default constructor.
SetRelType
Common relation types for sets.
void print(const Search::Statistics &stat, bool restart)
Print statistics.
#define GECODE_MINIMODEL_EXPORT
Minimalistic modeling support.
Gecode toplevel namespace
FloatVal operator/(const FloatVal &x, const FloatVal &y)
void lex(Home home, const IntVarArgs &x, IntRelType r, const IntVarArgs &y, IntPropLevel ipl=IPL_DEF)
Post lexical order between x and y.
FloatVal operator-(const FloatVal &x)
bool operator<=(const FloatVal &x, const FloatVal &y)
void sin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
FloatVal operator+(const FloatVal &x)
Post propagator for SetVar SetOpType SetVar SetRelType r
SymmetryHandle rows_reflect(const Matrix< A > &m)
Reflect rows symmetry specification.
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
void atmost(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl=IPL_DEF)
Post constraint .
SetRel operator||(const SetExpr &, const SetExpr &)
Disjointness of set expressions.
void sqr(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
IntVar expr(Home home, const LinIntExpr &e, const IntPropLevels &ipls=IntPropLevels::def)
Post linear expression and return its value.
SetExpr operator&(const SetExpr &, const SetExpr &)
Intersection of set expressions.
Archive & operator<<(Archive &e, FloatNumBranch nl)
void atleast(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl=IPL_DEF)
Post constraint .
void cos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
IntRelType neg(IntRelType irt)
Return negated relation type of irt.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
void abs(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
bool operator<(const FloatVal &x, const FloatVal &y)
void element(Home home, IntSharedArray n, IntVar x0, IntVar x1, IntPropLevel ipl=IPL_DEF)
Post domain consistent propagator for .
SetExpr inter(const SetVarArgs &)
Intersection of set variables.
BoolExpr operator!(const BoolExpr &)
Negated Boolean expression.
Post propagator for SetVar SetOpType SetVar SetRelType SetVar z
BoolExpr operator^(const BoolExpr &, const BoolExpr &)
Exclusive-or of Boolean expressions.
void range(Home home, const IntVarArgs &x, SetVar y, SetVar z)
Post constraint .
void roots(Home home, const IntVarArgs &x, SetVar y, SetVar z)
Post constraint .
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void values(Home home, const IntVarArgs &x, IntSet y, IntPropLevel ipl=IPL_DEF)
Post constraint .
void acos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Post propagator for SetVar SetOpType SetVar y
SymmetryHandle columns_reflect(const Matrix< A > &m)
Reflect columns symmetry specification.
bool operator>(const FloatVal &x, const FloatVal &y)
BoolExpr operator&&(const BoolExpr &, const BoolExpr &)
Conjunction of Boolean expressions.
void log(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
bool operator>=(const FloatVal &x, const FloatVal &y)
SetExpr setdunion(const SetVarArgs &)
Disjoint union of set variables.
SymmetryHandle rows_interchange(const Matrix< A > &m)
Interchangeable rows symmetry specification.
LinIntExpr sum(const IntVarArgs &x)
Construct linear expression as sum of integer variables.
void exactly(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl=IPL_DEF)
Post constraint .
SetExpr setunion(const SetVarArgs &)
Union of set variables.
SetExpr singleton(const LinIntExpr &)
Singleton expression.
void exp(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void atan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Archive & operator>>(Archive &e, FloatNumBranch &nl)
void asin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
SetExpr operator|(const SetExpr &, const SetExpr &)
Union of set expressions.
void pow(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for $n\geq 0$.
LinIntExpr cardinality(const SetExpr &)
Cardinality of set expression.
FloatVal operator*(const FloatVal &x, const FloatVal &y)
Post propagator for SetVar x
SymmetryHandle diagonal_reflect(const Matrix< A > &m)
Reflect around main diagonal symmetry specification.
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)
LinIntExpr operator%(const LinIntExpr &x, const LinIntExpr &y)
Return expression for .
bool operator!=(const FloatVal &x, const FloatVal &y)
SymmetryHandle columns_interchange(const Matrix< A > &m)
Interchangeable columns symmetry specification.
void tan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
#define GECODE_VTABLE_EXPORT