Representation-dependent gene level operations  
        for genetic and evolutionary algorithms with real-coded genes
        are collected in this package. The common feature of the gene
        operations is that all of them are useful for derivation-free
        optimization algorithms. At the moment the package  
        implements initialization, mutation, crossover, and replication 
        operations for differential evolution as described in
        Price, Kenneth V., Storn, Rainer M. and Lampinen, Jouni A. (2005)
        <doi:10.1007/3-540-31306-0>.

Representation-dependent gene level operations of a 
        genetic algorithm with binary coded genes:
        Initialization of random binary genes, several gene maps for 
        binary genes, several mutation operators, several crossover
        operators with 1 and 2 kids, replication 
        pipelines for 1 and 2 kids, and, last but not least, function 
        factories for configuration. 
        See Goldberg, D. E. (1989, ISBN:0-201-15767-5).
        For crossover operators, see 
        Syswerda, G. (1989, ISBN:1-55860-066-3),
        Spears, W. and De Jong, K. (1991, ISBN:1-55860-208-9).
        For mutation operators, see 
        Stanhope, S. A. and Daida, J. M. (1996, ISBN:0-18-201-031-7).

Grammatical evolution  (see O'Neil, M. and 
        Ryan, C.  (2003,ISBN:1-4020-7444-1)) uses decoders to 
        convert linear (binary or integer genes) into programs.  
        In addition, automatic determination of codon precision 
        with a limited rule choice bias is provided.
        For a recent survey of grammatical evolution, 
        see Ryan, C., O'Neill, M., and Collins, J. J. (2018)
        <doi:10.1007/978-3-319-78717-6>.

An implementation of
        the representation-dependent gene level operations of grammar-based
        genetic programming with genes which are derivation trees
        of a context-free grammar: Initialization of a gene with a 
        complete random derivation tree, decoding of a derivation tree.
        Crossover is implemented by exchanging subtrees. Depth-bounds
        for the minimal and the maximal depth of the roots of the subtrees
        exchanged by crossover can be set. 
        Mutation is implemented by replacing a subtree by a random subtree. 
        The depth of the random subtree and the insertion node are 
        configurable. For details, 
        see Geyer-Schulz (1997, ISBN:978-3-7908-0830-X).