A general purpose Library for Evolutionary Algorithms in Python.
Project description
LEAP: Evolutionary Algorithms in Python
Written by Dr. Jeffrey K. Bassett, Dr. Mark Coletti, and Eric Scott
LEAP is a general purpose Evolutionary Computation package that combines readable and easy-to-use syntax for search and optimization algorithms with powerful distribution and visualization features.
LEAP's signature is its operator pipeline, which uses a simple list of functional operators to concisely express a metaheuristic algorithm's configuration as high-level code. Adding metrics, visualization, or special features (like distribution, coevolution, or island migrations) is often as simple as adding operators into the pipeline.
Using LEAP
Get the stable version of LEAP from the Python package index with
pip install leap_ec
Simple Example
The easiest way to use an evolutionary algorithm in LEAP is to use the
leap_ec.simple
package, which contains simple interfaces for pre-built
algorithms:
from leap_ec.simple import ea_solve
def f(x):
"""A real-valued function to optimized."""
return sum(x)**2
ea_solve(f, bounds=[(-5.12, 5.12) for _ in range(5)], maximize=True)
Genetic Algorithm Example
The next-easiest way to use LEAP is to configure a custom algorithm via one
of the metaheuristic functions in the leap_ec.algorithms
package. These
interfaces off you a flexible way to customize the various operators,
representations, and other components that go into a modern evolutionary
algorithm.
Here's an example that applies a genetic algorithm variant to solve the
MaxOnes
optimization problem. It uses bitflip mutation, uniform crossover,
and binary tournament_selection selection:
from leap_ec.algorithm import generational_ea
from leap_ec import core, ops, binary_problems
pop_size = 5
ea = generational_ea(generations=100, pop_size=pop_size,
problem=binary_problems.MaxOnes(), # Solve a MaxOnes Boolean optimization problem
representation=core.Representation(
decoder=core.IdentityDecoder(), # Genotype and phenotype are the same for this task
initialize=core.create_binary_sequence(length=10) # Initial genomes are random binary sequences
),
# The operator pipeline
pipeline=[ops.tournament_selection, # Select parents via tournament_selection selection
ops.clone, # Copy them (just to be safe)
ops.mutate_bitflip, # Basic mutation: defaults to a 1/L mutation rate
ops.uniform_crossover(p_swap=0.4), # Crossover with a 40% chance of swapping each gene
ops.evaluate, # Evaluate fitness
ops.pool(size=pop_size) # Collect offspring into a new population
])
print('Generation, Best_Individual')
for i, best in ea:
print(f"{i}, {best}")
More Examples
A number of LEAP demo applications are found in the the example/
directory of the github repository:
git clone https://github.com/AureumChaos/LEAP.git
python LEAP/example/island_models.py
Demo of LEAP running a 3-population island model on a real-valued optimization problem.
Documentation
The stable version of LEAP's full documentation is over at ReadTheDocs.
If you want to build a fresh set of docs for yourself, you can do so after running make setup
:
make doc
This will create HTML documentation in the docs/build/html/
directory. It might take a while the first time,
since building the docs involves generating some plots and executing some example algorithms.
Installing from Source
To install a source distribution of LEAP, clone the repo:
git clone https://github.com/AureumChaos/LEAP.git
And use the Makefile to install the package:
make setup
Run the Test Suite
LEAP ships with a two-part pytest
harness, divided into fast and slow tests. You can run them with
make test-fast
and
make test-slow
respectively.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.