ConstraintSet

Trait ConstraintSet 

Source
pub trait ConstraintSet<S, Sc: Score>: Send + Sync {
    // Required methods
    fn evaluate_all(&self, solution: &S) -> Sc;
    fn constraint_count(&self) -> usize;
    fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>;
    fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>;
    fn initialize_all(&mut self, solution: &S) -> Sc;
    fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc;
    fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc;
    fn reset_all(&mut self);
}

Required Methods§

Source

fn evaluate_all(&self, solution: &S) -> Sc

Evaluates all constraints and returns the total score.

Source

fn constraint_count(&self) -> usize

Returns the number of constraints in this set.

Source

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Evaluates each constraint individually and returns per-constraint results.

Useful for score explanation and debugging.

Source

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Evaluates each constraint with detailed match information.

Returns per-constraint analysis including all matches with entity justifications. This enables full score explanation features.

Source

fn initialize_all(&mut self, solution: &S) -> Sc

Initializes all constraints by inserting all entities.

Must be called before using incremental methods. Returns the total score from initialization.

Source

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Called when an entity is inserted.

Returns the total score delta from all constraints.

Source

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Called when an entity is retracted.

Returns the total score delta from all constraints.

Source

fn reset_all(&mut self)

Resets all constraints for a new solving session.

Implementations on Foreign Types§

Source§

impl<S, Sc, C0> ConstraintSet<S, Sc> for (C0,)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1> ConstraintSet<S, Sc> for (C0, C1)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2> ConstraintSet<S, Sc> for (C0, C1, C2)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3> ConstraintSet<S, Sc> for (C0, C1, C2, C3)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7, C8> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7, C8)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>, C8: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>, C8: IncrementalConstraint<S, Sc>, C9: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>, C8: IncrementalConstraint<S, Sc>, C9: IncrementalConstraint<S, Sc>, C10: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>, C8: IncrementalConstraint<S, Sc>, C9: IncrementalConstraint<S, Sc>, C10: IncrementalConstraint<S, Sc>, C11: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>, C8: IncrementalConstraint<S, Sc>, C9: IncrementalConstraint<S, Sc>, C10: IncrementalConstraint<S, Sc>, C11: IncrementalConstraint<S, Sc>, C12: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>, C8: IncrementalConstraint<S, Sc>, C9: IncrementalConstraint<S, Sc>, C10: IncrementalConstraint<S, Sc>, C11: IncrementalConstraint<S, Sc>, C12: IncrementalConstraint<S, Sc>, C13: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>, C8: IncrementalConstraint<S, Sc>, C9: IncrementalConstraint<S, Sc>, C10: IncrementalConstraint<S, Sc>, C11: IncrementalConstraint<S, Sc>, C12: IncrementalConstraint<S, Sc>, C13: IncrementalConstraint<S, Sc>, C14: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S, Sc, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15> ConstraintSet<S, Sc> for (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15)
where S: Send + Sync, Sc: Score, C0: IncrementalConstraint<S, Sc>, C1: IncrementalConstraint<S, Sc>, C2: IncrementalConstraint<S, Sc>, C3: IncrementalConstraint<S, Sc>, C4: IncrementalConstraint<S, Sc>, C5: IncrementalConstraint<S, Sc>, C6: IncrementalConstraint<S, Sc>, C7: IncrementalConstraint<S, Sc>, C8: IncrementalConstraint<S, Sc>, C9: IncrementalConstraint<S, Sc>, C10: IncrementalConstraint<S, Sc>, C11: IncrementalConstraint<S, Sc>, C12: IncrementalConstraint<S, Sc>, C13: IncrementalConstraint<S, Sc>, C14: IncrementalConstraint<S, Sc>, C15: IncrementalConstraint<S, Sc>,

Source§

fn evaluate_all(&self, solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, solution: &S, entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Source§

impl<S: Send + Sync, Sc: Score> ConstraintSet<S, Sc> for ()

Implement ConstraintSet for an empty tuple (no constraints).

Source§

fn evaluate_all(&self, _solution: &S) -> Sc

Source§

fn constraint_count(&self) -> usize

Source§

fn evaluate_each(&self, _solution: &S) -> Vec<ConstraintResult<Sc>>

Source§

fn evaluate_detailed(&self, _solution: &S) -> Vec<ConstraintAnalysis<Sc>>

Source§

fn initialize_all(&mut self, _solution: &S) -> Sc

Source§

fn on_insert_all(&mut self, _solution: &S, _entity_index: usize) -> Sc

Source§

fn on_retract_all(&mut self, _solution: &S, _entity_index: usize) -> Sc

Source§

fn reset_all(&mut self)

Implementors§