creatur-5.9.30: Framework for artificial life experiments.
Copyright(c) 2012-2021 Amy de Buitléir
LicenseBSD-style
Maintaineramy@nualeargais.ie
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

ALife.Creatur.Genetics.Reproduction.Sexual

Description

A reproduction method for artificial lifeforms where:

  • Each agent has two strands of genetic information.
  • Each child has two parents.
  • Each parent contributes approximately half of its genetic information to the offspring.
Synopsis

Documentation

class Reproductive a where Source #

A species that reproduces, transmitting genetic information to its offspring. Minimal complete definition: all except mate.

Minimal complete definition

produceGamete, build

Associated Types

type Strand a Source #

A sequence of hereditary information for an agent. The type signature for the agent's genome is (Strand a, Strand a).

Methods

produceGamete :: RandomGen r => a -> Rand r (Strand a) Source #

From the two strands of the genetic information from this agent, creates a single strand that will contribute to the child's genome. (This is analogous to creating either a single sperm or ova.)

build :: AgentId -> (Strand a, 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 #

makeOffspring (parent1, parent2) name uses the genetic information from parent1 and parent2 to produce a child with the agent ID name. The default implementation:

  1. Calls produceGamete to produce a single strand of genetic information from each parent.
  2. Pairs the two strands to create a genome for the child.
  3. Calls build construct a child with this genome.