Safe Haskell | None |
---|
Simple parallel genetic algorithm implementation.
- class NFData a => Chromosome a where
- runGA :: (RandomGen g, Chromosome a) => g -> Int -> Double -> (g -> (a, g)) -> (a -> Int -> Bool) -> a
- runGAIO :: Chromosome a => Int -> Double -> (StdGen -> (a, StdGen)) -> (a -> Int -> IO Bool) -> IO a
- zeroGeneration :: RandomGen g => g -> (g -> (a, g)) -> Int -> ([a], g)
- nextGeneration :: (RandomGen g, Chromosome a) => g -> [a] -> Int -> Double -> ([a], g)
Documentation
class NFData a => Chromosome a whereSource
Chromosome interface
:: (RandomGen g, Chromosome a) | |
=> g | Random number generator |
-> Int | Population size |
-> Double | Mutation probability [0, 1] |
-> (g -> (a, g)) | Random chromosome generator (hint: use currying or closures) |
-> (a -> Int -> Bool) | Stopping criteria, 1st arg - best chromosome, 2nd arg - generation number |
-> a | Best chromosome |
Pure GA implementation
:: Chromosome a | |
=> Int | Population size |
-> Double | Mutation probability [0, 1] |
-> (StdGen -> (a, StdGen)) | Random chromosome generator (hint: use currying or closures) |
-> (a -> Int -> IO Bool) | Stopping criteria, 1st arg - best chromosome, 2nd arg - generation number |
-> IO a | Best chromosome |
Non-pure GA implementation
:: RandomGen g | |
=> g | Random number generator |
-> (g -> (a, g)) | Random chromosome generator (hint: use closures) |
-> Int | Population size |
-> ([a], g) | Zero generation and new RNG |
Generate zero generation. Use this function only if you are going to implement your own runGA.
:: (RandomGen g, Chromosome a) | |
=> g | Random number generator |
-> [a] | Current generation |
-> Int | Population size |
-> Double | Mutation probability |
-> ([a], g) | Next generation ordered by fitness (best - first) and new RNG |
Generate next generation (in parallel) using mutation and crossover. Use this function only if you are going to implement your own runGA.