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.
mjsottile@computer.org
- 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)]
Documentation
:: a | Expressed individual |
-> FitnessFunction a b | Fitness function |
-> TestDict b | List of symbol tables for test cases |
-> TestOuts | List of expected outputs for test cases |
-> Double | Range of selection. M in original GEP paper equations for fitness. |
-> Double | 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] | Fitness values |
-> [Chromosome] | Individuals |
-> [(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.
sortByFitness :: [(Double, Chromosome)] -> [(Double, Chromosome)]Source
Sort a set of individuals with fitness values by their fitness