module GEP.GenericDriver where
import System.Random.Mersenne.Pure64
import GEP.TimeStep
import GEP.Rmonad
import GEP.Random
import GEP.Types
import GEP.Params
import GEP.Fitness
gepDriver :: SimParams
-> Rates
-> Genome
-> TestDict b
-> TestOuts
-> FitnessFunction a b
-> ExpressionFunction a
-> IO (Double, [Chromosome])
gepDriver params rs gnome testdict testouts fitness_evaluate expression_function = do
(initialPopulation,rngState) <- return $ runRmonad
(newPopulation gnome
(popSize params))
(pureMT 1)
((best,pop),_) <- return $ runRmonad
(multiStep
initialPopulation
gnome
params
rs
expression_function
fitness_evaluate
testdict
testouts
(numGenerations params)
(maxFitness params) )
rngState
return (best,pop)