Copyright | (c) Amy de Buitléir 2013-2014 |
---|---|
License | BSD-style |
Maintainer | amy@nualeargais.ie |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
Utilities for working with genes that are encoded as a sequence of bytes, using a Binary Reflected Gray Code (BRGC).
A Gray code maps values to codes in a way that guarantees that the codes for two consecutive values will differ by only one bit. This feature can be useful in evolutionary programming because the genes resulting from a crossover operation are likely to be similar to the inputs. This helps to ensure that offspring are similar to their parents, as any radical changes from one generation to the next are the result of mutation alone.
- class Genetic g where
- type Sequence = [Word8]
- type Writer = StateT Sequence Identity
- write :: Genetic x => x -> Sequence
- runWriter :: Writer () -> Sequence
- type Reader = StateT (Sequence, Int) Identity
- read :: Genetic g => Sequence -> Either [String] g
- runReader :: Reader g -> Sequence -> g
- copy :: Reader Sequence
- consumed :: Reader Sequence
- type DiploidSequence = (Sequence, Sequence)
- type DiploidReader = StateT ((Sequence, Int), (Sequence, Int)) Identity
- readAndExpress :: (Genetic g, Diploid g) => DiploidSequence -> Either [String] g
- runDiploidReader :: DiploidReader g -> DiploidSequence -> g
- getAndExpress :: (Genetic g, Diploid g) => DiploidReader (Either [String] g)
- getAndExpressWithDefault :: (Genetic g, Diploid g) => g -> DiploidReader g
- copy2 :: DiploidReader DiploidSequence
- consumed2 :: DiploidReader DiploidSequence
- putRawWord8 :: Word8 -> Writer ()
- getRawWord8 :: Reader (Either [String] Word8)
- putRawWord8s :: [Word8] -> Writer ()
- getRawWord8s :: Int -> Reader (Either [String] [Word8])
Documentation
A class representing anything which is represented in, and determined by, an agent's genome. This might include traits, parameters, "organs" (components of agents), or even entire agents. Instances of this class can be thought of as genes, i.e., instructions for building an agent.
Nothing
type DiploidSequence = (Sequence, Sequence) Source
readAndExpress :: (Genetic g, Diploid g) => DiploidSequence -> Either [String] g Source
runDiploidReader :: DiploidReader g -> DiploidSequence -> g Source
getAndExpress :: (Genetic g, Diploid g) => DiploidReader (Either [String] g) Source
Read the next pair of genes from twin sequences of genetic information, and return the resulting gene (after taking into account any dominance relationship) and the remaining (unread) portion of the two nucleotide strands.
getAndExpressWithDefault :: (Genetic g, Diploid g) => g -> DiploidReader g Source
copy2 :: DiploidReader DiploidSequence Source
Return the entire genome.
consumed2 :: DiploidReader DiploidSequence Source
Return the portion of the genome that has been read.
putRawWord8 :: Word8 -> Writer () Source
Write a Word8 value to the genome without encoding it
getRawWord8 :: Reader (Either [String] Word8) Source
Read a Word8 value from the genome without decoding it
putRawWord8s :: [Word8] -> Writer () Source
Write a raw sequence of Word8 values to the genome