Skip to main content

NeatStrategy

Struct NeatStrategy 

Source
pub struct NeatStrategy<B: Backend> { /* private fields */ }
Expand description

Custom NEAT harness. Does not implement Strategy — see the module docs.

Implementations§

Source§

impl<B: Backend> NeatStrategy<B>

Source

pub fn new() -> Self

Build a new (stateless) NEAT harness.

Source

pub fn init( &self, params: &NeatParams, rng: &mut dyn Rng, device: &<B as BackendTypes>::Device, ) -> NeatState

Build the initial state: a per-run registry plus pop_size minimal genomes (aligned ids, per-individual random weights from one SeedPurpose::Init substream).

device is part of the harness signature for symmetry with the tensor strategies; NEAT genomes are host-side, so it is unused here.

§Panics

Panics if weight_init_std is non-finite (+∞ or NaN).

Source

pub fn ask( &self, params: &NeatParams, state: &NeatState, rng: &mut dyn Rng, ) -> (Vec<TopologyGenome>, NeatState)

Propose the next population.

Before the first tell (resident fitness still empty), the unchanged resident population is returned for evaluation. Afterwards the already-speciated residents drive reproduction: stagnant species are removed (top-K protected), offspring are apportioned by size-adjusted fitness (largest-remainder, summing exactly to pop_size), and each species contributes its champion unchanged (if large enough) plus offspring from intra-species crossover (rare interspecies mating) or mutation-only, all followed by the four mutation operators. Four StdRng substreams (selection, crossover, mutation, misc) keep operator RNG independent.

Source

pub fn tell( &self, params: &NeatParams, population: Vec<TopologyGenome>, fitness: Vec<f32>, state: NeatState, rng: &mut dyn Rng, ) -> NeatState

Install the evaluated population and its (maximization) fitness, speciate, update per-species best/stagnation and the global best-so-far, and bump the generation.

Speciation lives here — not in ask — because this is the only point where the new population, its fitness, and the prior species’ cloned representatives all coexist consistently (so member indices stay valid and each species’ next representative is cloned from a live member).

§Fitness hygiene

This is NEAT’s driver chokepoint (ADR 0034): NEAT is its own driver and does not run through EvolutionaryHarness, so there is no harness above it to sanitize fitness. tell therefore applies sanitize_fitness to the incoming fitness (NaN → −∞, +∞ → f32::MAX, −∞ and finite pass through) before it is stored or handed to species::speciate, so a non-finite fitness can never poison speciation, offspring apportionment, or best-so-far tracking.

§Panics

Panics if population.len() differs from fitness.len().

Source

pub fn best<'s>( &self, state: &'s NeatState, ) -> Option<(&'s TopologyGenome, f32)>

Best genome and its fitness seen across all generations.

Returns None before the first tell.

Trait Implementations§

Source§

impl<B: Clone + Backend> Clone for NeatStrategy<B>

Source§

fn clone(&self) -> NeatStrategy<B>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<B: Copy + Backend> Copy for NeatStrategy<B>

Source§

impl<B: Debug + Backend> Debug for NeatStrategy<B>

Source§

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

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

impl<B: Default + Backend> Default for NeatStrategy<B>

Source§

fn default() -> NeatStrategy<B>

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

Auto Trait Implementations§

§

impl<B> Freeze for NeatStrategy<B>

§

impl<B> RefUnwindSafe for NeatStrategy<B>

§

impl<B> Send for NeatStrategy<B>

§

impl<B> Sync for NeatStrategy<B>

§

impl<B> Unpin for NeatStrategy<B>

§

impl<B> UnsafeUnpin for NeatStrategy<B>

§

impl<B> UnwindSafe for NeatStrategy<B>

Blanket Implementations§

Source§

impl<T> Adaptor<()> for T

Source§

fn adapt(&self)

Adapt the type to be passed to a metric.
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<C> CloneExpand for C
where C: Clone,

Source§

fn __expand_clone_method(&self, _scope: &mut Scope) -> C

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> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoComptime for T

Source§

fn comptime(self) -> Self

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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
Source§

impl<T> TuneInputs for T
where T: Clone + Send + Sync + 'static,

Source§

type At<'a> = T

The concrete input type at lifetime 'a.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more