Population

Struct Population 

Source
pub struct Population<C>
where C: Chromosome,
{ /* private fields */ }
Expand description

A Population is a collection of Phenotype instances.

This struct is the core collection of individuals being evolved by the GeneticEngine. It can be thought of as a Vec of Phenotypes and is essentially a light wrapper around such a Vec. The Population struct, however, has some additional functionality that allows for sorting and iteration over the individuals in the population.

Note: Although the Population offers mut methods to mut the individuals in the population, the Population itself offers no way to increase or decrease the number of individuals in the population. As such, the Population should be thought of as an ‘immutable’ data structure. If you need to add or remove individuals from the population, you should create a new Population instance with the new individuals. To further facilitate this way of thinking, the Population struct and everything it contains implements the Clone trait.

§Note

A raw call to clone of the population will NOT clone the individuals themselves, but rather the references to them. This means that if you mutate an individual in one population, the change will be reflected in the other population as well. To deep clone a population, you must clone each individual within it. The simplest way to do this is by:

let deep_cloned_population = Population::from(&original_population);

§Type Parameters

  • C: The type of chromosome used in the genotype, which must implement the Chromosome trait.

Implementations§

Source§

impl<C> Population<C>
where C: Chromosome,

Source

pub fn new(individuals: Vec<Phenotype<C>>) -> Population<C>

Source

pub fn members(&self) -> &[Member<C>]

Source

pub fn get(&self, index: usize) -> Option<&Phenotype<C>>

Source

pub fn get_mut(&mut self, index: usize) -> Option<&mut Phenotype<C>>

Source

pub fn get_cell_mut(&mut self, index: usize) -> Option<&mut Member<C>>

Source

pub fn get_cell(&self, index: usize) -> Option<&Member<C>>

Source

pub fn push(&mut self, individual: impl Into<Member<C>>)

Source

pub fn iter(&self) -> impl Iterator<Item = &Phenotype<C>>

Source

pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut Phenotype<C>>

Source

pub fn len(&self) -> usize

Source

pub fn clear(&mut self)

Source

pub fn is_empty(&self) -> bool

Source

pub fn get_scores(&self) -> Vec<&Score>

Source

pub fn get_pair_mut( &mut self, first: usize, second: usize, ) -> Option<(&mut Phenotype<C>, &mut Phenotype<C>)>

Trait Implementations§

Source§

impl<C> AsMut<[Member<C>]> for Population<C>
where C: Chromosome,

Source§

fn as_mut(&mut self) -> &mut [Member<C>]

Converts this type into a mutable reference of the (usually inferred) input type.
Source§

impl<C> AsRef<[Member<C>]> for Population<C>
where C: Chromosome,

Source§

fn as_ref(&self) -> &[Member<C>]

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<C> Clone for Population<C>
where C: Clone + Chromosome,

Source§

fn clone(&self) -> Population<C>

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<C> Debug for Population<C>
where C: Chromosome + Debug,

Source§

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

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

impl<C> Default for Population<C>
where C: Default + Chromosome,

Source§

fn default() -> Population<C>

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

impl<C> From<&Population<C>> for Population<C>
where C: Chromosome + Clone,

Source§

fn from(population: &Population<C>) -> Population<C>

Converts to this type from the input type.
Source§

impl<C, F> From<(usize, F)> for Population<C>
where C: Chromosome, F: Fn() -> Phenotype<C>,

Create a new instance of the Population from the given size and closure. This will iterate the given closure size times and collect the results into a Vec of new individuals.

Source§

fn from(_: (usize, F)) -> Population<C>

Converts to this type from the input type.
Source§

impl<C> From<Vec<Member<C>>> for Population<C>
where C: Chromosome,

Source§

fn from(individuals: Vec<Member<C>>) -> Population<C>

Converts to this type from the input type.
Source§

impl<C> From<Vec<Phenotype<C>>> for Population<C>
where C: Chromosome,

Source§

fn from(individuals: Vec<Phenotype<C>>) -> Population<C>

Converts to this type from the input type.
Source§

impl<C> FromIterator<Member<C>> for Population<C>
where C: Chromosome,

Source§

fn from_iter<I>(iter: I) -> Population<C>
where I: IntoIterator<Item = Member<C>>,

Creates a value from an iterator. Read more
Source§

impl<C> FromIterator<Phenotype<C>> for Population<C>
where C: Chromosome,

Source§

fn from_iter<I>(iter: I) -> Population<C>
where I: IntoIterator<Item = Phenotype<C>>,

Creates a value from an iterator. Read more
Source§

impl<C> Index<Range<usize>> for Population<C>
where C: Chromosome,

Source§

type Output = [Member<C>]

The returned type after indexing.
Source§

fn index( &self, index: Range<usize>, ) -> &<Population<C> as Index<Range<usize>>>::Output

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

impl<C> Index<usize> for Population<C>
where C: Chromosome,

Source§

type Output = Phenotype<C>

The returned type after indexing.
Source§

fn index(&self, index: usize) -> &<Population<C> as Index<usize>>::Output

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

impl<C> IndexMut<usize> for Population<C>
where C: Chromosome,

Source§

fn index_mut( &mut self, index: usize, ) -> &mut <Population<C> as Index<usize>>::Output

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

impl<C> IntoIterator for Population<C>
where C: Chromosome + Clone,

Source§

type Item = Phenotype<C>

The type of the elements being iterated over.
Source§

type IntoIter = IntoIter<Phenotype<C>>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <Population<C> as IntoIterator>::IntoIter

Creates an iterator from a value. Read more
Source§

impl<C> PartialEq for Population<C>
where C: PartialEq + Chromosome,

Source§

fn eq(&self, other: &Population<C>) -> 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<C> StructuralPartialEq for Population<C>
where C: Chromosome,

Auto Trait Implementations§

§

impl<C> Freeze for Population<C>

§

impl<C> !RefUnwindSafe for Population<C>

§

impl<C> Send for Population<C>

§

impl<C> Sync for Population<C>

§

impl<C> Unpin for Population<C>

§

impl<C> !UnwindSafe for Population<C>

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> 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> 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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