pub struct Vsids<const EARLY_EXIT: bool = false> { /* private fields */ }Expand description
A VSIDS (Variable State Independent Decaying Sum) implementation without a binary heap.
This strategy maintains an activity score for each literal. When picking a variable,
it iterates through all literals to find the unassigned one with the highest score.
This makes the pick operation O(N) where N is the number of variables.
EARLY_EXIT is a compile-time constant. If true, the pick operation may
exit early if a literal with a sufficiently high score is found, potentially
saving computation but possibly leading to suboptimal choices in some cases.
Trait Implementations§
Source§impl<const E: bool> Index<usize> for Vsids<E>
Index trait implementation for the VSIDS variable selection strategy.
Allows for indexing into the scores vector.
impl<const E: bool> Index<usize> for Vsids<E>
Index trait implementation for the VSIDS variable selection strategy.
Allows for indexing into the scores vector.
§Safety
Should only be used internally and with care due to the unchecked indexing.
Source§impl<const E: bool> IndexMut<usize> for Vsids<E>
IndexMut trait implementation for the VSIDS variable selection strategy.
Allows for mutable indexing into the scores vector.
impl<const E: bool> IndexMut<usize> for Vsids<E>
IndexMut trait implementation for the VSIDS variable selection strategy.
Allows for mutable indexing into the scores vector.
§Safety
Again, should only be used internally and with care due to the unchecked indexing.
Source§impl<const EARLY_EXIT: bool> PartialOrd for Vsids<EARLY_EXIT>
impl<const EARLY_EXIT: bool> PartialOrd for Vsids<EARLY_EXIT>
Source§impl<L: Literal, const E: bool> VariableSelection<L> for Vsids<E>
VariableSelection trait implementation for the VSIDS variable selection strategy.
impl<L: Literal, const E: bool> VariableSelection<L> for Vsids<E>
VariableSelection trait implementation for the VSIDS variable selection strategy.
Source§fn new<C: AsRef<[L]>>(num_vars: usize, _: &[L], _: &[C]) -> Self
fn new<C: AsRef<[L]>>(num_vars: usize, _: &[L], _: &[C]) -> Self
Creates a new instance of the Vsids strategy.
Initialises scores for all literals to zero and activity_inc to 1.0.
Source§fn pick<A: Assignment>(&mut self, assignment: &A) -> Option<L>
fn pick<A: Assignment>(&mut self, assignment: &A) -> Option<L>
Picks an unassigned variable with the highest activity score by iterating through all literals.
This operation is O(N) where N is the number of variables.
If EARLY_EXIT (compile-time const generic E) is true, the iteration
might stop early if a literal’s score exceeds self.activity_inc * 5.0.
Source§fn bumps<T: IntoIterator<Item = L>>(&mut self, vars: T)
fn bumps<T: IntoIterator<Item = L>>(&mut self, vars: T)
Bumps the activity scores of the specified literals.
Each literal’s score is incremented by activity_inc.
Source§fn decay(&mut self, decay: f64)
fn decay(&mut self, decay: f64)
Decays the activity scores.
Similar to VsidsHeap, activity_inc is divided by decay (effectively increasing it).
If activity_inc exceeds VSIDS_RESCALE_THRESHOLD, all scores are rescaled by
multiplying with VSIDS_RESCALE_FACTOR, and activity_inc is also set to
VSIDS_RESCALE_FACTOR (note: this differs slightly from VsidsHeap which rescales activity_inc
by the same factor; here it’s reset). This prevents overflow.
impl<const EARLY_EXIT: bool> StructuralPartialEq for Vsids<EARLY_EXIT>
Auto Trait Implementations§
impl<const EARLY_EXIT: bool> Freeze for Vsids<EARLY_EXIT>
impl<const EARLY_EXIT: bool> RefUnwindSafe for Vsids<EARLY_EXIT>
impl<const EARLY_EXIT: bool> Send for Vsids<EARLY_EXIT>
impl<const EARLY_EXIT: bool> Sync for Vsids<EARLY_EXIT>
impl<const EARLY_EXIT: bool> Unpin for Vsids<EARLY_EXIT>
impl<const EARLY_EXIT: bool> UnwindSafe for Vsids<EARLY_EXIT>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more