|
pulsatrix
|
A from-scratch, DEAP-free genetic-algorithm core (population/fitness/selection/ crossover/mutation, NSGA-II), plus neuroevolution (NEAT, Evolution Strategies), evolutionary hyperparameter optimization (CMA-ES), Population Based Training, and evolutionary generative-model training (E-GAN) built on top of it. More...
Files | |
| file | cma_es.hpp |
| A CMA-ES-*style* ask-tell evolutionary strategy (Hansen & Ostermeier's Covariance Matrix Adaptation Evolution Strategy) for continuous hyperparameter search: an adaptive mean, a per-dimension adaptive scale (separable/diagonal covariance, Ros & Hansen, "A Simple Modification in CMA-ES Achieving Linear Time and Space
Complexity," PPSN 2008), and an adaptive global step size. | |
| file | crossover.hpp |
| Genetic-algorithm crossover operators: one-point, two-point, uniform (generic sequence genotypes), and blend/BLX-alpha, simulated binary (SBX) (real-valued genotypes). | |
| file | egan_mutation.hpp |
| E-GAN's own three named "mutation" objectives (Wang et al. 2019, "Evolutionary
Generative Adversarial Networks") plus its sample-quality/diversity fitness metric. In E-GAN, "mutation" means training a copy of a generator against a different loss function, not perturbing its weights directly – a structurally different kind of mutation than this campaign's own Phase 3 NEAT/ES operators, which do perturb weights. | |
| file | egan_training.hpp |
| E-GAN's own full generational training loop (Wang et al. 2019): each generation, every population member independently attempts every given mutation objective (Phase 5 Mission 1) via a fresh weight-copy offspring, keeps whichever mutation scored the best combined fitness, then the shared discriminator trains on a real batch plus the (now-mutated) population's own pooled fake output (Phase 5 Mission 0). | |
| file | evolution_strategies.hpp |
| Evolution Strategies (Salimans et al. 2017, "Evolution Strategies as a Scalable
Alternative to Reinforcement Learning"): a black-box, gradient-free optimizer over an arbitrary flat parameter vector, driven entirely by a scalar fitness function – zero inherent RL dependency, applicable to any fixed-topology network's flattened weight vector or any other real-valued parameterization. | |
| file | evolutionary_loop.hpp |
| The shared six-step evolutionary-loop skeleton (evaluate -> select parents -> vary via crossover/mutation -> evaluate offspring -> survivor-select -> loop), generic over which survivor-selection policy (survivor_selection.hpp) and which offspring-production recipe (selection + crossover + mutation, composed by the caller) is used. | |
| file | fixed_topology_xor_network.hpp |
| A small, fixed-topology (2 input -> 2 hidden -> 1 output, both layers sigmoid) MLP whose weights are a flat parameter vector, plus a plain analytic fitness function scoring it against the four XOR patterns – the "fixed-topology network" and "plain
analytic fitness function" this campaign's Evolution Strategies mission needs, deliberately using the same XOR benchmark and the same fitness convention (4.0 minus sum of squared error) as Mission 2's NEAT proof, for a direct same-problem cross-check between the two techniques. | |
| file | generator_population.hpp |
| E-GAN's own population-of-generators infrastructure (Wang et al. 2019, "Evolutionary
Generative Adversarial Networks"): N independently-parameterized generator Modules, and the concrete mechanism for training one shared discriminator against fake samples pooled from the whole population – in E-GAN, the discriminator's own training distribution is the union of every population member's output, not one generator's alone, which is what gives the discriminator (and, in turn, each generator's own training signal) a harder, more diverse target than a single- generator GAN ever sees. | |
| file | hpo_genotype.hpp |
| Decodes a real-valued genotype (a unit-hypercube point, one gene per parameter, each in [0, 1]) into a full hyperparameter Configuration – the encoding this campaign's GA operators (crossover.hpp/mutation.hpp, all defined over std::vector<double>) evolve directly, decoded only when a genotype needs to be evaluated. | |
| file | individual.hpp |
| A genetic-algorithm candidate solution: a genotype paired with its fitness. | |
| file | mutation.hpp |
| Genetic-algorithm mutation operators: bit-flip (generic boolean genotypes) and Gaussian, polynomial (real-valued genotypes). | |
| file | neat_evolution.hpp |
| NEAT's own generational evolutionary loop: fitness evaluation, speciation, fitness sharing, proportional offspring allocation, and mutation-only reproduction. | |
| file | neat_genome.hpp |
| NEAT genome (Stanley & Miikkulainen, "Evolving Neural Networks through Augmenting
Topologies," Evolutionary Computation 10(2), 2002): a connection-gene list with global historical markings (innovation numbers) plus the two structural mutations (add-connection, add-node) that grow topology from a minimal starting point. | |
| file | neat_phenotype.hpp |
| Decodes a NEATGenome into an evaluable phenotype: a forward pass over the genome's own irregular connection graph. | |
| file | neat_speciation.hpp |
| NEAT speciation (Stanley & Miikkulainen 2002): a compatibility-distance metric over two genomes' gene lists, population grouping by that metric, and fitness sharing – the mechanism that protects a structurally novel but not-yet-optimized genome from being immediately out-competed before its innovation has a chance to be refined. | |
| file | neat_xor_fitness.hpp |
| XOR fitness function for NEAT – Stanley & Miikkulainen 2002's own validation task, chosen here for the same reason it was chosen there: XOR is the canonical not-linearly-separable problem, so a genome that solves it starting from a fully connected (no-hidden-node) minimal topology has genuinely grown new structure to do so, not merely tuned weights on an already-sufficient network shape. | |
| file | nsga2.hpp |
| NSGA-II multi-objective survivor selection (Deb, Pratap, Agarwal, Meyarivan, "A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II," IEEE TEVC 6(2), 2002): fast non-dominated sorting, crowding distance, and truncation selection. | |
| file | pbt.hpp |
| Population Based Training (Jaderberg et al. 2017, "Population Based Training of
Neural Networks"): a population of live, incrementally-trained trials periodically truncation-selected – the bottom fraction exploits (copies weights and hyperparameters from a uniformly-randomly-chosen top performer) then explores (perturbs the copied hyperparameters) – producing a hyperparameter schedule (different effective hyperparameters at different points in training) rather than a single fixed configuration. | |
| file | pbt_trial.hpp |
Extends the sibling HPO campaign's own ResumableTrial (successive_halving.hpp) with the weight/hyperparameter read-write capability Population Based Training's own exploit/explore step needs. | |
| file | selection.hpp |
| Genetic-algorithm selection operators (tournament, roulette/fitness-proportionate, linear-rank) over a population of Individual<Genotype, FitnessT>. | |
| file | survivor_selection.hpp |
| Survivor-selection policies for the evolutionary-loop skeleton (evolutionary_loop.hpp): generational replacement, (mu+lambda), (mu,lambda). | |
A from-scratch, DEAP-free genetic-algorithm core (population/fitness/selection/ crossover/mutation, NSGA-II), plus neuroevolution (NEAT, Evolution Strategies), evolutionary hyperparameter optimization (CMA-ES), Population Based Training, and evolutionary generative-model training (E-GAN) built on top of it.