Struct Vsids

Source
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 EARLY_EXIT: bool> Clone for Vsids<EARLY_EXIT>

Source§

fn clone(&self) -> Vsids<EARLY_EXIT>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<const EARLY_EXIT: bool> Debug for Vsids<EARLY_EXIT>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<const EARLY_EXIT: bool> Default for Vsids<EARLY_EXIT>

Source§

fn default() -> Vsids<EARLY_EXIT>

Returns the “default value” for a type. Read more
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.

§Safety

Should only be used internally and with care due to the unchecked indexing.

Source§

type Output = f64

The returned type after indexing.
Source§

fn index(&self, index: usize) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
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.

§Safety

Again, should only be used internally and with care due to the unchecked indexing.

Source§

fn index_mut(&mut self, index: usize) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<const EARLY_EXIT: bool> PartialEq for Vsids<EARLY_EXIT>

Source§

fn eq(&self, other: &Vsids<EARLY_EXIT>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<const EARLY_EXIT: bool> PartialOrd for Vsids<EARLY_EXIT>

Source§

fn partial_cmp(&self, other: &Vsids<EARLY_EXIT>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

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

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>

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)

Bumps the activity scores of the specified literals. Each literal’s score is incremented by activity_inc.

Source§

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.

Source§

fn decisions(&self) -> usize

Returns the total number of decisions made by this strategy instance.

Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.