1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//! Neuroevolution strategies — evolving the parameters of a Burn `Module`.
//!
//! `rlevo` ships three neuroevolution approaches, distinguished by how much
//! network structure is fixed before the search begins.
//!
//! **Weight-only** ([`weight_only`]) fixes the architecture: a network is
//! declared once and a flat-genome [`Strategy`](crate::strategy::Strategy)
//! (GA / ES / DE / …) evolves its flattened weights. The
//! [`WeightOnly`] wrapper composes any such strategy
//! with any [`Module`](burn::module::Module); reshaping between the flat genome
//! and the network happens at the fitness boundary
//! ([`ModuleEvalFn`](crate::module_eval_fn::ModuleEvalFn)), never inside the
//! strategy.
//!
//! **Bounded architecture NAS** ([`arch_nas`]) co-evolves the choice of
//! architecture: a custom [`ArchNasStrategy`] harness
//! searches *which* fixed-topology `Module` variant — from an enumerated menu —
//! wins a task, alongside each variant's weights, reusing the same per-variant
//! `ModuleReshaper` infrastructure.
//!
//! **NEAT** ([`neat`]) evolves the topology itself: the
//! [`NeatStrategy`] custom harness grows network structure
//! and weights open-endedly from a minimal seed via innovation-aligned crossover
//! and speciation, scoring graph genomes through the
//! [`GraphFitnessFn`] seam. The graph data model lives in
//! [`crate::neuroevolution`]. Genomes are scored either one at a time — the
//! interpreted, host-side reference path — or a whole population at once through
//! the device-batched
//! [`BatchPhenotypeEvaluator`](crate::neuroevolution::phenotype::BatchPhenotypeEvaluator).
pub use ;
pub use ;
pub use WeightOnly;