Module summaries
activations
Has the built-in activation functions, code for using them, and code for adding new user-defined ones.
- exception activations.InvalidActivationFunction(TypeError)[source]
Exception called if an activation function being added is invalid according to the
validate_activationfunction, or if an unknown activation function is requested by name viaget.Changed in version 0.92: Base of exception changed to more-precise TypeError.
- activations.validate_activation(function)[source]
Checks to make sure its parameter is a function that takes a single argument.
- Parameters:
function (object) – Object to be checked.
- Raises:
InvalidActivationFunction – If the object does not pass the tests.
- class activations.ActivationFunctionSet[source]
Contains the list of current valid activation functions, including methods for adding and getting them.
- add(name, function)[source]
After validating the function (via
validate_activation), adds it to the available activation functions under the given name. Used byDefaultGenomeConfig.add_activation.
- Parameters:
name (str) – The name by which the function is to be known in the configuration file.
function (
function) – The function to be added.
- get(name)[source]
Returns the named function, or raises an exception if it is not a known activation function.
- Parameters:
name (str) – The name of the function.
- Returns:
The function of interest
- Return type:
- Raises:
InvalidActivationFunction – If the function is not known.
aggregations
Has the built-in aggregation functions, code for using them, and code for adding new user-defined ones.
Note
Non-enabled connections will, by all methods currently included in NEAT-Python, not be included among the numbers input to these functions, even as 0s.
- aggregations.product_aggregation(x)[source]
An adaptation of the multiplication function to take an https://docs.python.org/3/glossary.html#term-iterable. Returns
1.0for an empty input (the multiplicative identity, fromreduce’s initializer).
- aggregations.sum_aggregation(x)[source]
Probably the most commonly-used aggregation function. Returns
0for an empty input (via Python’s built-insum).
- Parameters:
x (list(float) or tuple(float) or set(float)) – The numbers to find the sum of; takes any https://docs.python.org/3/glossary.html#term-iterable.
- Returns:
\(\sum(x)\) for nonempty
x, otherwise0.- Return type:
- aggregations.max_aggregation(x)[source]
Returns the maximum of the inputs, or
0.0for an empty input (e.g. an orphaned node with no incoming connections).
- Parameters:
x (list(float) or tuple(float) or set(float)) – The numbers to find the greatest of; takes any https://docs.python.org/3/glossary.html#term-iterable.
- Returns:
\(\max(x)\) for nonempty
x, otherwise0.0.- Return type:
- aggregations.min_aggregation(x)[source]
Returns the minimum of the inputs, or
0.0for an empty input (e.g. an orphaned node with no incoming connections).
- Parameters:
x (list(float) or tuple(float) or set(float)) – The numbers to find the least of; takes any https://docs.python.org/3/glossary.html#term-iterable.
- Returns:
\(\min(x)\) for nonempty
x, otherwise0.0.- Return type:
- aggregations.maxabs_aggregation(x)[source]
Returns the maximum by absolute value, which may be positive or negative. Envisioned as suitable for neural network pooling operations. Returns
0.0for an empty input (e.g. an orphaned node with no incoming connections).
- Parameters:
x (list(float) or tuple(float) or set(float)) – The numbers to find the absolute-value maximum of; takes any https://docs.python.org/3/glossary.html#term-iterable.
- Returns:
\(x_i, i = \text{argmax}\lvert\mathbf{x}\rvert\) for nonempty
x, otherwise0.0.- Return type:
Added in version 0.92.
- aggregations.median_aggregation(x)[source]
Returns the
medianof the inputs, or0.0for an empty input (e.g. an orphaned node with no incoming connections).
- Parameters:
x (list(float) or tuple(float) or set(float)) – The numbers to find the median of; takes any https://docs.python.org/3/glossary.html#term-iterable.
- Returns:
The median for nonempty
x(if there are an even number of inputs, takes the mean of the middle two); otherwise0.0.- Return type:
Added in version 0.92.
- aggregations.mean_aggregation(x)[source]
Returns the arithmetic mean. Potentially maintains a more stable result than
sumfor changing numbers of enabled connections, which may be good or bad depending on the circumstances; having both available to the algorithm is advised. Returns0.0for an empty input (e.g. an orphaned node with no incoming connections).
- Parameters:
x (list(float) or tuple(float) or set(float)) – The numbers to find the mean of; takes any https://docs.python.org/3/glossary.html#term-iterable.
- Returns:
The arithmetic mean for nonempty
x, otherwise0.0.- Return type:
Added in version 0.92.
- exception aggregations.InvalidAggregationFunction(TypeError)[source]
Exception called if an aggregation function being added is invalid according to the
validate_aggregationfunction, or if an unknown aggregation function is requested by name viaget.Added in version 0.92.
- aggregations.validate_aggregation(function)[source]
Checks that
functionis callable with exactly one positional argument. Returns early (accepting the callable) for CPython builtins whose signatures cannot be inspected viainspect.signature.
- Parameters:
function (object) – Object to be checked.
- Raises:
InvalidAggregationFunction – If the object is not callable, its signature cannot be inspected (and it is not a builtin), or it cannot be invoked with exactly one positional argument.
Added in version 0.92.
- class aggregations.AggregationFunctionSet[source]
Contains the list of current valid aggregation functions, including methods for adding and getting them.
- add(name, function)[source]
After validating the function (via
validate_aggregation), adds it to the available aggregation functions under the given name. Used byDefaultGenomeConfig.add_aggregation. TODO: Check for whether the function needsreduce, or at least offer a form of this function (or extra argument for it, defaulting to false) and/or its interface ingenome, that will appropriately “wrap” the input function.
- Parameters:
name (str) – The name by which the function is to be known in the configuration file.
function (
function) – The function to be added.Added in version 0.92.
- get(name)[source]
Returns the named function, or raises an exception if it is not a known aggregation function.
- Parameters:
name (str) – The name of the function.
- Returns:
The function of interest
- Return type:
- Raises:
InvalidAggregationFunction – If the function is not known.
Added in version 0.92.
- __getitem__(index)[source]
Present for compatibility with older programs that expect the aggregation functions to be in a
dict. A wrapper forget(index).
- Parameters:
index (str) – The name of the function.
- Returns:
The function of interest.
- Return type:
- Raises:
InvalidAggregationFunction – If the function is not known.
DeprecationWarning – Always.
Changed in version 0.92: Originally a dictionary in
genome.Deprecated since version 0.92: Use
get(index)instead.Changed in version 0.92: Moved from
genomeand expanded to matchactivations(plus themaxabs,median, andmeanfunctions added).
attributes
Deals with attributes used by genes.
digraph inheritance199b63f8fc { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "attributes.BaseAttribute" [URL="#attributes.BaseAttribute",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Superclass for the type-specialized attribute subclasses, used by genes."]; "attributes.BoolAttribute" [URL="#attributes.BoolAttribute",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Class for boolean attributes such as whether a connection is enabled or not."]; "attributes.BaseAttribute" -> "attributes.BoolAttribute" [arrowsize=0.5,style="setlinewidth(0.5)"]; "attributes.FloatAttribute" [URL="#attributes.FloatAttribute",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Class for floating-point numeric attributes,"]; "attributes.BaseAttribute" -> "attributes.FloatAttribute" [arrowsize=0.5,style="setlinewidth(0.5)"]; "attributes.IntegerAttribute" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="Class for integer numeric attributes."]; "attributes.BaseAttribute" -> "attributes.IntegerAttribute" [arrowsize=0.5,style="setlinewidth(0.5)"]; "attributes.StringAttribute" [URL="#attributes.StringAttribute",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Class for string attributes such as the aggregation function of a node,"]; "attributes.BaseAttribute" -> "attributes.StringAttribute" [arrowsize=0.5,style="setlinewidth(0.5)"]; }
- class attributes.BaseAttribute(name, **default_dict)[source]
Superclass for the type-specialized attribute subclasses, used by genes (such as via the
genes.BaseGeneimplementation). Updates_config_itemswith any defaults supplied, then usesconfig_item_nameto set up a listing of the names of configuration items usingsetattr.
- Parameters:
Changed in version 0.92: Default_dict capability added.
- config_item_name(config_item_base_name)[source]
Formats a configuration item’s name by combining the attribute’s name with the base item name.
- Parameters:
config_item_base_name (str) – The base name of the configuration item, to be combined with the attribute’s name.
- Returns:
The configuration item’s full name.
- Return type:
Changed in version 0.92: Originally (as
config_item_names) did not take any input and returned a list based on the_config_itemssubclass attribute.
- get_config_params()[source]
Uses
config_item_namefor each configuration item to get the name, then gets the appropriate type ofconfig.ConfigParameterinstance for each (with any appropriate defaults being set from_config_items, including as modified byBaseAttribute) and returns it.
- Returns:
A list of
ConfigParameterinstances.- Return type:
list(instance)
Changed in version 0.92: Was originally specific for the attribute subclass, since it did not pick up the appropriate type from the
_config_itemslist; default capability also added.
- class attributes.FloatAttribute(BaseAttribute)[source]
Class for numeric attributes such as the response of a node; includes code for configuration, creation, and mutation.
- clamp(value, config)[source]
Gets the minimum and maximum values desired from
config, then ensures that the value is between them.
- init_value(config)[source]
Initializes the attribute’s value, using either a gaussian distribution with the configured mean and standard deviation, followed by
clampto keep the result within the desired range, or a uniform distribution, depending on the configuration setting ofinit_type.
- Parameters:
config (instance) – The configuration object from which the mean, standard deviation, and initialization distribution type values are to be retrieved.
- Returns:
The new value.
- Return type:
Changed in version 0.92: Uniform distribution initialization option added.
- mutate_value(value, config)[source]
May replace (as if reinitializing, using
init_value), mutate (using a 0-mean gaussian distribution with a configured standard deviation frommutate_power), or leave alone the input value, depending on the configuration settings (ofreplace_rateandmutate_rate).
- class attributes.BoolAttribute(BaseAttribute)[source]
Class for boolean attributes such as whether a connection is enabled or not; includes code for configuration, creation, and mutation.
- init_value(config)[source]
Initializes the attribute’s value, either using a configured
default, or (if the default is “random”) with a 50/50 chance ofTrueorFalse.Deprecated since version 0.92: While it is possible to use “None” as an equivalent to “random”, this is too easily confusable with an actual
None.
- Parameters:
config (instance) – The configuration object from which the default parameter is to be retrieved.
- Returns:
The new value.
- Return type:
- Raises:
RuntimeError – If the default value is not recognized as standing for any of
True,False, “random”, or “none”.
- mutate_value(value, config)[source]
With a frequency determined by the
mutate_rateandrate_to_false_addorrate_to_true_addconfiguration parameters, replaces the value with a 50/50 chance ofTrueorFalse; note that this has a 50% chance of leaving the value unchanged.
- Parameters:
- Returns:
Either the original value, if unchanged, or the new value.
- Return type:
Changed in version 0.92: Added the
rate_to_false_addandrate_to_true_addparameters.
- class attributes.StringAttribute(BaseAttribute)[source]
Class for string attributes such as the aggregation function of a node, which are selected from a list of options; includes code for configuration, creation, and mutation.
- init_value(config)[source]
Initializes the attribute’s value, either using a configured
defaultor (if the default is “random”) with a randomly-chosen member of theoptions(each having an equal chance). Note: It is possible for the default value, if specifically configured, to not be one of the options.Deprecated since version 0.92: While it is possible to use “None” as an equivalent to “random”, this is too easily confusable with an actual
None.
- mutate_value(value, config)[source]
With a frequency determined by the
mutate_rateconfiguration parameter, replaces the value with one of theoptions, with each having an equal chance; note that this can be the same value as before. (It is possible to crudely alter the chances of what is chosen by listing a given option more than once, although this is inefficient given the use of therandom.choicefunction.) TODO: Add configurable probabilities of which option is used. Longer-term, as with the improved version of RBF-NEAT, separate genes for the likelihoods of each (but always doing some change, to prevent overly-conservative evolution due to its inherent short-sightedness), allowing the genomes to control the distribution of options, will be desirable.Changed in version 0.92:
__config_items__changed to_config_items, since it is not a Python internal variable.
checkpoint
Uses pickle to save and restore populations (and other aspects of the simulation state).
Note
The speed of this module can vary widely between python implementations (and perhaps versions).
- class checkpoint.Checkpointer(generation_interval=100, time_interval_seconds=300, filename_prefix='neat-checkpoint-')[source]
A reporter class that performs checkpointing, saving and restoring the simulation state (including population, randomization, and other aspects). It saves the current state every
generation_intervalgenerations ortime_interval_secondsseconds, whichever happens first. Subclassesreporting.BaseReporter. Checkpoints are saved after fitness evaluation (inpost_evaluate), so the saved population contains genomes with their evaluated fitness values. The start of the filename will be equal tofilename_prefix, followed by the generation number. Checkpoint fileNmeans “generation N has been evaluated.” If there is a need to check the last generation for which a checkpoint was saved, such as to determine which file to load, accesslast_generation_checkpoint; if -1, none have been saved.
- Parameters:
- save_checkpoint(config, population, species_set, generation, best_genome=None)[source]
Saves the current simulation (including randomization) state to (if using the default
neat-checkpoint-forfilename_prefix)neat-checkpoint-generation, withgenerationbeing the generation that has just been evaluated.
- Parameters:
config (instance) – The
config.Configconfiguration instance to be used.population (dict(int, object)) – A population as created by
reproduction.DefaultReproduction.create_new()or a compatible implementation.species_set (instance) – A
species.DefaultSpeciesSet(or compatible implementation) instance.generation (int) – The generation number.
best_genome (object or None) – The all-time best genome seen so far (preserved across checkpoint/restore).
- static restore_checkpoint(filename, new_config=None)[source]
Resumes the simulation from a previous saved point. Loads the specified file, sets the randomization state, and returns a
population.Populationobject set up with the rest of the previous state. The restored population’s first call toPopulation.runwill skip fitness evaluation for the already-evaluated generation and proceed directly to reproduction.
- Parameters:
- Returns:
Populationinstance that can be used withPopulation.runto restart the simulation.- Return type:
config
Does general configuration parsing; used by other classes for their configuration.
- class config.ConfigParameter(name, value_type, default=None)[source]
Does initial handling of a particular configuration parameter.
- Parameters:
Changed in version 0.92: Default capability added.
- __repr__()[source]
Returns a representation of the class suitable for use in code for initialization.
- parse(section, config_parser)[source]
Uses the supplied configuration parser (either from the
configparser.ConfigParserclass, or - for 2.7 - the ConfigParser.SafeConfigParser class) to gather the configuration parameter from the appropriate configuration file section. Parsing varies depending on the type.
- Parameters:
- Returns:
The configuration parameter value, in stringified form unless a list.
- Return type:
- interpret(config_dict)[source]
Takes a
dictionaryof configuration parameters, as output by the configuration parser called inparse(), and interprets them into the proper type, with some error-checking.
- Parameters:
config_dict (dict(str, str)) – Configuration parameters as output by the configuration parser.
- Returns:
The configuration parameter value
- Return type:
- Raises:
RuntimeError – If there is a problem with the configuration parameter.
DeprecationWarning – If a default is used.
Changed in version 0.92: Default capability added.
- config.write_pretty_params(f, config, params)[source]
Prints configuration parameters, with justification based on the longest configuration parameter name.
- Parameters:
f (file) – File object to be written to.
config (instance) – Configuration object from which parameter values are to be fetched (using
getattr).params (list(instance)) – List of
ConfigParameterinstances giving the names of interest and the types of parameters.
- exception config.UnknownConfigItemError(NameError)[source]
Error for unknown configuration option(s) - partially to catch typos. TODO:
genome.DefaultGenomeConfigdoes not currently check for these.Added in version 0.92.
- class config.DefaultClassConfig(param_dict, param_list)[source]
Replaces at least some boilerplate configuration code for reproduction, species_set, and stagnation classes.
- Parameters:
param_dict (dict(str, str)) – Dictionary of configuration parameters from config file.
param_list (list(instance)) – List of
ConfigParameterinstances; used to know what parameters are of interest to the calling class.- Raises:
UnknownConfigItemError – If a key in
param_dictis not among the names inparam_list.
- classmethod write_config(f, config)[source]
Required method (inherited by calling classes). Uses
write_pretty_params()to output parameters of interest to the calling class.Added in version 0.92.
- class config.Config(genome_type, reproduction_type, species_set_type, stagnation_type, filename)[source]
A simple container for user-configurable parameters of NEAT. The four parameters ending in
_typemay be the built-in ones or user-provided objects, which must make available the methodsparse_configandwrite_config, plus others depending on which object it is. (For more information on the objects, see below and Customizing Behavior.)Configitself takes care of the NEAT parameters, which are found as some of its attributes. For a description of the configuration file, see Configuration file description. The __name__ attributes of the_typeparameters are used for the titles of the configuration file sections. A Config instance’sgenome_config,species_set_config,stagnation_config, andreproduction_configattributes hold the configuration objects for the respective classes.
- Parameters:
genome_type (https://docs.python.org/3/glossary.html#term-class) – Specifies the genome class used, such as
genome.DefaultGenomeoriznn.IZGenome. See Genome Interface for the needed interface.reproduction_type (https://docs.python.org/3/glossary.html#term-class) – Specifies the reproduction class used, such as
reproduction.DefaultReproduction. See Reproduction Interface for the needed interface.species_set_type (https://docs.python.org/3/glossary.html#term-class) – Specifies the species set class used, such as
species.DefaultSpeciesSet.stagnation_type (https://docs.python.org/3/glossary.html#term-class) – Specifies the stagnation class used, such as
stagnation.DefaultStagnation.filename (str) –
Pathname for configuration file to be opened, read, processed by a parser from the
configparser.ConfigParserclass (or, for 2.7, the ConfigParser.SafeConfigParser class), theNEATsection handled byConfig, and then other sections passed to theparse_configmethods of the appropriate classes.- Raises:
AssertionError – If any of the
_typeclasses lack aparse_configmethod.UnknownConfigItemError – If an option in the
NEATsection of the configuration file is not recognized.DeprecationWarning – If a default is used for one of the
NEATsection options.Changed in version 0.92: Added default capabilities, UnknownConfigItemError, no_fitness_termination.
- save(filename)[source]
Opens the specified file for writing (not appending) and outputs a configuration file from the current configuration. Uses
write_pretty_params()for theNEATparameters and the appropriate classwrite_configmethods for the other sections. (A comparison of it and the input configuration file can be used to determine any default parameters of interest.)
- Parameters:
filename (str) – The configuration file to be written.
ctrnn
- class ctrnn.CTRNNNodeEval(time_constant, activation, aggregation, bias, response, links)[source]
Sets up the basic ctrnn (continuous-time recurrent neural network) nodes.
- Parameters:
time_constant (float) – Controls how fast the node responds; \(\tau_i\) from Continuous-time recurrent neural network implementation.
activation (
function) – Activation function for the node.aggregation (
function) – Aggregation function for the node.links (list(tuple(int,float))) – List of other nodes providing input, as tuples of (input key, weight)
- class ctrnn.CTRNN(inputs, outputs, node_evals)[source]
Sets up the ctrnn network itself.
- reset()[source]
Resets the time and all node activations to 0 (necessary due to otherwise retaining state via recurrent connections).
- advance(inputs, advance_time, time_step=None)[source]
Advance the simulation by the given amount of time, assuming that inputs are constant at the given values during the simulated time.
- Parameters:
inputs (list(float)) – The values for the input nodes.
advance_time (float) – How much time to advance the network before returning the resulting outputs.
time_step (float or None) – How much time per step to advance the network; the default of
Nonewill currently result in an error, but it is planned to determine it automatically.- Returns:
The values for the output nodes.
- Return type:
- Raises:
NotImplementedError – If a
time_stepis not given.RuntimeError – If the number of
inputsdoes not match the number of input nodesChanged in version 0.92: Exception changed to more-specific RuntimeError.
- static create(genome, config)[source]
Receives a genome and returns its phenotype (a
CTRNNwithCTRNNNodeEvalnodes). Each node’s time constant is read from the genome’s node genetime_constantattribute.
- Parameters:
genome (instance) – A
genome.DefaultGenomeinstance.config (instance) – A
config.Configinstance.Changed in version 2.0.0: The
time_constantparameter was removed. Time constants are now per-node attributes evolved as part of the genome.
parallel
Runs evaluation functions in parallel subprocesses in order to evaluate multiple genomes at once.
- class parallel.ParallelEvaluator(num_workers, eval_function, timeout=None, initializer=None, initargs=(), maxtasksperchild=None)[source]
Runs evaluation functions in parallel subprocesses using multiprocessing.Pool to evaluate multiple genomes at once.
Changed in version 1.0: Added context manager support for proper resource cleanup.
- Parameters:
num_workers (int) – How many workers to have in the multiprocessing pool.
eval_function (
function) – The eval_function should take one argument - atupleof (genome object, config object) - and return a single float (the genome’s fitness). Note that this is not the same as how a fitness function is called byPopulation.run.timeout (int or None) – How long (in seconds) each subprocess will be given before an exception is raised (unlimited if
None).initializer (
functionor None) – Optional function to call on each worker process at startup.initargs (tuple) – Optional tuple of arguments for the initializer function.
maxtasksperchild (int or None) – The number of tasks a worker process can complete before it will exit and be replaced with a fresh worker process, to enable unused resources to be freed. The default maxtasksperchild is None, which means worker processes will live as long as the pool.
- __enter__()[source]
Context manager entry point. Returns self.
- Returns:
The ParallelEvaluator instance.
- Return type:
Added in version 1.0.
- __exit__(exc_type, exc_val, exc_tb)[source]
Context manager exit point. Ensures proper cleanup of the multiprocessing pool.
- Parameters:
exc_type – Exception type if an exception occurred, None otherwise.
exc_val – Exception value if an exception occurred, None otherwise.
exc_tb – Exception traceback if an exception occurred, None otherwise.
- Returns:
False (does not suppress exceptions).
- Return type:
Added in version 1.0.
Note
For multi-machine distributed evaluation, consider using established frameworks like Ray (https://docs.ray.io/) or Dask (https://docs.dask.org/). See the project’s MIGRATION.md for examples.
genes
Handles node and connection genes.
digraph inheritance97999d540d { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "genes.BaseGene" [URL="#genes.BaseGene",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Handles functions shared by multiple types of genes (both node and connection),"]; "genes.DefaultConnectionGene" [URL="#genes.DefaultConnectionGene",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "genes.BaseGene" -> "genes.DefaultConnectionGene" [arrowsize=0.5,style="setlinewidth(0.5)"]; "genes.DefaultNodeGene" [URL="#genes.DefaultNodeGene",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "genes.BaseGene" -> "genes.DefaultNodeGene" [arrowsize=0.5,style="setlinewidth(0.5)"]; "iznn.IZNodeGene" [URL="#iznn.IZNodeGene",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Contains attributes for the iznn node genes and determines genomic distances."]; "neat.genes.BaseGene" -> "iznn.IZNodeGene" [arrowsize=0.5,style="setlinewidth(0.5)"]; "neat.genes.BaseGene" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="Handles functions shared by multiple types of genes (both node and connection),"]; }
- class genes.BaseGene(key)[source]
Handles functions shared by multiple types of genes (both node and connection), including crossover and calling mutation methods.
- Parameters:
key (int or tuple(int, int)) – The gene identifier. Note: For connection genes, determining whether they are homologous (for genomic distance and crossover determination) uses the (ordered) identifiers of the connected nodes.
- __str__()[source]
Converts gene attributes into a printable format.
- Returns:
Stringified gene instance.
- Return type:
- classmethod parse_config(config, param_dict)[source]
Placeholder; parameters are entirely in gene attributes.
- classmethod get_config_params()[source]
Fetches configuration parameters from each gene class’
_gene_attributeslist (usingBaseAttribute.get_config_params). Used bygenome.DefaultGenomeConfigto include gene parameters in its configuration parameters.
- Returns:
List of configuration parameters (as
config.ConfigParameterinstances) for the gene attributes.- Return type:
list(instance)
- Raises:
DeprecationWarning – If the gene class uses
__gene_attributes__instead of_gene_attributes
- init_attributes(config)[source]
Initializes its gene attributes using the supplied configuration object and
FloatAttribute.init_value,BoolAttribute.init_value, orStringAttribute.init_valueas appropriate.
- Parameters:
config (instance) – Configuration object to be used by the appropriate
attributesclass.
- mutate(config)[source]
Mutates (possibly) its gene attributes using the supplied configuration object and
FloatAttribute.init_value,BoolAttribute.init_value, orStringAttribute.init_valueas appropriate.
- Parameters:
config (instance) – Configuration object to be used by the appropriate
attributesclass.
- copy()[source]
Makes a copy of itself, including its subclass, key, and all gene attributes.
- Returns:
A copied gene
- Return type:
- crossover(gene2)[source]
Creates a new gene via crossover - randomly inheriting attributes from its parents. The two genes must be homologous, having the same key/id.
- class genes.DefaultNodeGene(BaseGene)[source]
Groups
attributesspecific to node genes - such as bias - and calculates genetic distances between two homologous (not disjoint or excess) node genes.
- distance(other, config)[source]
Determines the degree of differences between node genes using their 4 attributes; the final result is multiplied by the configured compatibility_weight_coefficient.
- Parameters:
- Returns:
The contribution of this pair to the genomic distance between the source genomes.
- Return type:
- class genes.DefaultConnectionGene(BaseGene)[source]
Groups
attributesspecific to connection genes - such as weight - and calculates genetic distances between two homologous (not disjoint or excess) connection genes.
- distance(other, config)[source]
Determines the degree of differences between connection genes using their 2 attributes; the final result is multiplied by the configured compatibility_weight_coefficient.
- Parameters:
- Returns:
The contribution of this pair to the genomic distance between the source genomes.
- Return type:
Changed in version 0.92:
__gene_attributes__changed to_gene_attributes, since it is not a Python internal variable. Updates also made due to addition of default capabilities toattributes.
genome
Handles genomes (individuals in the population).
digraph inheritance43203ba1fd { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "genome.DefaultGenome" [URL="#genome.DefaultGenome",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="A genome for generalized neural networks."]; "genome.DefaultGenomeConfig" [URL="#genome.DefaultGenomeConfig",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Sets up and holds configuration information for the DefaultGenome class."]; "iznn.IZGenome" [URL="#iznn.IZGenome",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "neat.genome.DefaultGenome" -> "iznn.IZGenome" [arrowsize=0.5,style="setlinewidth(0.5)"]; "neat.genome.DefaultGenome" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="A genome for generalized neural networks."]; }
- class genome.DefaultGenomeConfig(params)[source]
Does the configuration for the DefaultGenome class. Has the
listallowed_connectivity, which defines the available values for initial_connection. Includes parameters taken from the configured gene classes, such asgenes.DefaultNodeGene,genes.DefaultConnectionGene, oriznn.IZNodeGene. Theactivations.ActivationFunctionSetinstance is available via itsactivation_defsattribute, and theaggregations.AggregationFunctionSetinstance is available via itsaggregation_defs- or, for compatibility,aggregation_function_defs- attributes. TODO: Check for unused configuration parameters from the config file.
- Parameters:
params (dict(str, str)) – Parameters from configuration file and DefaultGenome initialization (by parse_config).
- Raises:
RuntimeError – If
initial_connectionor structural_mutation_surer is invalid.Changed in version 0.92: Aggregation functions moved to
aggregations; additional configuration parameters added.
- add_activation(name, func)[source]
Adds a new activation function, as described in Customizing Behavior. Uses
ActivationFunctionSet.add.
- Parameters:
name (str) – The name by which the function is to be known in the configuration file.
func (
function) – A function meeting the requirements ofactivations.validate_activation().
- add_aggregation(name, func)[source]
Adds a new aggregation function. Uses
AggregationFunctionSet.add.
- Parameters:
name (str) – The name by which the function is to be known in the configuration file.
func (
function) – A function meeting the requirements ofaggregations.validate_aggregation().Added in version 0.92.
- save(f)[source]
Saves the initial_connection configuration and uses
config.write_pretty_params()to write out the other parameters.
- Parameters:
f (file) – The file object to be written to.
- Raises:
RuntimeError – If the value for a partial-connectivity configuration is not in [0.0,1.0].
- get_new_node_key(node_dict)[source]
Finds the next unused node key. TODO: Explore using the same node key if a particular connection is replaced in more than one genome in the same generation (use a
reporting.BaseReporter.end_generation()method to wipe a dictionary of connection tuples versus node keys).
- Parameters:
node_dict (dict(int, instance)) – A dictionary of node keys vs nodes
- Returns:
A currently-unused node key.
- Return type:
- Raises:
AssertionError – If a newly-created id is already in the node_dict.
Changed in version 0.92: Moved from DefaultGenome so no longer only single-genome-instance unique.
- check_structural_mutation_surer()[source]
Checks vs structural_mutation_surer and, if necessary,
single_structural_mutationto decide if changes from the former should happen.
- Returns:
If should have a structural mutation under a wider set of circumstances.
- Return type:
Added in version 0.92.
- class genome.DefaultGenome(key)[source]
A genome for generalized neural networks. For class requirements, see Genome Interface. Terminology: pin - Point at which the network is conceptually connected to the external world; pins are either input or output. node - Analog of a physical neuron. connection - Connection between a pin/node output and a node’s input, or between a node’s output and a pin/node input. key - Identifier for an object, unique within the set of similar objects. Design assumptions and conventions. 1. Each output pin is connected only to the output of its own unique neuron by an implicit connection with weight one. This connection is permanently enabled. 2. The output pin’s key is always the same as the key for its associated neuron. 3. Output neurons can be modified but not deleted. 4. The input values are applied to the input pins unmodified.
- Parameters:
key (int) – Identifier for this individual/genome.
- classmethod parse_config(param_dict)[source]
Required interface method. Provides default node and connection gene specifications (from
genes) and usesDefaultGenomeConfigto do the rest of the configuration.
- Parameters:
param_dict (dict(str, str)) – Dictionary of parameters from configuration file.
- Returns:
Configuration object; considered opaque by rest of code, so type may vary by implementation (here, a
DefaultGenomeConfiginstance).- Return type:
- classmethod write_config(f, config)[source]
Required interface method. Saves configuration using
DefaultGenomeConfig.save().
- Parameters:
f (file) – File object to write to.
config (instance) – Configuration object (here, a
DefaultGenomeConfiginstance).
- configure_new(config)[source]
Required interface method. Configures a new genome (itself) based on the given configuration object, including genes for connectivity (based on initial_connection) and starting nodes (as defined by num_hidden, num_inputs, and num_outputs in the configuration file.
- Parameters:
config (instance) – Genome configuration object.
- configure_crossover(genome1, genome2, config)[source]
Required interface method. Configures a new genome (itself) by crossover from two parent genomes. disjoint or excess genes are inherited from the fitter of the two parents, while homologous genes use the gene class’ crossover function (e.g.,
genes.BaseGene.crossover()).
- mutate(config)[source]
Required interface method. Mutates this genome. What mutations take place are determined by configuration file settings, such as node_add_prob and
node_delete_probfor the likelihood of adding or removing a node and conn_add_prob andconn_delete_probfor the likelihood of adding or removing a connection. Checks single_structural_mutation for whether more than one structural mutation should be permitted per call. Non-structural mutations (to gene attributes) are performed by calling the appropriatemutatemethod(s) for connection and node genes (generallygenes.BaseGene.mutate()).
- Parameters:
config (instance) – Genome configuration object.
Changed in version 0.92:
single_structural_mutationconfig parameter added.
- mutate_add_node(config)[source]
Takes a randomly-selected existing connection, turns its enabled attribute to
False, and makes two new (enabled) connections with a new node between them, which join the now-disabled connection’s nodes. The connection weights are chosen so as to potentially have roughly the same behavior as the original connection, although this will depend on the activation function, bias, and response multiplier of the new node. If there are no connections available, may callmutate_add_connection()instead, depending on the result fromcheck_structural_mutation_surer.
- Parameters:
config (instance) – Genome configuration object.
Changed in version 0.92: Potential addition of connection instead added.
- add_connection(config, input_key, output_key, weight, enabled)[source]
Adds a specified new connection; its key is the
tupleof(input_key, output_key). TODO: Add further validation of this connection addition?
- Parameters:
- mutate_add_connection(config)[source]
Attempts to add a randomly-selected new connection, with some filtering: 1. input nodes cannot be at the output end. 2. Existing connections cannot be duplicated. (If an existing connection is selected, it may be enabled depending on the result from
check_structural_mutation_surer.) 3. Two output nodes cannot be connected together. 4. If feed_forward is set toTruein the configuration file, connections cannot createcycles.
- Parameters:
config (instance) – Genome configuration object
Changed in version 0.92: Output nodes not allowed to be connected together. Possibility of enabling existing connection added.
- mutate_delete_node(config)[source]
Deletes a randomly-chosen (non-output/input) node along with its connections.
- Parameters:
config (instance) – Genome configuration object
- mutate_delete_connection()[source]
Deletes a randomly-chosen connection. TODO: If the connection is enabled, have an option to - possibly with a weight-dependent chance - turn its enabled attribute to
Falseinstead.
- distance(other, config)[source]
Required interface method. Returns the genomic distance between this genome and the other. This distance value is used to compute genome compatibility for
speciation. Uses (by default) thegenes.DefaultNodeGene.distance()andgenes.DefaultConnectionGene.distance()methods for homologous pairs, and the configured compatibility_disjoint_coefficient for disjoint/excess genes. (Note that this is one of the most time-consuming portions of the library; optimization - such as using cython - may be needed if using an unusually fast fitness function and/or an unusually large population.)
- size()[source]
Required interface method. Returns genome
complexity, taken to be (number of nodes, number of enabled connections); currently only used for reporters - some retrieve this information for the highest-fitness genome at the end of each generation.
- __str__()[source]
Gives a listing of the genome’s nodes and connections.
- Returns:
Node and connection information.
- Return type:
- static create_node(config, node_id)[source]
Creates a new node with the specified id (including for its gene), using the specified configuration object to retrieve the proper node gene type and how to initialize its attributes.
- static create_connection(config, input_id, output_id)[source]
Creates a new connection with the specified id pair as its key (including for its gene, as a
tuple), using the specified configuration object to retrieve the proper connection gene type and how to initialize its attributes.
Connect one randomly-chosen input to all output nodes (FS-NEAT without connections to hidden nodes, if any). Previously called
connect_fs_neat. Implements thefs_neat_nohiddensetting for initial_connection.
- Parameters:
config (instance) – The genome configuration object.
Changed in version 0.92: Connect_fs_neat, connect_full, connect_partial split up - documentation vs program conflict.
Connect one randomly-chosen input to all hidden nodes and output nodes (FS-NEAT with connections to hidden nodes, if any). Implements the
fs_neat_hiddensetting for initial_connection.
- Parameters:
config (instance) – The genome configuration object.
Changed in version 0.92: Connect_fs_neat, connect_full, connect_partial split up - documentation vs program conflict.
- compute_full_connections(config, direct)[source]
Compute connections for a fully-connected feed-forward genome–each input connected to all hidden nodes (and output nodes if
directis set or there are no hidden nodes), each hidden node connected to all output nodes. (Recurrent genomes will also include node self-connections.)
- Parameters:
config (instance) – The genome configuration object.
direct (bool) – Whether or not, if there are hidden nodes, to include links directly from input to output.
- Returns:
The list of connections, as (input key, output key) tuples
- Return type:
Changed in version 0.92: “Direct” added to help with documentation vs program conflict for
initial_connectionoffullorpartial.
- connect_full_nodirect(config)[source]
Create a fully-connected genome (except no direct input to output connections unless there are no hidden nodes).
- Parameters:
config (instance) – The genome configuration object.
Changed in version 0.92: Connect_fs_neat, connect_full, connect_partial split up - documentation vs program conflict.
- connect_full_direct(config)[source]
Create a fully-connected genome, including direct input-output connections even if there are hidden nodes.
- Parameters:
config (instance) – The genome configuration object.
Changed in version 0.92: Connect_fs_neat, connect_full, connect_partial split up - documentation vs program conflict.
- connect_partial_nodirect(config)[source]
Create a partially-connected genome, with (unless there are no hidden nodes) no direct input-output connections.
- Parameters:
config (instance) – The genome configuration object.
Changed in version 0.92: Connect_fs_neat, connect_full, connect_partial split up - documentation vs program conflict.
- connect_partial_direct(config)[source]
Create a partially-connected genome, possibly including direct input-output connections even if there are hidden nodes.
- Parameters:
config (instance) – The genome configuration object.
Changed in version 0.92: Connect_fs_neat, connect_full, connect_partial split up - documentation vs program conflict.
graphs
Directed graph algorithm implementations.
- graphs.creates_cycle(connections, test)[source]
Returns true if the addition of the
testconnection would create a cycle, assuming that no cycle already exists in the graph represented byconnections. Used to avoid recurrent networks when a purely feed-forward network is desired (e.g., as determined by thefeed_forwardsetting in the configuration file.
- graphs.required_for_output(inputs, outputs, connections)[source]
Collect the nodes whose state is required to compute the final network output(s).
- Parameters:
inputs (list(int)) – the input node identifiers; it is assumed that the input identifier set and the node identifier set are disjoint.
outputs (list(int)) – the output node identifiers; by convention, the output node ids are always the same as the output index.
connections (list(tuple(int, int))) – list of (input, output) connections in the network; should only include enabled ones.
- Returns:
A set of node identifiers.
- Return type:
- graphs.feed_forward_layers(inputs, outputs, connections)[source]
Collect the layers whose members can be evaluated in parallel in a feed-forward network.
- Parameters:
inputs (list(int)) – the network input node identifiers.
outputs (list(int)) – the output node identifiers.
connections (list(tuple(int, int))) – list of (input, output) connections in the network; should only include enabled ones.
- Returns:
A list of layers, with each layer consisting of a set of identifiers; only includes nodes returned by
required_for_output.- Return type:
iznn
This module implements a spiking neural network. Neurons are based on the model described by:
Izhikevich, E. M.
Simple Model of Spiking Neurons
IEEE TRANSACTIONS ON NEURAL NETWORKS, VOL. 14, NO. 6, NOVEMBER 2003
See http://www.izhikevich.org/publications/spikes.pdf.
digraph inheritance88c83b859f { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "iznn.IZGenome" [URL="#iznn.IZGenome",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "neat.genome.DefaultGenome" -> "iznn.IZGenome" [arrowsize=0.5,style="setlinewidth(0.5)"]; "iznn.IZNN" [URL="#iznn.IZNN",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Basic iznn network object."]; "iznn.IZNeuron" [URL="#iznn.IZNeuron",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Sets up and simulates the iznn nodes (neurons)."]; "iznn.IZNodeGene" [URL="#iznn.IZNodeGene",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Contains attributes for the iznn node genes and determines genomic distances."]; "neat.genes.BaseGene" -> "iznn.IZNodeGene" [arrowsize=0.5,style="setlinewidth(0.5)"]; "neat.genes.BaseGene" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="Handles functions shared by multiple types of genes (both node and connection),"]; "neat.genome.DefaultGenome" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="A genome for generalized neural networks."]; }
- iznn.REGULAR_SPIKING_PARAMS
- iznn.INTRINSICALLY_BURSTING_PARAMS
- iznn.CHATTERING_PARAMS
- iznn.FAST_SPIKING_PARAMS
- iznn.THALAMO_CORTICAL_PARAMS
- iznn.RESONATOR_PARAMS
- iznn.LOW_THRESHOLD_SPIKING_PARAMS
Parameter sets (for
a,b,c, andd, described below) producing known types of spiking behaviors.
- class iznn.IZNodeGene(BaseGene)[source]
Contains attributes for the iznn node genes and determines genomic distances. TODO: Genomic distance currently does not take into account the node’s bias.
- distance(other, config)[source]
Determines the genomic distance between this node gene and the other node gene.
- Parameters:
other (instance) – The other IZNodeGene instance.
config (instance) – Configuration object, in this case a
genome.DefaultGenomeConfiginstance.
- class iznn.IZGenome(DefaultGenome)[source]
Contains the parse_config class method for iznn genome configuration, which returns a
genome.DefaultGenomeConfiginstance.
- class iznn.IZNeuron(bias, a, b, c, d, inputs)[source]
Sets up and simulates the iznn nodes (neurons).
- Parameters:
bias (float) – The bias of the neuron.
a (float) – The time scale of the recovery variable.
b (float) – The sensitivity of the recovery variable.
c (float) – The after-spike reset value of the membrane potential.
d (float) – The after-spike reset of the recovery variable.
inputs (list(tuple(int, float))) – A list of (input key, weight) pairs for incoming connections.
- Raises:
RuntimeError – If the number of inputs does not match the number of input nodes.
- class iznn.IZNN(neurons, inputs, outputs)[source]
Sets up the network itself and simulates it using the connections and neurons.
- Parameters:
inputs (list(int)) – The input node keys.
outputs (list(int)) – The output node keys.
- set_inputs(inputs)[source]
Assigns input voltages.
- Parameters:
inputs (list(float)) – The input voltages for the input nodes.
- get_time_step_msec()[source]
Returns a suggested time step; currently hardwired to 0.05. TODO: Investigate this (particularly effects on numerical stability issues).
- Returns:
Suggested time step in milliseconds.
- Return type:
- advance(dt_msec)[source]
Advances simulation time for all neurons in the network by the input number of milliseconds.
- Parameters:
dt_msec (float) – How many milliseconds to advance the network.
- Returns:
The values for the output nodes.
- Return type:
list(float)
- static create(genome, config)[source]
Receives a genome and returns its phenotype (a neural network).
- Parameters:
genome (instance) – An IZGenome instance.
config (instance) – Configuration object, in this implementation a
config.Configinstance.- Returns:
An IZNN instance.
- Return type:
Changed in version 0.92:
__gene_attributes__changed to_gene_attributes, since it is not a Python internal variable.
innovation
Tracks innovation numbers for structural mutations in NEAT, as described in Stanley & Miikkulainen (2002).
- class innovation.InnovationTracker(start_number=0)[source]
Tracks innovation numbers for structural mutations in NEAT. This class maintains a global counter that increments across all generations and a generation-specific dictionary for deduplication of identical mutations within the same generation.
Innovation numbers are assigned when:
A new connection is added between two nodes
A connection is split by adding a node (creates two new connections)
Initial connections are created in the starting population
The tracker ensures that if multiple genomes independently make the same structural mutation in one generation, they receive the same innovation number. This enables proper gene alignment during crossover.
- Parameters:
start_number (int) – The initial value for the global counter (default: 0). The first innovation will be start_number + 1.
Added in version 1.0.
- get_innovation_number(input_node, output_node, mutation_type='add_connection')[source]
Get or assign an innovation number for a structural mutation. If this exact mutation (same nodes and type) has already occurred in the current generation, returns the existing innovation number. Otherwise, increments the global counter and assigns a new innovation number.
- Parameters:
input_node (int) – The input node ID for the connection
output_node (int) – The output node ID for the connection
mutation_type (str) – Type of mutation:
'add_connection'(new connection),'add_node_in'(connection from original input to new node),'add_node_out'(connection from new node to original output), or'initial_connection'(connection in initial population)- Returns:
The innovation number for this structural mutation
- Return type:
- reset_generation()[source]
Clear generation-specific tracking at the start of a new generation. This method should be called at the beginning of each generation’s reproduction phase. It clears the generation_innovations dictionary but preserves the global_counter so innovation numbers never repeat.
math_util
Contains some mathematical/statistical functions not found in the Python2 standard library, plus a mechanism for looking up some commonly used functions (such as for the species_fitness_func) by name.
- math_util.stat_functions
Lookup table for commonly used
{value} -> valuefunctions, namelymax,min,mean,median, andmedian2. The species_fitness_func (used forstagnation.DefaultStagnation) is required to be one of these.Changed in version 0.92:
median2added.
- math_util.median(values)[source]
Returns the median for odd numbers of values; returns the higher of the middle two values for even numbers of values.
- math_util.median2(values)[source]
Returns the median for odd numbers of values; returns the mean of the middle two values for even numbers of values.
- Parameters:
values (list(float) or set(float) or tuple(float)) – Numbers to take the median of.
- Returns:
The median.
- Return type:
Added in version 0.92.
- math_util.softmax(values)[source]
Compute the softmax (a differentiable/smooth approximization of the maximum function) of the given value set. (See the Wikipedia entry for more on softmax. Envisioned as useful for postprocessing of network output.)
- Parameters:
values (list(float) or set(float) or tuple(float)) – Numbers to get the softmax of.
- Returns:
\(\begin{equation}v_i = \exp(v_i) / s \text{, where } s = \sum(\exp(v_0), \exp(v_1), \dotsc)\end{equation}\)
- Return type:
list(float)
Changed in version 0.92: Previously not functional on Python 3.X due to changes to map.
nn.feed_forward
- class nn.feed_forward.FeedForwardNetwork(inputs, outputs, node_evals)[source]
A straightforward (no pun intended) feed-forward neural network NEAT implementation.
- Parameters:
- activate(inputs)[source]
Feeds the inputs into the network and returns the resulting outputs.
- Parameters:
inputs (list(float)) – The values for the input nodes.
- Returns:
The values for the output nodes.
- Return type:
- Raises:
RuntimeError – If the number of inputs is not the same as the number of input nodes.
nn.recurrent
- class nn.recurrent.RecurrentNetwork(inputs, outputs, node_evals)[source]
A recurrent (but otherwise straightforward) neural network NEAT implementation.
- Parameters:
- reset()[source]
Resets all node activations to 0 (necessary due to otherwise retaining state via recurrent connections).
- activate(inputs)[source]
Feeds the inputs into the network and returns the resulting outputs.
- Parameters:
inputs (list(float)) – The values for the input nodes.
- Returns:
The values for the output nodes.
- Return type:
- Raises:
RuntimeError – If the number of inputs is not the same as the number of input nodes.
population
Implements the core evolution algorithm.
- exception population.CompleteExtinctionException[source]
Raised on complete extinction (all species removed due to stagnation) unless reset_on_extinction is set.
- class population.Population(config, initial_state=None)[source]
This class implements the core evolution algorithm: 1. Evaluate fitness of all genomes. 2. Check to see if the termination criterion is satisfied; exit if it is. 3. Generate the next generation from the current population. 4. Partition the new generation into species based on genetic similarity. 5. Go to 1.
- Parameters:
initial_state (None or tuple(instance, instance, int)) – If supplied (such as by a method of the
Checkpointerclass), a tuple of (Population,Species, generation number)- Raises:
RuntimeError – If the fitness_criterion function is invalid.
- run(fitness_function, n=None)[source]
Runs NEAT’s genetic algorithm for at most n generations. If n is
None, run until a solution is found or total extinction occurs.The user-provided fitness_function must take only two arguments: 1. The population as a list of (genome id, genome) tuples. 2. The current configuration object.
The return value of the fitness function is ignored, but it must assign a Python float to the
fitnessmember of each genome.The fitness function is free to maintain external state, perform evaluations in
parallel, etc.It is assumed that the fitness function does not modify the list of genomes, the genomes themselves (apart from updating the fitness member), or the configuration object.
- Parameters:
- Returns:
The best genome seen.
- Return type:
- Raises:
RuntimeError – If
Nonefor n but no_fitness_termination isTrue.CompleteExtinctionException – If all species go extinct due to
stagnationbut reset_on_extinction isFalse.Changed in version 0.92: no_fitness_termination capability added.
reporting
Makes possible reporter classes, which are triggered on particular events and may provide information to the user, may do something else such as checkpointing, or may do both.
digraph inheritancef978902bcc { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "checkpoint.Checkpointer" [URL="#checkpoint.Checkpointer",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="A reporter class that performs checkpointing using `pickle`"]; "neat.reporting.BaseReporter" -> "checkpoint.Checkpointer" [arrowsize=0.5,style="setlinewidth(0.5)"]; "neat.reporting.BaseReporter" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="Definition of the reporter interface expected by ReporterSet."]; "reporting.BaseReporter" [URL="#reporting.BaseReporter",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Definition of the reporter interface expected by ReporterSet."]; "reporting.ReporterSet" [URL="#reporting.ReporterSet",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Keeps track of the set of reporters"]; "reporting.StdOutReporter" [URL="#reporting.StdOutReporter",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Uses `print` to output information about the run; an example reporter class."]; "reporting.BaseReporter" -> "reporting.StdOutReporter" [arrowsize=0.5,style="setlinewidth(0.5)"]; "statistics.StatisticsReporter" [URL="#statistics.StatisticsReporter",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Gathers (via the reporting interface) and provides (to callers and/or a file)"]; "neat.reporting.BaseReporter" -> "statistics.StatisticsReporter" [arrowsize=0.5,style="setlinewidth(0.5)"]; }
- class reporting.ReporterSet[source]
Keeps track of the set of reporters and gives methods to dispatch them at appropriate points.
- add(reporter)[source]
Adds a reporter to those to be called via
ReporterSetmethods.
- Parameters:
reporter (instance) – A reporter instance.
- remove(reporter)[source]
Removes a reporter from those to be called via
ReporterSetmethods.
- Parameters:
reporter (instance) – A reporter instance.
- start_generation(gen)[source]
Calls
start_generationon each reporter in the set.
- Parameters:
gen (int) – The generation number.
- end_generation(config, population, species)[source]
Calls
end_generationon each reporter in the set.
- post_evaluate(config, population, species)[source]
Calls
post_evaluateon each reporter in the set.
- Parameters:
population (dict(int, instance)) – Current population, as a dict of unique genome ID/key vs genome.
species (instance) – Current species set object, such as a
DefaultSpeciesSetinstance.best_genome (instance) – The currently highest-fitness genome. (Ties are resolved pseudorandomly, by
dictionaryordering.)
- post_reproduction(config, population, species)[source]
Not currently called. Would call
post_reproductionon each reporter in the set.
- complete_extinction()[source]
Calls
complete_extinctionon each reporter in the set.
- found_solution(config, generation, best)[source]
Calls
found_solutionon each reporter in the set.
- species_stagnant(sid, species)[source]
Calls
species_stagnanton each reporter in the set.
- class reporting.BaseReporter[source]
Abstract class defining the reporter interface expected by ReporterSet. Inheriting from it will provide a set of
dummymethods to be overridden as desired, as follows:
- start_generation(generation)[source]
Called via
ReporterSet(bypopulation.Population.run()) at the start of each generation, prior to the invocation of the fitness function.
- Parameters:
generation (int) – The generation number.
- end_generation(config, population, species)[source]
Called via
ReporterSet(bypopulation.Population.run()) at the end of each generation, after reproduction and speciation.
- post_evaluate(config, population, species, best_genome)[source]
Called via
ReporterSet(bypopulation.Population.run()) after the fitness function is finished.
- Parameters:
population (dict(int, instance)) – Current population, as a dict of unique genome ID/key vs genome.
species (instance) – Current species set object, such as a
DefaultSpeciesSetinstance.best_genome (instance) – The currently highest-fitness genome. (Ties are resolved pseudorandomly, by
dictionaryordering.)
- post_reproduction(config, population, species)[source]
Not currently called (indirectly or directly), including by either
population.Population.run()orreproduction.DefaultReproduction. Note: New members of the population likely will not have a set species.
- complete_extinction()[source]
Called via
ReporterSet(bypopulation.Population.run()) if complete extinction (due to stagnation) occurs, prior to (depending on the reset_on_extinction configuration setting) a new population being created or apopulation.CompleteExtinctionExceptionbeing raised.
- found_solution(config, generation, best)[source]
Called via
ReporterSet(bypopulation.Population.run()) prior to exiting if the configured fitness threshold is met, unless no_fitness_termination is set; if it is set, then called upon reaching the generation maximum - set when callingpopulation.Population.run()- and exiting for this reason.)
- Parameters:
generation (int) – Generation number.
best (instance) – The currently highest-fitness genome. (Ties are resolved pseudorandomly by
dictionaryordering.)Changed in version 0.92: no_fitness_termination capability added.
- species_stagnant(sid, species)[source]
Called via
ReporterSet(byreproduction.DefaultReproduction.reproduce()) for each species considered stagnant by the stagnation class (such asstagnation.DefaultStagnation).
- info(msg)[source]
Miscellaneous informational messages, from multiple parts of the library, called via
ReporterSet.
- Parameters:
msg (str) – Message to be handled.
reproduction
Handles creation of genomes, either from scratch or by sexual or asexual reproduction from parents. For class requirements, see Reproduction Interface. Implements the default NEAT-python reproduction scheme: explicit fitness sharing with fixed-time species stagnation.
- class reproduction.DefaultReproduction(config, reporters, stagnation)[source]
Implements the default NEAT-python reproduction scheme: explicit fitness sharing with fixed-time species stagnation. Inherits from
config.DefaultClassConfigthe required class methodwrite_config. TODO: Provide some sort of optional cross-species performance criteria, which are then used to control stagnation and possibly the mutation rate configuration. This scheme should be adaptive so that species do not evolve to become “cautious” and only make very slow progress.
- Parameters:
config (instance) – Configuration object, in this implementation a
config.DefaultClassConfiginstance.reporters (instance) – A
ReporterSetinstance.stagnation (instance) – A
DefaultStagnationinstance - the current code partially depends on internals of this class (a TODO is noted to correct this).Changed in version 0.92: Configuration changed to use DefaultClassConfig, instead of a dictionary, and inherit write_config.
- classmethod parse_config(param_dict)[source]
Required interface method. Provides defaults for elitism, survival_threshold, and min_species_size parameters and updates them from the configuration file, in this implementation using
config.DefaultClassConfig.
- Parameters:
param_dict (dict(str, str)) – Dictionary of parameters from configuration file.
- Returns:
Reproduction configuration object; considered opaque by rest of code, so current type returned is not required for interface.
- Return type:
DefaultClassConfig instance
Changed in version 0.92: Configuration changed to use DefaultClassConfig instead of a dictionary.
- create_new(genome_type, genome_config, num_genomes)[source]
Required interface method. Creates
num_genomesnew genomes of the given type using the given configuration. Also initializes ancestry information (as an empty tuple).
- Parameters:
genome_type (
class) – Genome class (such asDefaultGenomeoriznn.IZGenome) of which to create instances.genome_config (instance) – Opaque genome configuration object.
num_genomes (int) – How many new genomes to create.
- Returns:
A dictionary (with the unique genome identifier as the key) of the genomes created.
- Return type:
dict(int, instance)
- static compute_spawn(adjusted_fitness, previous_sizes, pop_size, min_species_size)[source]
Apportions desired number of members per species according to fitness (adjusted by
reproduce()to a 0-1 scale) from out of the desired population size.
- Parameters:
adjusted_fitness (list(float)) – Mean fitness for species members, adjusted to 0-1 scale (see below).
previous_sizes (list(int)) – Number of members of species in population prior to reproduction.
pop_size (int) – Desired population size, as input to
reproduce()and set in the configuration file.min_species_size (int) – Minimum number of members per species, set via the min_species_size configuration parameter (or the elitism configuration parameter, if higher); can result in population size being above
pop_size.
- reproduce(config, species, pop_size, generation)[source]
Required interface method. Creates the population to be used in the next generation from the given configuration instance, SpeciesSet instance, desired size of the population, and current generation number. This method is called after all genomes have been evaluated and their
fitnessmember assigned. This method should use the stagnation instance given to the initializer to remove species deemed to have stagnated. Note: Determines relative fitnesses by transforming into (ideally) a 0-1 scale; however, if the top and bottom fitnesses are not at least 1 apart, the range may be less than 0-1, as a check against dividing by a too-small number. TODO: Make minimum difference configurable (defaulting to 1 to preserve compatibility).
- Parameters:
species (instance) – A
DefaultSpeciesSetinstance. As well as depending on some of theDefaultStagnationinternals, this method also depends on some of those of theDefaultSpeciesSetand its referenced species objects.pop_size (int) – Population size desired, such as set in the configuration file.
generation (int) – Generation count.
- Returns:
New population, as a dict of unique genome ID/key vs genome.
- Return type:
dict(int, instance)
Changed in version 0.92: Previously, the minimum and maximum relative fitnesses were determined (contrary to the comments in the code) including members of species being removed due to stagnation; it is now determined using only the non-stagnant species. The minimum size of species was (and is) the greater of the min_species_size and elitism configuration parameters; previously, this was not taken into account for
compute_spawn(); this made it more likely to have a population size above the configured population size.
species
Divides the population into species based on genomic distances.
- class reproduction.Species(key, generation)
Represents a species and contains data about it such as members, fitness, and time stagnating. Note:
stagnation.DefaultStagnationmanipulates many of these.
- Parameters:
key (int) – Identifier/key
generation (int) – Initial generation of appearance
- update(representative, members)
Required interface method. Updates a species instance with the current members and most-representative member (from which genomic distances are measured).
- Parameters:
representative (instance) – A genome instance.
members (dict(int, instance)) – A
dictionaryof genome id vs genome instance.
- get_fitnesses()
Required interface method (used by
stagnation.DefaultStagnation, for instance). Retrieves the fitnesses of each member genome.
- Returns:
List of fitnesses of member genomes.
- Return type:
list(float)
- class reproduction.GenomeDistanceCache(config)
Caches (indexing by genome key/id) genomic distance information to avoid repeated lookups. (The
distance function, memoized by this class, is among the most time-consuming parts of the library, although many fitness functions are likely to far outweigh this for moderate-size populations.)
- Parameters:
config (instance) – A genome configuration instance; later used by the genome distance function.
- __call__(genome0, genome1)
GenomeDistanceCache is called as a method with a pair of genomes to retrieve the distance.
- Parameters:
- Returns:
The genomic distance.
- Return type:
- class reproduction.DefaultSpeciesSet(config, reporters)
Encapsulates the default speciation scheme by configuring it and performing the speciation function (placing genomes into species by genetic similarity).
reproduction.DefaultReproductioncurrently depends on this having aspeciesattribute consisting of a dictionary of species keys to species. Inherits fromconfig.DefaultClassConfigthe required class methodwrite_config.
- Parameters:
config (instance) – A configuration object, in this implementation a
config.Configinstance.reporters (instance) – A
ReporterSetinstance giving reporters to be notified about genomic distance statistics.Changed in version 0.92: Configuration changed to use DefaultClassConfig, instead of a dictionary, and inherit write_config.
- classmethod parse_config(param_dict)
Required interface method. Currently, the only configuration parameter is the compatibility_threshold; this method provides a default for it and updates it from the configuration file, in this implementation using
config.DefaultClassConfig.
- Parameters:
param_dict (dict(str, str)) – Dictionary of parameters from configuration file.
- Returns:
SpeciesSet configuration object; considered opaque by rest of code, so current type returned is not required for interface.
- Return type:
DefaultClassConfig instance
Changed in version 0.92: Configuration changed to use DefaultClassConfig instead of a dictionary.
- speciate(config, population, generation)
Required interface method. Place genomes into species by genetic similarity (genomic distance). TODO: The current code has a
docstringstating that there may be a problem if all old species representatives are not dropped for each generation; it is not clear how this is consistent with the code inreproduction.DefaultReproduction.reproduce(), such as for elitism. TODO: Check if sorting the unspeciated genomes by fitness will improve speciation (by making the highest-fitness member of a species its representative).
- Parameters:
population (dict(int, instance)) – Population as per the output of
DefaultReproduction.reproduce.generation (int) – Current generation number.
- get_species_id(individual_id)
Required interface method (used by
reporting.StdOutReporter). Retrieves species id/key for a given genome id/key.
stagnation
Keeps track of whether species are making progress and helps remove ones that are not.
Note
TODO: Currently, depending on the settings for species_fitness_func and fitness_criterion, it is possible for a species with members above the fitness_threshold level of fitness to be considered “stagnant” (including, most problematically, because they are at the limit of fitness improvement).
- class stagnation.DefaultStagnation(config, reporters)[source]
Keeps track of whether species are making progress and helps remove ones that, for a configurable number of generations, are not. Inherits from
config.DefaultClassConfigthe required class methodwrite_config.
- Parameters:
config (instance) – Configuration object; in this implementation, a
config.DefaultClassConfiginstance, but should be treated as opaque outside this class.reporters (instance) – A
ReporterSetinstance with reporters that may need activating; not currently used.Changed in version 0.92: Configuration changed to use DefaultClassConfig, instead of a dictionary, and inherit write_config.
- classmethod parse_config(param_dict)[source]
Required interface method. Provides defaults for species_fitness_func, max_stagnation, and species_elitism parameters and updates them from the configuration file, in this implementation using
config.DefaultClassConfig.
- Parameters:
param_dict (dict(str, str)) – Dictionary of parameters from configuration file.
- Returns:
Stagnation configuration object; considered opaque by rest of code, so current type returned is not required for interface.
- Return type:
DefaultClassConfig instance
Changed in version 0.92: Configuration changed to use DefaultClassConfig instead of a dictionary.
- update(species_set, generation)[source]
Required interface method. Updates species fitness history information, checking for ones that have not improved in max_stagnation generations, and - unless it would result in the number of species dropping below the configured species_elitism if they were removed, in which case the highest-fitness species are spared - returns a list with stagnant species marked for removal. TODO: Currently interacts directly with the internals of the
species.Speciesobject. Also, currently both checks for num_non_stagnant to stop marking stagnant and does not allow the topspecies_elitismspecies to be marked stagnant. While the latter could admittedly help with the problem mentioned above, the ordering of species fitness is using the fitness gotten from thespecies_fitness_func(and thus may miss high-fitness members of overall low-fitness species, depending on the function in use).
- Parameters:
- Returns:
A list of tuples of (species id/key,
Speciesinstance, is_stagnant).- Return type:
list(tuple(int, instance, bool))
Changed in version 0.92: Species sorted (by the species fitness according to the
species_fitness_func) to avoid marking best-performing as stagnant even withspecies_elitism.
statistics
Note
There are two design decisions to be aware of:
The most-fit genomes are based on the highest-fitness member of each generation; other genomes are not saved by this module (if they were, it would far worsen existing potential memory problems - see below), and it is assumed that fitnesses (as given by the fitness function) are not relative to others in the generation (also assumed by the use of the fitness threshold as a signal for exiting). Code violating this assumption (e.g., with competitive coevolution) will need to use different statistical gathering methods.
Generally reports or records a per-generation list of values; the numeric position in the list may not correspond to the generation number if there has been a restart, such as via the
checkpointmodule.There is also a TODO item: Currently keeps accumulating information in memory, which may be a problem in long runs.
- class statistics.StatisticsReporter(BaseReporter)[source]
Gathers (via the reporting interface) and provides (to callers and/or to a file) the most-fit genomes and information on genome and species fitness and species sizes.
- post_evaluate(config, population, species, best_genome)[source]
Called as part of the
reporting.BaseReporterinterface after the evaluation at the start of each generation; seeBaseReporter.post_evaluate. Information gathered includes a copy of the best genome in each generation and the fitnesses of each member of each species.
- get_fitness_stat(f)[source]
Calls the given function on the genome fitness data from each recorded generation and returns the resulting list.
- get_fitness_mean()[source]
Gets the per-generation mean fitness. A wrapper for
get_fitness_stat()with the function beingmean.
- Returns:
List of mean genome fitnesses for each generation.
- Return type:
list(float)
- get_fitness_median()[source]
Gets the per-generation median fitness. A wrapper for
get_fitness_stat()with the function beingmedian2. Not currently used internally.Added in version 0.92.
- get_fitness_stdev()[source]
Gets the per-generation standard deviation of the fitness. A wrapper for
get_fitness_stat()with the function beingstdev.
- Returns:
List of standard deviations of genome fitnesses for each generation.
- Return type:
list(float)
- best_unique_genomes(n)[source]
Returns the
nmost-fit genomes, with no duplication (from the most-fit genome passing unaltered to the next generation), sorted in decreasing fitness order.
- best_genomes(n)[source]
Returns the
nmost-fit genomes, possibly with duplicates, sorted in decreasing fitness order.
- best_genome()[source]
Returns the most-fit genome ever seen. A wrapper around
best_genomes().
- Returns:
The most-fit genome.
- Return type:
- get_species_sizes()[source]
Returns a by-generation list of lists of species sizes. Note that some values may be 0, if a species has either not yet been seen or has been removed due to
stagnation; species without generational overlap may be more similar in genomic distance than the configured compatibility_threshold would otherwise allow.
- get_species_fitness(null_value='')[source]
Returns a by-generation list of lists of species fitnesses; the fitness of a species is determined by the
meanfitness of the genomes in the species, as with the reproduction distribution byreproduction.DefaultReproduction. Thenull_valueparameter is used for species not present in a particular generation (seeabove).
- save_genome_fitness(delimiter=' ', filename='fitness_history.csv', with_cross_validation=False)[source]
Saves the population’s best and mean fitness (using the
csvpackage). At some point in the future, cross-validation fitness may be usable (via, for instance, the fitness function using alternative test situations/opponents and recording this in across_fitnessattribute; this can be used for, e.g., preventing overfitting); currently,with_cross_validationshould always be left at itsFalsedefault.
- Parameters:
delimiter (str) – Delimiter between columns in the file; note that the default is not ‘,’ as may be otherwise implied by the
csvfile extension (which refers to the package used).filename (str) – The filename to open (for writing, not appending) and write to.
with_cross_validation (bool) – For future use; currently, leave at its
Falsedefault.
- save_species_count(delimiter=' ', filename='speciation.csv')[source]
Logs speciation throughout evolution, by tracking the number of genomes in each species. Uses
get_species_sizes(); see that method for more information.
- save_species_fitness(delimiter=' ', null_value='NA', filename='species_fitness.csv')[source]
Logs species’ mean fitness throughout evolution. Uses
get_species_fitness(); see that method for more information on, for instance,null_value.
- Parameters:
delimiter (str) – Delimiter between columns in the file; note that the default is not ‘,’ as may be otherwise implied by the
csvfile extension (which refers to thecsvpackage used).null_value (str) – See
get_species_fitness().filename (str) – The filename to open (for writing, not appending) and write to.
- save()[source]
A wrapper for
save_genome_fitness(),save_species_count(), andsave_species_fitness(); uses the default values for all three.