Skip to main content

Move

Trait Move 

Source
pub trait Move<S: PlanningSolution>:
    Send
    + Sync
    + Debug {
    type Undo: Send;

    // Required methods
    fn is_doable<D: Director<S>>(&self, score_director: &D) -> bool;
    fn do_move<D: Director<S>>(&self, score_director: &mut D) -> Self::Undo;
    fn undo_move<D: Director<S>>(
        &self,
        score_director: &mut D,
        undo: Self::Undo,
    );
    fn descriptor_index(&self) -> usize;
    fn entity_indices(&self) -> &[usize];
    fn variable_name(&self) -> &str;
    fn tabu_signature<D: Director<S>>(
        &self,
        score_director: &D,
    ) -> MoveTabuSignature;

    // Provided methods
    fn requires_hard_improvement(&self) -> bool { ... }
    fn for_each_affected_entity(
        &self,
        visitor: &mut dyn FnMut(MoveAffectedEntity<'_>),
    ) { ... }
}
Expand description

A move that modifies one or more planning variables.

Moves are fully monomorphized for maximum performance - no boxing, no virtual dispatch. Undo is handled by move-owned typed data, not boxed director callbacks.

§Type Parameters

  • S - The planning solution type

§Implementation Notes

  • Moves should be lightweight
  • Moves are NEVER cloned - ownership transfers via arena indices
  • Methods are generic over D to allow use with concrete directors

Required Associated Types§

Required Methods§

Source

fn is_doable<D: Director<S>>(&self, score_director: &D) -> bool

Source

fn do_move<D: Director<S>>(&self, score_director: &mut D) -> Self::Undo

Source

fn undo_move<D: Director<S>>(&self, score_director: &mut D, undo: Self::Undo)

Source

fn descriptor_index(&self) -> usize

Source

fn entity_indices(&self) -> &[usize]

Source

fn variable_name(&self) -> &str

Source

fn tabu_signature<D: Director<S>>( &self, score_director: &D, ) -> MoveTabuSignature

Provided Methods§

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<S, M> Move<S> for &M
where S: PlanningSolution, M: Move<S> + ?Sized,

Source§

type Undo = <M as Move<S>>::Undo

Source§

fn is_doable<D: Director<S>>(&self, score_director: &D) -> bool

Source§

fn do_move<D: Director<S>>(&self, score_director: &mut D) -> Self::Undo

Source§

fn undo_move<D: Director<S>>(&self, score_director: &mut D, undo: Self::Undo)

Source§

fn descriptor_index(&self) -> usize

Source§

fn entity_indices(&self) -> &[usize]

Source§

fn variable_name(&self) -> &str

Source§

fn requires_hard_improvement(&self) -> bool

Source§

fn tabu_signature<D: Director<S>>( &self, score_director: &D, ) -> MoveTabuSignature

Source§

fn for_each_affected_entity( &self, visitor: &mut dyn FnMut(MoveAffectedEntity<'_>), )

Implementors§

Source§

impl<S> Move<S> for DescriptorMoveUnion<S>
where S: PlanningSolution + 'static, S::Score: Score,

Source§

type Undo = DescriptorMoveUnionUndo<S>

Source§

impl<S> Move<S> for DescriptorChangeMove<S>
where S: PlanningSolution + 'static,

Source§

impl<S> Move<S> for DescriptorPillarChangeMove<S>
where S: PlanningSolution + 'static,

Source§

impl<S> Move<S> for DescriptorPillarSwapMove<S>
where S: PlanningSolution + 'static,

Source§

impl<S> Move<S> for DescriptorRuinRecreateMove<S>
where S: PlanningSolution + 'static, S::Score: Score,

Source§

impl<S> Move<S> for DescriptorSwapMove<S>
where S: PlanningSolution + 'static,

Source§

impl<S> Move<S> for CompoundScalarMove<S>

Source§

impl<S> Move<S> for ConflictRepairMove<S>

Source§

impl<S> Move<S> for RuinRecreateMove<S>

Source§

impl<S, M> Move<S> for MoveCandidateRef<'_, S, M>
where S: PlanningSolution, M: Move<S>,

Source§

impl<S, M> Move<S> for SequentialCompositeMove<S, M>
where S: PlanningSolution, M: Move<S>,

Source§

type Undo = (<M as Move<S>>::Undo, <M as Move<S>>::Undo)

Source§

impl<S, V> Move<S> for NeighborhoodMove<S, V>
where S: PlanningSolution + 'static, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

type Undo = NeighborhoodMoveUndo<S, V>

Source§

impl<S, V> Move<S> for ListMoveUnion<S, V>
where S: PlanningSolution, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

type Undo = ListMoveUnionUndo<S, V>

Source§

impl<S, V> Move<S> for ScalarMoveUnion<S, V>
where S: PlanningSolution, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

type Undo = ScalarMoveUnionUndo<S, V>

Source§

impl<S, V> Move<S> for ChangeMove<S, V>
where S: PlanningSolution, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for KOptMove<S, V>
where S: PlanningSolution, V: Clone + Send + Sync + Debug + 'static,

Source§

type Undo = Vec<V>

Source§

impl<S, V> Move<S> for ListChangeMove<S, V>
where S: PlanningSolution, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for ListReverseMove<S, V>
where S: PlanningSolution, V: Clone + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for ListRuinMove<S, V>
where S: PlanningSolution, V: Clone + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for ListSwapMove<S, V>
where S: PlanningSolution, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for PillarChangeMove<S, V>
where S: PlanningSolution, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for PillarSwapMove<S, V>
where S: PlanningSolution, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

type Undo = (Vec<(usize, Option<V>)>, Vec<(usize, Option<V>)>)

Source§

impl<S, V> Move<S> for RuinMove<S, V>
where S: PlanningSolution, V: Clone + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for SublistChangeMove<S, V>
where S: PlanningSolution, V: Clone + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for SublistSwapMove<S, V>
where S: PlanningSolution, V: Clone + Send + Sync + Debug + 'static,

Source§

impl<S, V> Move<S> for SwapMove<S, V>
where S: PlanningSolution, V: Clone + PartialEq + Send + Sync + Debug + 'static,

Source§

type Undo = (Option<V>, Option<V>)