Derivation tree operations are needed for implementing 
            grammar-based genetic programming and grammatical evolution:  
            Generating a random derivation trees of a context-free grammar 
            of bounded depth, decoding a derivation tree, 
            choosing a random node in a derivation tree, 
            extracting a tree whose root is a specified node, and 
            inserting a subtree into a derivation tree at a specified node.
            These operations are necessary for the initialization and 
            for decoders of a random population of programs, 
            as well as for implementing crossover and mutation operators.
            Depth-bounds are guaranteed by switching to a grammar 
            without recursive production rules. 
            For executing the examples, the package 'BNF' is needed.
            The basic tree operations for generating, extracting, and 
            inserting derivation trees as well as the conditions 
            for guaranteeing complete derivation trees have been 
            presented in Geyer-Schulz (1997, ISBN:978-3-7908-0830-X).
            The use of random integer vectors for the generation 
            of derivation trees has been introduced in 
            Ryan, C., Collins, J. J., and  O'Neill, M. (1998)
            <doi:10.1007/BFb0055930> for grammatical evolution.

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>.  In addition, several (more recent) 
        methods for determining the scale factor are provided.