Genex makes it easy to write Genetic Algorithms with Elixir.
This library is inspired by Python's DEAP.
Documentation is available at here.
The package can be installed by adding genex
to your list of dependencies in mix.exs
.
def deps do
[
{:genex, "~> 1.0.0-beta"}
]
end
Genex requires an implementation module with 3 functions: genotype/0
, fitness_function/1
, and terminate?/1
.
defmodule OneMax do
use Genex
def genotype, do: Genotype.binary(10)
def fitness_function(chromosome), do: Enum.sum(chromosome.genes)
def terminate?(population), do: population.max_fitness == 10
end
Now, run iex -S mix
.
Then:
iex> OneMax.run()
Genex strives to be as simple and customizable as possible. Along with the ability to customize EVERY step of your Genetic algorithm, Genex comes with the following features:
- 6 Selection Operators (14 anticipated)
- 12 Crossover Operators (17 anticipated)
- 4 Mutation Operators (9 anticipated)
- Fully Customizable Evolutions
- Multi-Objective Optimization
- Penalty Functions
- Genotype Generation Helpers
- Benchmarking of Common Problems
- Exportable Genealogy Tree
- Exportable Hall of Fame
- Flexible Encoding of Chromosomes (any
Enum
) - Extendable Visualizations
To request a feature, please open an issue.
There are currently 5 basic examples available in the examples
directory. To run them, clone the repo and run:
mix run examples/[example].exs
The current examples are:
one_max.exs
knapsack.exs
speller.exs
tsp.exs
n_queens.exs
knapsack.exs
These projects use Genex in practice:
To feature yours, please submit a pull request.
If you have any problems with Genex, please open an issue! If you have a fix for an issue, submit a pull request.