Skip to main content

Archive

Struct Archive 

Source
pub struct Archive { /* private fields */ }
Expand description

CVT quality-diversity archive: capacity niches, each holding the best solution found for it.

Implementations§

Source§

impl Archive

Source

pub fn try_new( dim: usize, qd_lb: &[f64], qd_ub: &[f64], capacity: usize, samples_per_niche: usize, rng: &mut Rng, ) -> Result<Self, &'static str>

Construct a validated CVT archive.

§Errors

Returns an error if dim or capacity is zero, if the descriptor bound slices are empty or of unequal length, or if any bound pair is non-finite or does not satisfy lower < upper.

Source

pub fn new( dim: usize, qd_lb: &[f64], qd_ub: &[f64], capacity: usize, samples_per_niche: usize, rng: &mut Rng, ) -> Self

Construct a CVT archive, panicking on invalid configuration. Prefer Archive::try_new for user-supplied inputs.

§Panics

Panics on any configuration Archive::try_new rejects.

Source

pub fn dim(&self) -> usize

Number of decision variables stored for each elite.

Source

pub fn qd_dim(&self) -> usize

Number of behavior-descriptor dimensions.

Source

pub fn capacity(&self) -> usize

Total number of niches.

Source

pub fn occupied(&self) -> usize

Number of niches containing an evaluated elite.

Source

pub fn grid_layout(&self) -> Option<GridLayout>

Exact layout of a regular two-dimensional archive.

Returns None for CVT archives and descriptor dimensions other than two. Use capacity as the coverage denominator and this layout when mapping a niche index to a rendered row.

Source

pub fn grid_shape(&self) -> Option<(usize, usize)>

Shape of a regular two-dimensional archive.

The first component is the number of columns and the second the number of rows. Returns None for CVT archives and for descriptor dimensions other than two. Non-rectangular regular grids report the maximum column count; early rows may contain one additional cell as documented by the archive’s exact-capacity construction.

Source

pub fn seed_uniform(&mut self, lower: &[f64], upper: &[f64], rng: &mut Rng)

Seed all niche solutions with uniform random samples in [lower, upper] (never evaluated — they serve as the initial SBX/Iso parent pool, as the Python original documents).

§Panics

Panics if lower.len() or upper.len() differs from the archive’s decision dimension.

Source

pub fn index_of_niche(&self, d: &[f64]) -> usize

Index of the niche whose center is nearest the (encoded) descriptor.

§Panics

Panics if d.len() differs from the archive’s descriptor dimension.

Source

pub fn set(&mut self, i: usize, y: f64, d: &[f64], x: &[f64])

Add a solution to niche i if it improves it.

§Panics

Panics if i is not below the archive capacity, or if d or x do not match the descriptor and decision dimensions.

Source

pub fn update( &mut self, xs: &[Vec<f64>], fitness: &mut dyn QdFitness, ) -> (Vec<f64>, Vec<f64>)

Evaluate xs, add to the archive, and return (improvements, real_ys) where improvement = fitness - niche's previous fitness (negative is an improvement — the objective the Diversifier’s optimizer minimizes).

§Panics

Panics if fitness returns a descriptor whose length differs from the archive’s descriptor dimension.

Source

pub fn update_evaluated( &mut self, xs: &[Vec<f64>], evaluations: &[(f64, Vec<f64>)], ) -> Result<(Vec<f64>, Vec<f64>), &'static str>

Apply already evaluated (fitness, descriptor) values in input order. Keeping this step separate lets callers parallelize expensive objective functions without concurrently mutating the archive.

§Errors

Returns an error if evaluated does not have the same length as xs.

Source

pub fn update_batch( &mut self, xs: &[Vec<f64>], fitness: &mut dyn QdBatchFitness, ) -> Result<(Vec<f64>, Vec<f64>), &'static str>

Evaluate and apply a complete batch. Evaluation may be parallel inside fitness; archive updates are deterministic and retain input order.

§Errors

Returns an error if fitness does not return exactly one (fitness, descriptor) pair per candidate.

Source

pub fn argsort(&mut self)

Re-sort niche indices ascending by fitness.

Source

pub fn random_xs( &self, best_n: usize, chunk: usize, rng: &mut Rng, ) -> Vec<Vec<f64>>

Sample chunk solutions from the best best_n niches (by fitness).

Source

pub fn random_x_one(&self, best_n: usize, rng: &mut Rng) -> (Vec<f64>, f64)

A random solution from the best best_n niches (with fitness).

Source

pub fn best_y(&self) -> f64

Lowest finite quality currently stored, or infinity for an empty archive.

Source

pub fn qd_score(&self) -> f64

QD-score matching Python Archive.get_qd_score: for an all-positive archive, sum reciprocal fitness; otherwise sum the negated negative fitness values. Higher is better in both cases.

Source

pub fn ys(&self) -> &[f64]

Per-niche quality values; empty niches contain infinity.

Source

pub fn xs(&self) -> &[Vec<f64>]

Per-niche decision vectors.

Source

pub fn descriptors(&self) -> &[Vec<f64>]

Per-niche behavior descriptors.

Source

pub fn counts(&self) -> &[u64]

Number of evaluated candidates mapped to each niche.

Source

pub fn occupied_data(&self) -> Vec<(Vec<f64>, f64, Vec<f64>)>

Occupied (x, y, descriptor) triples.

Auto Trait Implementations§

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V