This module contains code related to fitness evaluation. The main purpose of the code is to both evaluate fitnesses of individuals and to sort individuals by fitness. These are intended to all be higher order functions that assume nothing about the purpose of the individuals or the types of inputs being used for fitness testing. The only assumption made currently is that the outputs for test cases are floating point numbers. That likely should change for general purpose usage.
- type FitnessFunction a b = a -> TestCase b -> Double -> Double -> Double
- type TestCase a = SymTable a
- type TestDict a = [TestCase a]
- type TestOuts = [Double]
- fitness_tester :: a -> FitnessFunction a b -> TestDict b -> TestOuts -> Double -> Double
- fitness_filter :: [Double] -> [Chromosome] -> [(Double, Chromosome)]
- sortByFitness :: [(Double, Chromosome)] -> [(Double, Chromosome)]
|-> FitnessFunction a b|
|-> TestDict b|
List of symbol tables for test cases
List of expected outputs for test cases
Range of selection. M in original GEP paper equations for fitness.
Fitness value for given individual
Fitness evaluator for generic individuals. This needs to go away and use a more general approach like evaluateFitness above.
|-> [(Double, Chromosome)]|
Paired fitness/individuals after filtering
Given a list of fitness values and a corresponding list of individuals, return a list of tuples pairing the fitness value with the individuals for only those individuals that have a valid fitness value. This means those that are +/- infinity or NaN are removed.