Readme for moo-1.0

Moo

 ------------------------------------------------
< Moo. Breeding Genetic Algorithms with Haskell. >
 ------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Features

|                       | Binary GA            | Continuous GA            |
|-----------------------+----------------------+--------------------------|
|Encoding               | binary bit-string    | sequence of real values  |
|                       | Gray bit-string      |                          |
|-----------------------+----------------------+--------------------------|
|Initialization         |            random uniform                       |
|                       |            constrained random uniform           |
|                       |            arbitrary custom                     |
|-----------------------+-------------------------------------------------|
|Objective              |            minimization and maximiation         |
|                       |            optional scaling                     |
|                       |            optional ranking                     |
|                       |            optional niching (fitness sharing)   |
|-----------------------+-------------------------------------------------|
|Selection              |            roulette                             |
|                       |            stochastic universal sampling        |
|                       |            tournament                           |
|                       |            optional elitism                     |
|                       |            optionally constrained               |
|                       |            custom non-adaptive ^                |
|-----------------------+-------------------------------------------------|
|Crossover              |            one-point                            |
|                       |            two-point                            |
|                       |            uniform                              |
|                       |            custom non-adaptive ^                |
|                       +----------------------+--------------------------|
|                       |                      | BLX-α (blend)            |
|                       |                      | SBX (simulated binary)   |
|                       |                      | UNDX (unimodal normally  |
|                       |                      | distributed)             |
|-----------------------+----------------------+--------------------------|
|Mutation               | point                | Gaussian                 |
|                       | asymmetric           |                          |
|                       | constant frequency   |                          |
|                       +----------------------+--------------------------|
|                       |            custom non-adaptive ^                |
|-----------------------+-------------------------------------------------|
|Replacement            |            generational with elitism            |
|                       |            steady state                         |
|-----------------------+-------------------------------------------------|
|Stop                   |            number of generations                |
|condition              |            values of objective function         |
|                       |            stall of objective function          |
|                       |            custom or interactive (`loopIO`)     |
|                       |            time limit (`loopIO`)                |
|                       |            compound conditions (`And`, `Or`)    |
|-----------------------+-------------------------------------------------|
|Logging                |            pure periodic (any monoid)           |
|                       |            periodic with `IO`                   |
|-----------------------+-------------------------------------------------|
|Constrainted           |            constrained initialization           |
|optimization           |            constrained selection                |
|                       |            death penalty                        |
|-----------------------+-------------------------------------------------|
|Multiobjective         |            NSGA-II                              |
|optimization           |            constrained NSGA-II                  |

^ non-adaptive: any function which doesn't depend on generation number

There are other possible encodings which are possible to represent with list-like genomes (type Genome a = [a]):

Contributing

There are many ways you can help developing the library:

An example

Minimizing Beale's function (optimal value f(3, 0.5) = 0):

import Moo.GeneticAlgorithm.Continuous


beale :: [Double] -> Double
beale [x, y] = (1.5 - x + x*y)**2 + (2.25 - x + x*y*y)**2 + (2.625 - x + x*y*y*y)**2


popsize = 101
elitesize = 1
tolerance = 1e-6


selection = tournamentSelect Minimizing 2 (popsize - elitesize)
crossover = unimodalCrossoverRP
mutation = gaussianMutate 0.25 0.1
step = nextGeneration Minimizing beale selection elitesize crossover mutation
stop = IfObjective (\values -> (minimum values) < tolerance)
initialize = getRandomGenomes popsize [(-4.5, 4.5), (-4.5, 4.5)]


main = do
  population <- runGA initialize (loop stop step)
  print (head . bestFirst Minimizing $ population)

For more examples, see examples/ folder.