1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//! Contains structures and traits to define the decision making procedure of the [`Solver`].
//!
//! In general, it provides 3 traits:
//! - The [`Brancher`] which defines how a branching procedure (which selects an unfixed variable and splits the domain in some way, see [Section 4.3.1 of \[1\]](http://www.cse.unsw.com.au/~tw/brwhkr08.pdf)
//! for more information) should operate; the main method of this trait is the [`Brancher::next_decision`] method. An example implementation of this trait is the [`IndependentVariableValueBrancher`].
//! - The [`VariableSelector`] which defines the method required of a variable selector (including
//! the hooks into the solver); the main method of this trait is the
//! [`VariableSelector::select_variable`] method. An example implementation of this trait is the
//! [`AntiFirstFail`] strategy.
//! - The [`ValueSelector`] which defines the method required of a value selector (including the
//! hooks into the solver); the main method of this trait is the [`ValueSelector::select_value`]
//! method.
//!
//! A [`Brancher`] is expected to be passed to [`Solver::satisfy`], and [`Solver::optimise`]:
//!
//! \[1\] F. Rossi, P. Van Beek, and T. Walsh, Handbook of constraint programming. Elsevier, 2006.
pub use *;
pub use SelectionContext;
use crateSolver;
use crateIndependentVariableValueBrancher;
use crateValueSelector;
use crateAntiFirstFail;
use crateVariableSelector;