pub struct InteractiveGA<G, S, C, M>where
G: EvolutionaryGenome,{ /* private fields */ }Expand description
Step-based Interactive Genetic Algorithm
Unlike standard GA algorithms that run to completion, InteractiveGA yields control between evaluations, allowing the caller to interact with users.
§Example
ⓘ
use fugue_evo::interactive::prelude::*;
let mut iga = InteractiveGABuilder::<MyGenome>::new()
.population_size(12)
.evaluation_mode(EvaluationMode::BatchSelection)
.build()?;
let mut rng = rand::thread_rng();
loop {
match iga.step(&mut rng) {
StepResult::NeedsEvaluation(request) => {
let response = get_user_feedback(&request);
iga.provide_response(response);
}
StepResult::GenerationComplete { generation, .. } => {
println!("Generation {} complete", generation);
}
StepResult::Complete(result) => {
println!("Evolution complete: {}", result.termination_reason);
break;
}
}
}Implementations§
Source§impl<G, S, C, M> InteractiveGA<G, S, C, M>where
G: EvolutionaryGenome + Clone + Send + Sync,
S: SelectionOperator<G>,
C: CrossoverOperator<G>,
M: MutationOperator<G>,
impl<G, S, C, M> InteractiveGA<G, S, C, M>where
G: EvolutionaryGenome + Clone + Send + Sync,
S: SelectionOperator<G>,
C: CrossoverOperator<G>,
M: MutationOperator<G>,
Sourcepub fn new(
config: InteractiveGAConfig,
bounds: Option<MultiBounds>,
selection: S,
crossover: C,
mutation: M,
) -> Self
pub fn new( config: InteractiveGAConfig, bounds: Option<MultiBounds>, selection: S, crossover: C, mutation: M, ) -> Self
Create a new InteractiveGA
Sourcepub fn from_session(
session: InteractiveSession<G>,
config: InteractiveGAConfig,
bounds: Option<MultiBounds>,
selection: S,
crossover: C,
mutation: M,
) -> Self
pub fn from_session( session: InteractiveSession<G>, config: InteractiveGAConfig, bounds: Option<MultiBounds>, selection: S, crossover: C, mutation: M, ) -> Self
Resume from a saved session
Sourcepub fn session(&self) -> &InteractiveSession<G>
pub fn session(&self) -> &InteractiveSession<G>
Get the current session
Sourcepub fn session_mut(&mut self) -> &mut InteractiveSession<G>
pub fn session_mut(&mut self) -> &mut InteractiveSession<G>
Get mutable reference to session (for custom modifications)
Sourcepub fn config(&self) -> &InteractiveGAConfig
pub fn config(&self) -> &InteractiveGAConfig
Get the configuration
Sourcepub fn coverage_stats(&self) -> CoverageStats
pub fn coverage_stats(&self) -> CoverageStats
Get coverage statistics
Sourcepub fn provide_response(&mut self, response: EvaluationResponse)
pub fn provide_response(&mut self, response: EvaluationResponse)
Provide user response to an evaluation request
Sourcepub fn step<R: Rng>(&mut self, rng: &mut R) -> StepResult<G>where
G: Serialize + for<'de> Deserialize<'de>,
pub fn step<R: Rng>(&mut self, rng: &mut R) -> StepResult<G>where
G: Serialize + for<'de> Deserialize<'de>,
Advance the algorithm one step
Auto Trait Implementations§
impl<G, S, C, M> Freeze for InteractiveGA<G, S, C, M>
impl<G, S, C, M> RefUnwindSafe for InteractiveGA<G, S, C, M>
impl<G, S, C, M> Send for InteractiveGA<G, S, C, M>
impl<G, S, C, M> Sync for InteractiveGA<G, S, C, M>
impl<G, S, C, M> Unpin for InteractiveGA<G, S, C, M>
impl<G, S, C, M> UnsafeUnpin for InteractiveGA<G, S, C, M>
impl<G, S, C, M> UnwindSafe for InteractiveGA<G, S, C, M>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.