Trait ddo::Dominance

source ·
pub trait Dominance {
    type State;
    type Key;

    // Required methods
    fn get_key(&self, state: Arc<Self::State>) -> Option<Self::Key>;
    fn nb_dimensions(&self, state: &Self::State) -> usize;
    fn get_coordinate(&self, state: &Self::State, i: usize) -> isize;

    // Provided methods
    fn use_value(&self) -> bool { ... }
    fn partial_cmp(
        &self,
        a: &Self::State,
        val_a: isize,
        b: &Self::State,
        val_b: isize
    ) -> Option<DominanceCmpResult> { ... }
    fn cmp(
        &self,
        a: &Self::State,
        val_a: isize,
        b: &Self::State,
        val_b: isize
    ) -> Ordering { ... }
}
Expand description

This trait abstracts gives the possibility to model dominance relations between the states of a specific problem. The dominance relation is evaluated only for pairs of states that are mapped to the same key. A dominance relation exists if the coordinates of a state are greater or equal than those of another state for all given dimensions. The value obtained by the solver for each state can optionally be used as a coordinate in the comparison.

Required Associated Types§

Required Methods§

source

fn get_key(&self, state: Arc<Self::State>) -> Option<Self::Key>

Takes a state and returns a key that maps it to comparable states

source

fn nb_dimensions(&self, state: &Self::State) -> usize

Returns the number of dimensions to include in the comparison

source

fn get_coordinate(&self, state: &Self::State, i: usize) -> isize

Returns the i-th coordinate associated with the given state Greater is better for the dominance check

Provided Methods§

source

fn use_value(&self) -> bool

Whether to include the value as a coordinate in the dominance check

source

fn partial_cmp( &self, a: &Self::State, val_a: isize, b: &Self::State, val_b: isize ) -> Option<DominanceCmpResult>

Checks whether there is a dominance relation between the two states, given the coordinates provided by the function get_coordinate evaluated for all i in 0..self.nb_dimensions() Note: the states are assumed to have the same key, otherwise they are not comparable for dominance

source

fn cmp( &self, a: &Self::State, val_a: isize, b: &Self::State, val_b: isize ) -> Ordering

Comparator to order states by increasing value, regardless of their key

Implementors§