Copyright | (c) Amy de Buitléir 2012-2016 |
---|---|
License | BSD-style |
Maintainer | amy@nualeargais.ie |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
A reproduction method for artificial lifeforms where:
- Each agent has a single strand of genetic information.
- Each child has two parents.
- Each parent contributes approximately half of its genetic information to the offspring.
- class Reproductive a where
- type Strand a
Documentation
class Reproductive a where Source #
A species that reproduces, transmitting genetic information to
its offspring. Minimal complete definition: all except mate
.
recombine :: RandomGen r => a -> a -> Rand r (Strand a) Source #
Recombines the genetic information from two parents, creating genetic information for potential offspring.
Typically this involves the following steps:
- Recombine the two strands of genetic information (one from each parent) to obtain two new strands.
- Discard one strand, and return the remaining one.
build :: AgentId -> Strand a -> Either [String] a Source #
Builds an agent based on the genome provided, if it is possible to do so.
makeOffspring :: RandomGen r => a -> a -> AgentId -> Rand r (Either [String] a) Source #
uses the genetic
information from makeOffspring
(parent1, parent2) nameparent1
and parent2
to produce a child with
the agent ID name
. The default implementation: