Glossary

activation function
aggregation function
bias
response
These are the attributes of a node. They determine the output of a node as follows: \(\begin{equation}\operatorname{activation}(bias + (response * \operatorname{aggregation}(inputs)))\end{equation}\) For available activation functions, see Overview of builtin activation functions; for adding new ones, see Customizing Behavior. For the available aggregation functions, see the aggregations module.
attributes
These are the properties of a node (such as its activation function) or connection (such as whether it is enabled or not) determined by its associated gene (in the default implementation, in the attributes module in combination with the gene class).
compute node
Using the distributed module, genomes can be evaluated on multiple machines (including virtual machines) at once. Each such machine/host is called a compute node. These are of two types, primary nodes and secondary nodes.
connection
These connect between nodes, and give rise to the network in the term neural network. For non-loopback (directly recurrent) connections, they are equivalent to biological synapses. Connections have two attributes, their weight and whether or not they are enabled; both are determined by their gene. An example gene class for connections can be seen in genes.DefaultConnectionGene.
continuous-time
discrete-time
A discrete-time neural network (which should be assumed unless specified otherwise) proceeds in time steps, with processing at one node followed by going through connections to other nodes followed by processing at those other nodes, eventually giving the output. A continuous-time neural network, such as the ctrnn (continuous-time recurrent neural network) implemented in NEAT-Python, simulates a continuous process via differential equations (or other methods).
CPPN
A Compositional Pattern-Producing Network. This is a neural network that, when fed inputs varying over a domain (such as the x and y axes of a potential image), produces outputs that, when mapped to the domain, give rise to patterns (such as shapes on such an image). One characteristic of CPPNs is the use of a wider variety of activation and/or aggregation functions; for examples of the former, see Overview of builtin activation functions. The picture2d examples use CPPNs, as does HyperNEAT.
crossover
The process in sexual reproduction in which two genomes are combined. This involves the combination of homologous genes and the copying (from the highest-fitness genome) of disjoint/excess genes. Along with mutation, one of the two sources of innovation in (classical) evolution.
disjoint
excess
These are genes in NEAT not descended from a common ancestor - i.e., not homologous. This implementation of NEAT, like most, does not distinguish between disjoint and excess genes. For further discussion, see the NEAT Overview.
feedforward
feed-forward
A neural network that is not recurrent is feedforward - it has no loops. (Note that this means that it has no memory - no ability to take into account past events.) It can thus be described as a DAG (Directed Acyclic Graph).
fitness
The fitness of genomes is what determines the fitness of species, which in turn determines the species’ next-generation sizes (and potential removal due to stagnation). The fitness function is determined by the user of the library; a genome that better accomplishes the desired goal(s) should have a higher fitness than one that does not. Note that some portions of the current implementation, such as the statistics reporter and the best_genome attribute of population.Population, assume that a genome’s fitness is constant; appropriate modifications are needed if this is not true (e.g., novelty search or coevolution). For further information, see NEAT Overview.
gene
The information coding (in the current implementation) for a particular aspect (node or connection) of a neural network phenotype. Contains several attributes, varying depending on the type of gene. Example gene classes include genes.DefaultNodeGene, genes.DefaultConnectionGene, and iznn.IZNodeGene; all of these are subclasses of genes.BaseGene.
generation
This implementation of NEAT uses, like most, multiple semi-separated generations (some genomes may survive multiple generations via elitism). In terms of generations, the steps are as follows: generate the next generation from the current population; partition the new generation into species based on genetic similarity; evaluate fitness of all genomes; check if a/the termination criterion is satisfied; if not, repeat. (The ordering in the population module is somewhat different.) Generations are numbered, and a limit on the number of generations is one type of termination criterion.
genetic distance
The distance between two homologous genes, added up as part of the genomic distance. Also sometimes used as a synonym for genomic distance.
genome
The set of genes that together code for a (neural network) phenotype. Example genome objects can be seen in genome.DefaultGenome and iznn.IZGenome, and the object interface is described in Genome Interface.
genomic distance
An approximate measure of the difference between genomes, used in dividing the population into species. For further discussion, see the NEAT Overview.
hidden node
These are the nodes other than input nodes and output nodes. In the original NEAT (NeuroEvolution of Augmenting Topologies) algorithm, networks start with no hidden nodes, and evolve more complexity as necessary - thus “Augmenting Topologies”.
homologous
Descended from a common ancestor; two genes in NEAT from different genomes are either homologous or disjoint/excess. In NEAT, two genes that are homologous will have the same key/id. For node genes, the key is an int incremented with each newly-created node; for connection genes, the key is a tuple of the keys of the nodes being connected. For further discussion, see the NEAT Overview.
HyperNEAT
A NEAT variant in which NEAT is used to evolve a CPPN, which is fed the potential coordinates (in a multidimensional space - usually at least 4) of connections and nodes, and its output(s) are used to determine the characteristics and/or presence of the corresponding connections and nodes. The fitness of the CPPN is not determined directly, but by the fitness of the network it creates. Work on enabling HyperNEAT in neat-python is ongoing.
id
key
Various of the objects used by the library are indexed by an key (id); for most, this is an int, which is either unique in the library as a whole (as with species and genomes), or within a genome (as with node genes). For connection genes, this is a tuple of two ints, the keys of the connected nodes. For input nodes (or input pins), it is the input’s (list or tuple) index plus one, then multiplied by negative one; for output nodes, it is equal to the output’s (list or tuple) index.
input node
These are the nodes through which the network receives inputs. They cannot be deleted (although connections from them can be), cannot be the output end of a connection, and have: no aggregation function; a fixed bias of 0; a fixed response multiplier of 1; and a fixed activation function of identity. Note: In the genome module, they are not in many respects treated as actual nodes, but simply as keys for input ends of connections. Sometimes known as an input pin.
multiparameter
Multiparameter activation and aggregation functions are ones in which, as well as the normal inputs, additional ones determined as attributes to be evolved. The multiparameter module handles creating and fetching them, while existing ones can. be seen in the activations and aggregations modules (and further regarding the former in Overview of builtin activation functions).
mutate
mutation
The process in which the attributes of a gene (or the genes in a genome) are (randomly, with likelihoods determined by configuration parameters) altered. Along with crossover, one of the two sources of innovation in (classical) evolution.
node
Also known as a neuron (as in a neural network). They are of three types: input, hidden, and output. Nodes have one or more attributes, such as an activation function; all are determined by their gene. Classes of node genes include genes.DefaultNodeGene and iznn.IZNodeGene. (They should not be confused with compute nodes, host machines on which distributed evaluations of genomes are performed.)
output node
These are the nodes to which the network delivers outputs. They cannot be deleted (although connections to them can be) but can otherwise be mutated normally. The output of this node is connected to the corresponding output pin with an implicit weight-1, enabled connection.
pin
Point at which the network is effectively connected to the external world. Pins are either input (aka input nodes) or output (connected to an output node with the same key as the output pin).
primary node
primary compute node
If using the distributed module, you will need one primary compute node and at least one secondary node. The primary node creates and mutates genomes, then distributes them to the secondary nodes for evaluation. (It does not do any evaluations itself; thus, at least one secondary node is required.)
recurrent
A recurrent neural network has cycles in its topography. These may be a node having a connection back to itself, with (for a discrete-time neural network) the prior time period’s output being provided to the node as one of its inputs. They may also have longer cycles, such as with output from node A going into node B (via a connection) and an output from node B going (via another connection) into node A. (This gives it a possibly-useful memory - an ability to take into account past events - unlike a feedforward neural network; however, it also makes it harder to work with in some respects.)
secondary node
secondary compute node
If using the distributed module, you will need at least one secondary compute node, as well as a primary node. The secondary nodes evaluate genomes, distributed to them by the primary node.
species
Subdivisions of the population into groups of similar (by the genomic distance measure) individuals (genomes), which compete among themselves but share fitness relative to the rest of the population. This is, among other things, a mechanism to try to avoid the quick elimination of high-potential topological mutants that have an initial poor fitness prior to smaller “tuning” changes. For further discussion, see the NEAT Overview.
stagnation
In NEAT, no matter what the fitness of a species, it will always have at least a (configured - usually 2) minimum number of genomes. Poorly performing species (as opposed to genomes) are removed if they fail to improve in a (configured) number of generations; other configuration variables can be found in the config file’s [DefaultStagnation] section, and the default implementation in the stagnation module.
weight
enabled
These are the attributes of a connection. If a connection is enabled, then the input to it (from a node) is multiplied by the weight then sent to the output (to a node - possibly the same node, for a recurrent neural network). If a connection is not enabled, then the output is 0; genes for such connections are the equivalent of pseudogenes that, as in in vivo evolution, can be reactivated at a later time. TODO: Some versions of NEAT give a chance, such as 25%, that a disabled connection will be enabled during crossover; in the future, this should be an option.

Table of Contents