HSGEP-0.1.5: Gene Expression Programming evolutionary algorithm in Haskell

Safe HaskellSafe-Inferred



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 -> DoubleSource

Fitness function type

type TestCase a = SymTable aSource

A test case maps a list of terminals to float values

type TestDict a = [TestCase a]Source

A test dictionary is a set of test cases

type TestOuts = [Double]Source

The set of outputs expected for each entry in the test dictionary



:: 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]


-> [(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