Skip to content

Releases: pkalivas/radiate

Radiate UI

22 Dec 00:23

Choose a tag to compare

Adding radiate-ui crate, bug fixes, & speed improvements.

I split up some functionality into a new crate radiate-utils and have added a new feature radiate-ui for a tui user interface through ratitui. Some small bug fixes, code simplifications, and some nice little speed improvements.

All examples in the /examples folder have been updated to the latest as well as python examples.

Full Changelog: v1.2.19...v1.2.20

PGM (Experimental) - Cleanup, bug fixes, Graph performance improvements

11 Nov 23:28

Choose a tag to compare

Adding support for experimental PGM or Probabilistic graphical models through the GP feature (crate).

Major cleanup or unused code and massive graph performance improvements through the use of smallvec as connections instead of BTreeSets.

Improving eventing system through cleaner code and removing redundant events.

Introducing radiate-error (RadiateError) into the core crates ad requiring its usage in certain traits (Problem mainly). We also use this error type in py-radiate and allow it to bubble up into python's type system too.

Brining metrics to the forefront in python.

Full Changelog: v1.2.18...v1.2.19

LSTM, GRU, Mesh graphs.

27 Sep 23:11

Choose a tag to compare

Fixing subtle bug in recurrent graphs where a random seed wasn't being respected, leading to non-deterministic behavior in some cases. This fix ensures that all random operations within recurrent graphs are consistent and reproducible when a seed is provided.

Added three new types of graphs:

  • LSTM (Long Short-Term Memory) Graphs: These are a type of recurrent neural network (RNN) that can learn long-term dependencies.
  • GRU (Gated Recurrent Unit) Graphs: Similar to LSTMs, GRUs are a type of RNN that are simpler and often more efficient.
  • Mesh Graphs: Graphs structured in a mesh topology.

Full Changelog: v1.2.17...v1.2.18

Fixing IntGene<T> arithmetic & adding JitterMutator

04 Sep 23:48

Choose a tag to compare

Fixing the arithmetic surrounding IntGene and FloatGene - ensuring their Allele's don't overflow and clamping their arithmetics around their bounds during add/sub/mul/div. This is in response to issue #23.

Adding new mutator - JitterMutator

Full Changelog: v1.2.16...v1.2.17

Adding batching fitness function, batch engine problem

20 Aug 00:07

Choose a tag to compare

Largely in response to issue #22.

  • Adding support for batch fitness functions and batch engine problems.
  • Small improvements to chromosome from operators.
  • Updates to docs.
  • Cleaning up combined fitness fn and novelty search fitness fn

Full Changelog: v1.2.15...v1.2.16

Adding NoveltySearch to Python

10 Aug 21:08

Choose a tag to compare

Improving fitness function speed and adding Novelty Search to python. Refactors to building an engine across the rust/python bridge.

Adding new crossover for permutation chromosomes: EdgeRecombinationCrossover
Adding new mutation for float genes: PolynomialMutator

Adding code path for dynamic mutation/crossover rates. This is in early stages of dev.

Full Changelog: v1.2.14...v1.2.15

Adding GP features to python

05 Jul 22:40

Choose a tag to compare

This release adds the GP functionality to python as well as novelty search to rust.

Lots of code cleanup and testing added.

Full Changelog: v1.2.13...v1.2.14

Updating python .whl and adding 'serde' feature

06 Jun 23:59

Choose a tag to compare

This is a smaller addition for rust and is mainly geared towards the python bindings.

Rust updates:

  1. Adding feature flag serde to enable serialization of the Ecosystem, including the Population, Species, Phenotypes, Genotypes, Chromosomes, and all Genes.
  2. Some small quality of life improvements mainly used in the python bindings

Python updates:

  1. Adding multi-objective optimization support
  2. Working bindings for all core rust selectors & alters
  3. Mirror rust Codecs (matrix, vector, & scalar) for most gene types.
  4. Materialized Generation return types from the engine including:
    • Metrics
    • Population
    • Index
    • Score if single objective otherwise ParetoFront

Installing rust:

radiate = { version = "1.2.11", features = ["gp", "serde"] }

python:

pip install radiate=0.0.3

Full Changelog: v1.2.11...v1.2.13

Splitting crates into Workspace, starting python wrapper, speciation

09 May 20:28

Choose a tag to compare

Woo! Big release. I've split the core two crates (radiate & radiate-gp) into several crates within a single workspace. This makes this project much more modular and much easier to begin wrapping the rust lib into a python wheel. Because of this, the radiate-gp functionality has been moved from a functionally independent crate, to a feature. For the same genetic programming functionality just add the feature flag gp to your dependancies.

radiate = { version = "1.2.11", features = ["gp"] }

The split goes as follows:

  1. radiate-core: (Internal) The core functionality and traits for extending the library
  2. radiate-engines: (Internal) The core engine implementation including the GeneticEngine, EngineIterator, GeneticEngineBuilder, and the steps used during evolution.
  3. radiate-alters: (Internal) The crossover and mutation structs.
  4. radiate-selectors: (Internal) Selection strategies for the core and engine.
  5. radiate-gp: (Internal) The genetic programming implementation - now behind a radiate feature flag.
  6. radiate: (External) The root of the project, contains links to the needed sub-crates.
  7. radiate-python: (Internal) The rust-python (pyo3) wrapper.

Note: The only necessary crate to add to your cargo.toml is radiate

Alone with splitting the crate into a workspace - I've added opt-in speciation. This is a common concept in evolutionary algorithms where populations evolve within their own 'niche' or 'species'. I am still working on the docs for this.

Adding replacement strategy

10 Apr 21:50

Choose a tag to compare

1.) Adding trait for replacement strategy. Every time a Phenotype is deemed invalid or reaches an age limit, it needs to be replaced. This replacement strategy allows the user to define how the replacement is done.

2.) Adding different variants of codex for float, int, and char. Define if you want a matrix, vector, or scalar as the input to the fitness fn.

Full Changelog: v1.2.9...v1.2.10