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).

An implementation of 
        representation-dependent gene level operations for
        genetic algorithms with genes representing permutations: 
        Initialization of genes, mutation, and crossover.
        The crossover operation provided is position-based crossover 
        (Syswerda, G., Chap. 21 in Davis, L. (1991, ISBN:0-442-00173-8). 
        For mutation, several variants are included: Order-based mutation
        (Syswerda, G., Chap. 21 in Davis, L. (1991, ISBN:0-442-00173-8), 
        randomized Lin-Kernighan heuristics
        (Croes, G. A. (1958) <doi:10.1287/opre.6.6.791> and
         Lin, S. and Kernighan. B. W. (1973) 
        <doi:10.1287/opre.21.2.498>), 
        and randomized greedy operators.
        A random mix operator for mutation selects a mutation variant 
        randomly.