pub struct Backjump<R: Rule> {
    level: u32,
    front: Vec<CellRef<R>>,
    learnt: Vec<CellRef<R>>,
}
Expand description

(Experimental) Adding Backjumping to the original lifesrc algorithm.

Backjumping will reduce the number of steps, but each step will takes a much longer time. The current implementation is slower for most search, only useful for large (e.g., 64x64) still lifes.

Currently it is only supported for non-Generations rules.

Fields§

§level: u32

The global decision level for assigning the cell state.

§front: Vec<CellRef<R>>

All cells in the front.

§learnt: Vec<CellRef<R>>

A learnt clause.

Trait Implementations§

source§

impl<R: Rule<IsGen = False>> Algorithm<R> for Backjump<R>

§

type Reason = Reason<R>

Reasons for setting a cell.
§

type ConflReason = ConflReason<R>

Reasons for a conflict. Ignored in LifeSrc algorithm.
source§

fn new() -> Self

Generate new algorithm data.
source§

fn confl_from_cell(cell: CellRef<R>) -> Self::ConflReason

Conflict when constitifying a cell.
source§

fn confl_from_sym(cell: CellRef<R>, sym: CellRef<R>) -> Self::ConflReason

Conflict from symmetry.
source§

fn init_front(world: World<R, Self>) -> World<R, Self>

Conflict when constitifying a cell.
source§

fn set_cell( world: &mut World<R, Self>, cell: CellRef<R>, state: State, reason: Self::Reason ) -> Result<(), Self::ConflReason>

Sets the state of a cell, push it to the set_stack, and update the neighborhood descriptor of its neighbors. Read more
source§

fn go(world: &mut World<R, Self>, step: &mut u64) -> bool

Keeps proceeding and backtracking, until there are no more cells to examine (and returns true), or the backtracking goes back to the time before the first cell is set (and returns false). Read more
source§

fn retreat(world: &mut World<R, Self>) -> bool

Retreats to the last time when a unknown cell is decided by choice, and switch that cell to the other state. Read more
source§

fn deser_reason( world: &World<R, Self>, ser: &ReasonSer ) -> Result<Self::Reason, Error>

Available on crate feature serde only.
Restore the reason from a ReasonSer.
source§

impl<R: Clone + Rule> Clone for Backjump<R>

source§

fn clone(&self) -> Backjump<R>

Returns a copy 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<R: Debug + Rule> Debug for Backjump<R>

source§

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

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

impl<R: Rule<IsGen = False>> Default for Backjump<R>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<R: PartialEq + Rule> PartialEq for Backjump<R>

source§

fn eq(&self, other: &Backjump<R>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<R: Eq + Rule> Eq for Backjump<R>

source§

impl<R: Rule> Sealed for Backjump<R>

source§

impl<R: Rule> StructuralEq for Backjump<R>

source§

impl<R: Rule> StructuralPartialEq for Backjump<R>

Auto Trait Implementations§

§

impl<R> !RefUnwindSafe for Backjump<R>

§

impl<R> !Send for Backjump<R>

§

impl<R> !Sync for Backjump<R>

§

impl<R> Unpin for Backjump<R>

§

impl<R> !UnwindSafe for Backjump<R>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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> ToOwned for Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.
source§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

source§

fn vzip(self) -> V