EngineProblem

Struct EngineProblem 

Source
pub struct EngineProblem<C, T>
where C: Chromosome,
{ pub codec: Arc<dyn Codec<C, T>>, pub fitness_fn: Arc<dyn Fn(T) -> Score + Send + Sync>, }
Expand description

EngineProblem is a generic, base level concrete implementation of the Problem trait that is the default problem used by the engine if none other is specified during building.

We take the Codec and the fitness function from the user and simply wrap them into this struct.

§Generic Parameters

  • C: The Chromosome type that represents the genetic material
  • T: The phenotype type that represents the decoded individual

§Examples

use radiate_core::*;
use std::sync::Arc;

// Create a simple fitness function
let fitness_fn = Arc::new(|phenotype: Vec<f32>| {
    Score::from(phenotype.iter().cloned().fold(0.0, f32::max))
});

let problem = EngineProblem {
    codec: Arc::new(FloatCodec::vector(5, 0.0..1.0)),
    fitness_fn,
};

§Thread Safety

This struct is marked as Send + Sync to ensure it can be safely shared across multiple threads during parallel fitness evaluation.

§Performance Characteristics

  • Individual Evaluation: Each individual is evaluated separately
  • Memory Usage: Lower memory overhead per evaluation
  • Flexibility: Easy to implement custom fitness logic
  • Parallelization: Can utilize multiple threads through the executor

Fields§

§codec: Arc<dyn Codec<C, T>>§fitness_fn: Arc<dyn Fn(T) -> Score + Send + Sync>

Trait Implementations§

Source§

impl<C: Chromosome, T> Problem<C, T> for EngineProblem<C, T>

Implementation of Problem for EngineProblem.

This implementation delegates to the contained codec and fitness function, providing a clean separation of concerns between encoding/decoding logic and fitness evaluation.

Source§

fn encode(&self) -> Genotype<C>

Creates a new Genotype representing the initial state of the problem. The returned Genotype should represent a valid starting point for evolution. Read more
Source§

fn decode(&self, genotype: &Genotype<C>) -> T

Converts a Genotype into its corresponding phenotype. Read more
Source§

fn eval(&self, individual: &Genotype<C>) -> Score

Evaluates the fitness of a single individual. Read more
Source§

fn eval_batch(&self, individuals: &[Genotype<C>]) -> Vec<Score>

Evaluates the fitness of multiple individuals in a batch. Read more
Source§

impl<C: Chromosome, T> Send for EngineProblem<C, T>

Mark EngineProblem as thread-safe for parallel execution.

This implementation is safe because:

  • Arc<dyn Codec<C, T>> is Send + Sync when C and T are Send + Sync
  • Arc<dyn Fn(T) -> Score + Send + Sync> is Send + Sync by construction
  • The struct contains no interior mutability
Source§

impl<C: Chromosome, T> Sync for EngineProblem<C, T>

Auto Trait Implementations§

§

impl<C, T> Freeze for EngineProblem<C, T>

§

impl<C, T> !RefUnwindSafe for EngineProblem<C, T>

§

impl<C, T> Unpin for EngineProblem<C, T>

§

impl<C, T> !UnwindSafe for EngineProblem<C, T>

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> 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, 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