Skip to main content

ArchNasStrategy

Struct ArchNasStrategy 

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

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

The strategy is stateless; all evolving state lives in NasState. Drive it with the same ask/tell loop as a Strategy:

let strat = ArchNasStrategy::<B>::new();
let mut state = strat.init(&params, &mut rng, &device);
for _ in 0..generations {
    let (genome, next) = strat.ask(&params, &state, &mut rng, &device);
    let fitness = fitness_fn.evaluate(&genome, &device);
    state = strat.tell(&params, genome, fitness, next, &mut rng);
}
let (arch_id, weights, fitness) = strat.best(&state).unwrap();

Implementations§

Source§

impl<B: Backend> ArchNasStrategy<B>

Source

pub fn new() -> Self

Build a new (stateless) NAS strategy.

Source

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

Build the initial state: uniform random architecture ids and Gaussian-initialized active weights (padding zeroed).

fitness is left empty and best_fitness is −∞; the first tell populates both.

§Panics

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

Source

pub fn ask( &self, params: &NasParams, state: &NasState<B>, rng: &mut dyn Rng, device: &<B as BackendTypes>::Device, ) -> (NasGenome<B>, NasState<B>)

Propose the next population.

Before the first tell (resident fitness still empty) the unchanged resident population is returned for evaluation. Afterwards the method produces offspring: elite_count best residents carried over unmutated, then tournament selection, same-architecture blend crossover (single-parent copy when parents’ architectures differ), and either a per-child architecture mutation (re-initializing the child’s active weights) at arch_mutation_rate or an isotropic Gaussian weight perturbation. Five independent host substreams are derived from rng: selection, crossover, mutation, architecture (re)assignment, and weight re-initialization.

The returned NasGenome is freshly allocated (no struct-level clone).

§Panics

Panics if weight_init_std or weight_mutation_std is non-finite (+∞ or NaN), or if the resident weight tensor cannot be read back to the host as f32.

Source

pub fn tell( &self, params: &NasParams, population: NasGenome<B>, fitness: Tensor<B, 1>, state: NasState<B>, _rng: &mut dyn Rng, ) -> NasState<B>

Consume a population’s fitness and produce the next state.

Records the told population as the new residents, updates the best-ever (arch_id, weights, fitness) triple, and increments the generation. fitness follows the canonical maximise convention (higher is better).

§Fitness hygiene

This is the ArchNasStrategy driver chokepoint (ADR 0034): the strategy is its own driver and does not run through EvolutionaryHarness, so there is no harness above it. tell applies sanitize_fitness to the host fitness vector (NaN → −∞, +∞ → f32::MAX, −∞ and finite pass through) before update_best and before it is stored as state.fitness, so a non-finite fitness can never become an immortal champion nor win the next ask’s elite carry or tournament.

§Panics

Panics if the fitness tensor cannot be read back to the host as f32.

Source

pub fn best(&self, state: &NasState<B>) -> Option<(usize, Tensor<B, 1>, f32)>

Best-ever individual: (arch_id, padded weights, fitness).

The weight tensor has length max_param_count (trailing padding retained). Returns None before the first tell.

Trait Implementations§

Source§

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

Source§

fn clone(&self) -> ArchNasStrategy<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 ArchNasStrategy<B>

Source§

impl<B: Debug + Backend> Debug for ArchNasStrategy<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 ArchNasStrategy<B>

Source§

fn default() -> ArchNasStrategy<B>

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

Auto Trait Implementations§

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