46#ifndef GECODE_MINIMODEL_HH
47#define GECODE_MINIMODEL_HH
51#ifdef GECODE_HAS_SET_VARS
54#ifdef GECODE_HAS_FLOAT_VARS
58#ifdef GECODE_HAS_FAULT_INJECTION
69#if !defined(GECODE_STATIC_LIBS) && \
70 (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
72#ifdef GECODE_BUILD_MINIMODEL
73#define GECODE_MINIMODEL_EXPORT __declspec( dllexport )
75#define GECODE_MINIMODEL_EXPORT __declspec( dllimport )
80#ifdef GECODE_GCC_HAS_CLASS_VISIBILITY
82#define GECODE_MINIMODEL_EXPORT __attribute__ ((visibility("default")))
86#define GECODE_MINIMODEL_EXPORT
92#ifndef GECODE_BUILD_MINIMODEL
93#define GECODE_LIBRARY_NAME "MiniModel"
215#ifdef GECODE_HAS_SET_VARS
218#ifdef GECODE_HAS_FLOAT_VARS
241 void*
operator new(
size_t s);
243 void operator delete(
void* p,
size_t s);
252 namespace MiniModel {
253 class ArithNonLinIntExpr;
259 friend class MiniModel::ArithNonLinIntExpr;
260#ifdef GECODE_HAS_SET_VARS
263#ifdef GECODE_HAS_FLOAT_VARS
292#ifdef GECODE_HAS_FAULT_INJECTION
814#ifdef GECODE_HAS_FLOAT_VARS
833 void*
operator new(
size_t s);
835 void operator delete(
void* p,
size_t s);
1185#ifdef GECODE_HAS_SET_VARS
1273 void post(
Home home,
bool t)
const;
1416#ifdef GECODE_HAS_FLOAT_VARS
1421#ifdef GECODE_HAS_SET_VARS
1513#ifdef GECODE_HAS_SET_VARS
1525#ifdef GECODE_HAS_FLOAT_VARS
1542#ifdef GECODE_HAS_SET_VARS
1633#ifdef GECODE_HAS_FLOAT_VARS
1638#ifdef GECODE_HAS_SET_VARS
1663 namespace MiniModel {
1673 friend class MiniModel::ExpInfo;
1682 std::string toString(
void)
const;
1699 const REG& operator =(
const REG& r);
1702 REG operator +(
const REG& r);
1704 REG& operator +=(
const REG& r);
1706 REG operator |(
const REG& r);
1708 REG& operator |=(
const REG& r);
1710 REG operator *(
void);
1712 REG operator +(
void);
1714 REG operator ()(
unsigned int n,
unsigned int m);
1716 REG operator ()(
unsigned int n);
1718 template<
class Char,
class Traits>
1719 std::basic_ostream<Char,Traits>&
1720 print(std::basic_ostream<Char,Traits>& os)
const;
1730 template<
class Char,
class Traits>
1731 std::basic_ostream<Char,Traits>&
1796#ifdef GECODE_HAS_FLOAT_VARS
1841#ifdef GECODE_HAS_MPFR
1900#ifdef GECODE_HAS_FLOAT_VARS
1903 channel(Home home, FloatVar f);
1905#ifdef GECODE_HAS_SET_VARS
2093#ifdef GECODE_HAS_SET_VARS
2134 template<
class>
class Matrix;
2235 Matrix(A a,
int w,
int h);
2252 int width(
void)
const;
2293 template<
class Char,
class Traits,
class A>
2294 std::basic_ostream<Char,Traits>&
2300 template<
class Char,
class Traits,
class A>
2301 std::basic_ostream<Char,Traits>&
2336#ifdef GECODE_HAS_SET_VARS
2482#ifdef GECODE_HAS_FLOAT_VARS
Traits of arrays in Gecode.
Miscealloneous Boolean expressions.
virtual ~Misc(void)
Destructor.
Misc(void)
Default constructor.
virtual void post(Home home, BoolVar b, bool neg, const IntPropLevels &ipls)=0
BoolExpr(const SetRel &rs)
Construct expression for reified set relation.
BoolExpr(const BoolVar &x)
Construct expression for variable.
BoolExpr(const SetCmpRel &rs)
Construct expression for reified set relation.
BoolExpr(const LinFloatRel &rfl)
Construct expression for reified float relation.
BoolExpr(const BoolExpr &e)
Copy constructor.
BoolExpr(Misc *m)
Construct expression for miscellaneous Boolean expression.
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.
BoolExpr(const BoolExpr &e, NodeType t)
Construct expression for negation.
const BoolExpr & operator=(const BoolExpr &e)
Assignment operator.
BoolExpr(const LinIntRel &rl)
Construct expression for reified linear relation.
BoolExpr(const BoolExpr &l, NodeType t, const BoolExpr &r)
Construct expression for type and subexpresssions.
BoolVar expr(Home home, const IntPropLevels &ipls) const
Post propagators for expression.
~BoolExpr(void)
Destructor.
friend BoolExpr operator&&(const BoolExpr &, const BoolExpr &)
friend BoolExpr operator||(const BoolExpr &, const BoolExpr &)
void rel(Home home, const IntPropLevels &ipls) const
Post propagators for relation.
Passing Boolean variables.
Boolean integer variables.
Deterministic finite automaton (DFA).
FloatNum step
Step by which a next solution has to have lower cost.
virtual FloatVar cost(void) const =0
Return variable with current cost.
virtual void constrain(const Space &best)
Member function constraining according to cost.
FloatMaximizeSpace(FloatNum s=0.0)
Constructor with step s.
virtual FloatVar cost(void) const =0
Return variable with current cost.
FloatMinimizeSpace(FloatNum s=0.0)
Constructor with step s.
FloatNum step
Step by which a next solution has to have lower cost.
virtual void constrain(const Space &best)
Member function constraining according to 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.
virtual void constrain(const Space &best)
Member function constraining according to increasing costs.
IntLexMaximizeSpace(void)
Default constructor.
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.
virtual void constrain(const Space &best)
Member function constraining according to decreasing cost.
IntMinimizeSpace(void)
Default constructor.
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.
void post(Home home, FloatRelType frt, const BoolVar &b) const
Post reified propagator.
LinFloatExpr(const LinFloatExpr &e)
Copy constructor.
LinFloatExpr(const FloatVarArgs &x)
Create sum expression.
LinFloatExpr(NonLinFloatExpr *e)
Create non-linear expression.
FloatVar post(Home home) const
Post propagator and return variable for value.
LinFloatExpr(FloatVal a, const LinFloatExpr &e)
Create expression for multiplication.
LinFloatExpr(const FloatVal &c)
Create expression for constant c.
LinFloatExpr(const LinFloatExpr &e0, NodeType t, const FloatVal &c)
Create expression for type and subexpression.
LinFloatExpr(const FloatVar &x, FloatVal a)
Create expression.
LinFloatExpr(const FloatValArgs &a, const FloatVarArgs &x)
Create sum expression.
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.
LinFloatExpr(const LinFloatExpr &e0, NodeType t, const LinFloatExpr &e1)
Create expression for type and subexpressions.
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.
LinFloatExpr(const FloatVar &x)
Create expression.
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(const IntArgs &a, const BoolVarArgs &x)
Create sum expression.
LinIntExpr(const BoolVar &x, int a=1)
Create expression.
LinIntExpr(const LinIntExpr &e0, NodeType t, const LinIntExpr &e1)
Create expression for type and subexpressions.
LinIntExpr(void)
Default constructor.
LinIntExpr(const BoolVarArgs &x)
Create sum expression.
LinIntExpr(const IntVarArgs &x)
Create sum expression.
friend class LinFloatExpr
LinIntExpr(const LinIntExpr &e0, NodeType t, int c)
Create expression for type and subexpression.
LinIntExpr(NonLinIntExpr *e)
Create non-linear expression.
LinIntExpr(const LinIntExpr &e)
Copy constructor.
LinIntExpr(int a, const LinIntExpr &e)
Create expression for multiplication.
LinIntExpr(const IntArgs &a, const IntVarArgs &x)
Create sum expression.
void post(Home home, IntRelType irt, const BoolVar &b, const IntPropLevels &ipls) const
Post reified propagator.
IntVar post(Home home, const IntPropLevels &ipls) const
Post propagator and return variable for value.
~LinIntExpr(void)
Destructor.
void post(Home home, IntRelType irt, const IntPropLevels &ipls) const
Post propagator.
const LinIntExpr & operator=(const LinIntExpr &e)
Assignment operator.
LinIntExpr(int c)
Create expression for constant c.
LinIntExpr(const IntVar &x, int a=1)
Create expression.
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.
Regular expressions over integer values.
REG(const IntArgs &x)
Initialize as alternative of integers.
REG(int s)
Initialize as single integer s.
REG(const REG &r)
Initialize from regular expression r.
REG(void)
Initialize as empty sequence (epsilon).
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.
void post(Home home, SetRelType srt, const SetExpr &e) const
Post propagators for relation.
~SetExpr(void)
Destructor.
NodeType
Type of set expression.
@ NT_DUNION
Disjoint union.
@ NT_LEXP
Linear expression.
const SetExpr & operator=(const SetExpr &e)
Assignment operator.
SetExpr(const SetExpr &e)
Copy constructor.
SetExpr(const IntSet &s)
Construct expression for constant.
SetExpr(const SetVar &x)
Construct expression for variable.
SetExpr(const SetExpr &l, NodeType t, const SetExpr &r)
Construct expression for type and subexpresssions.
void post(Home home, BoolVar b, bool t, SetRelType srt, const SetExpr &e) const
Post propagators for reified relation.
SetExpr(const SetExpr &e, NodeType t)
Construct expression for negation.
SetExpr(const LinIntExpr &x)
Construct expression for integer variable.
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)
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.
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 .
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 &)
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 .
LinIntExpr cardinality(const SetExpr &)
Cardinality of set expression.
FloatVal operator*(const FloatVal &x, const FloatVal &y)
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 .
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