Skip to content

seanmor5/genex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Genex

Genex makes it easy to write Genetic Algorithms with Elixir.

Build Status Coverage Status Hex Version

This library is inspired by Python's DEAP.

Documentation

Documentation is available at here.

Installation

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

Usage

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()

Features

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.

Examples

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

Genex in Practice

These projects use Genex in practice:

To feature yours, please submit a pull request.

Contributing

If you have any problems with Genex, please open an issue! If you have a fix for an issue, submit a pull request.