signature MODELING
structure Modeling : MODELING
The Modeling structure provides functionality to post arithmetic constraints using a convenient infix operator syntax.
Notes:
This module maps constraints onto regular sum constraints of the FD module. This transformation is not always optimal, that is, one might be able to devise a better constraint manually.Note also that since this module extensively performs folding of constant expressions, it eventually might exceed the implementation specific integer constant limit of finite domain constraints. In such a case, folding can be prevented by introducing a finite domain variable that is assigned a singleton value.
import signature MODELING from "x-alice:/lib/gecode/MODELING-sig"
import structure Modeling from "x-alice:/lib/gecode/Modeling"
signature MODELING =
sig
type space
type intvar
type boolvar
datatype conlevel =
BND | DEF | DOM | VAL
infix 7 `*
infix 6 `+ `-
infix 5 `#
infix 4 `= `<> `> `>= `< `<=
infix 3 `->
infix 3 `<-
infix 3 `==
infix 3 `&
infix 3 `|
infix 3 XOR
datatype domain_element =
`` of int
| `# of int * int
type domain = domain_element list
datatype b_var_sel =
B_DEGREE_MAX
| B_DEGREE_MIN
| B_MAX_MAX
| B_MAX_MIN
| B_MIN_MAX
| B_MIN_MIN
| B_NONE
| B_REGRET_MAX_MAX
| B_REGRET_MAX_MIN
| B_REGRET_MIN_MAX
| B_REGRET_MIN_MIN
| B_SIZE_MAX
| B_SIZE_MIN
datatype b_val_sel =
B_MAX
| B_MED
| B_MIN
| B_SPLIT_MAX
| B_SPLIT_MIN
datatype term =
FD of intvar
| ` of int
| `+ of term * term
| `- of term * term
| `* of term * term
| SUMV of intvar vector
datatype rel =
`< of term * term
| `<= of term * term
| `= of term * term
| `<> of term * term
| `>= of term * term
| `> of term * term
val fdterm : space * domain -> term
val fdtermVec : space * int * domain -> term vector
val post : space * rel * conlevel -> unit
val distinct : space * term vector * conlevel -> unit
val branch : space * term vector * b_var_sel * b_val_sel -> unit
datatype b_term =
BV of boolvar
| BC of bool
| HOLDS of rel
| `== of b_term * b_term
| `-> of b_term * b_term
| `<- of b_term * b_term
| `! of b_term
| `& of b_term * b_term
| XOR of b_term * b_term
| `| of b_term * b_term
val boolterm : space -> b_term
val booltermVec : space * int -> b_term vector
val postTrue : space * b_term -> unit
end
The type of first class comutational spaces. Usually equal to SPACE.space.
The type of finite domain variables.
The type of boolean constraint variables. Fundamentally, they are FD variables constrained to the 0-1 domain.
Type to identify the eagerness of propagation.
When the required level is not implemented for a propagator,
the closest, stricter version is used.
DOM: Domain Proagatin. Strictest.
BND: Bounds Propagation.
VAL: Value Propagation. Most loose.
DEF: The default for the propagator.
Used to describe domains of finite domain variables. `` i denotes the single integer value i and >`#(l,h) denotes all integer values between l and h. For example, [``3,`#(5,10)] denotes [3,5,6,7,8,9,10].
This datatype is used to post arithmetic constraints.
This datatype is used to post equations, inequations, and disequations.
returns a freshly created finite domain variable term initialized with d.
returns a vector of n freshly created finite domain variable terms initialized with d.
post the constraint denoted by r in space s using consistency level cl.
post the constraint that all variables in the vector v in space s have to be distinct using consistency level cl. If the vector contains terms other than FD variables, an exception is thrown.
post a branching on the variables in the vector v in space s, with b_var_sel and b_val_sel as the branching strategies. If the vector contains terms other than FD variables, an exception is thrown.
This datatype is used to post boolean constraints.
returns a freshly created true/false domain variable term.
returns a vector of n freshly created true/false domain variable terms.
post the constraint that the boolean term denoted by t holds in space s.