Being a terse compilation by version of changes.
-
Drop support for Python 3.6
- This keeps us in sync with numpy and dask that also dropped support for 3.6 this year
-
New features
- Added
landscape_features
package with some initial exploratory landscape analysis tools - Added elitism
- Added a new example demonstrating integer representations
- Added a
mutate_binomial()
operator for integer representations - Added visualization of ANN weights for
SimpleNeuralNetworkExecutable
phenotypes - Added metrics for logging population diversity
- Added support for lexicographical and Koza-style parsimony pressure
- Added
HistPhenotypePlotProbe
- Added
ops.grouped_evaluate()
for evaluating batches of individuals - Added
ExternalProcessproblem
for using external programs as fitness functions
- Added
-
Documentation
- Added documentation on
leap_ec.context
and updated software development guidelines to encourage its use if tracking persistent state outside of function calls was necessary.
- Added documentation on
-
CI/CD
- Added a
make test-slow
harness - Added tests that run the
examples/
scripts - Organized examples into subdirectories
- Improved test coverage
- Added a
-
Bugfixes
- Fix
viz
parameter when callingsimple.ea_solve()
- Fix algebra error in
real_rep.problems.NoisyQuarticProblem
- Tell
dask
that functions are impure by default, to make sure it doesn't cache results - Change
Makefile
to usepip install -e .
instead of the deprecatedpython setup.py develop
- Fix
-
API changes
- Significantly refactored the
executable_rep.rules
package to simplify learning classifier systems - Added
leap_ec.__version__
attribute - Added a
hard_bounds
flag toea_solve()
to tell it to respect thebounds
at all times (rather than just initialization); defaults toTrue
- Added the most frequent imports (ex.
Individual
,Representation
) into the top-level package - Renamed the
generations
parameter ofgenerational_ea()
tomax_generations
and added an optionalstop
parameter for other stopping conditions - Added probability parameter for the
uniform_crossover
operator mutate_gaussian
now accepts a list of gene-wise hard bound- Added
select_worst
Boolean parameter totournament_selection
- Added
notes
columns parameter toFitnessStatsCSVProbe
- Added a
pad_inputs
parameter toTruthTableProblem
to handle varying-dimension inputs - Added a
pad
parameter toCartesianPhenotypePlotProbe
to plot 2D projections of higher-D functions - Added
FitnessPlotProbe
as a convenience wrapper forPopulationMetricsPlotProbe
- Added an
x_axis_value
parameter toFitnessPlotProbe
andPopulationMetricsPlotProbe
- Renamed
PlotTrajectoryProbe
to the more descriptiveCartesianPhenotypePlotProbe
- Renamed
PopulationPlotProbe
to the more descriptivePopulationMetricsPlotProbe
- Renamed
leap_ec.distributed
toleap_ec.distrib
to reduce name space confusion withdask.distributed
- Renamed
leap_ec.context
toleap_ec.global_vars
- Default behavior changes
Individual.decoder
andRepresentation.decoder
now uses a phenotypic representation (IdentityDecoder
) by default- Mutation operators no longer have default mutation rates (they must be explicitly set by the user).
- Set default
p_swap = 0.2
foruniform_crossover
, instead of 0.5 - Set default
num_points = 2
forn_ary_crossover
, instead of 1 - Set default value for
context
parameter on probes, so users needn't set it - standardized on making
context
last function argument that defaults toleap_ec.context.context
- Significantly refactored the
- Added probability parameter for the
n_ary_crossover
operator - Greatly improved test coverage
- Added support for static- and variable-length segments, which are fixed-length "chunks" of values
- Added a simple neural network representation,
executable_rep.neural_network
, and made it the default forexamples/openai_gym.py
- Changed the
Executable
interface to act as aCallable
object (rather than using a customoutput()
method) - Added
statistical_helpers
to assist with writing unit tests for stochastic algorithms - Added support for integer representations, via the
int_rep
package - Added a Cartesian genetic programming (CGP) representation,
executable_rep.cgp
, with example inexamples/cgp.py
- Added support for heterogeneous island models, demoed in
examples/multitask_island_model.py
- Significantly added to online documentation
- Major code reorganization
- exception management for
Individual
has been moved toRobustIndividual
DistributedIndividual
now inherits fromRobustIndividual
core.py
has been broken out to separate modulesIndividual
andRobustIndividual
now inindividual.py
- representation specific entities moved to new sub-packages,
binary_rep
andreal_rep
Representation
now inrepresentation.py
Decoder
now indecoder.py
- documentation, doctests, examples, Jupyter notebooks, and unit tests updated accordingly
- exception management for
- added ability to pass ancillary information during evaluation, such as UUIDs that could be used to name output files and directories, yet do not have a direct impact on fitness
- Apply
Representation
consistently throughout LEAP, particularly the top-level monolithic functions - Added probe to
leap_ec.distributed.asynchronous.steady_state()
to take regular snapshots of the population
- fix how non-viable individuals sort themselves when compared since the prior method of comparing
math.nan
tomath.nan
yielded non-ideal behavior - minor maintenance tweaks
- changed package name to
leap_ec
fromleap
to mitigate pypi namespace collisions - minor maintenance tweaks
- first major "mature" release of LEAP