Documentation
¶
Overview ¶
Package neat implements the NeuroEvolution of Augmenting Topologies (NEAT) method, which can be used to evolve specific Artificial Neural Networks from scratch using genetic algorithms.
Index ¶
Constants ¶
const NumTraitParams = 8
NumTraitParams The number of parameters used in neurons that learn through habituation, sensitization or Hebbian-type processes
Variables ¶
var ( // LogLevel The current log level of the context LogLevel LoggerLevel // DebugLog The logger to output all messages DebugLog = func(message string) { if LogLevel <= LogLevelDebug { _ = loggerDebug.Output(2, message) } } // InfoLog The logger to output messages with Info and up level InfoLog = func(message string) { if LogLevel <= LogLevelInfo { _ = loggerInfo.Output(2, message) } } // WarnLog The logger to output messages with Warn and up level WarnLog = func(message string) { if LogLevel <= LogLevelWarning { _ = loggerWarn.Output(2, message) } } // ErrorLog The logger to output messages with Error and up level ErrorLog = func(message string) { if LogLevel <= LogLevelError { _ = loggerError.Output(2, message) } } )
var ErrNEATOptionsNotFound = errors.New("NEAT options not found in the context")
var (
ErrTraitsParametersCountMismatch = errors.New("traits parameters number mismatch")
)
Functions ¶
Types ¶
type EpochExecutorType ¶
type EpochExecutorType string
EpochExecutorType is to define the type of epoch evaluator
const ( EpochExecutorTypeSequential EpochExecutorType = "sequential" EpochExecutorTypeParallel EpochExecutorType = "parallel" )
func (EpochExecutorType) Validate ¶
func (e EpochExecutorType) Validate() error
Validate is to check is this executor type is supported by algorithm
type GenomeCompatibilityMethod ¶
type GenomeCompatibilityMethod string
GenomeCompatibilityMethod defines the method to calculate genomes compatibility
const ( GenomeCompatibilityMethodLinear GenomeCompatibilityMethod = "linear" GenomeCompatibilityMethodFast GenomeCompatibilityMethod = "fast" )
func (GenomeCompatibilityMethod) Validate ¶
func (g GenomeCompatibilityMethod) Validate() error
Validate is to check if this genome compatibility method supported by algorithm
type LoggerLevel ¶
type LoggerLevel string
LoggerLevel type to specify logger output level
const ( // LogLevelDebug The Debug log level LogLevelDebug LoggerLevel = "debug" // LogLevelInfo The Info log level LogLevelInfo LoggerLevel = "info" // LogLevelWarning The Warning log level LogLevelWarning LoggerLevel = "warn" // LogLevelError The Error log level LogLevelError LoggerLevel = "error" )
type Options ¶
type Options struct {
// Probability of mutating a single trait param
TraitParamMutProb float64 `yaml:"trait_param_mut_prob"`
// Power of mutation on a single trait param
TraitMutationPower float64 `yaml:"trait_mutation_power"`
// The power of a link weight mutation
WeightMutPower float64 `yaml:"weight_mut_power"`
// These 3 global coefficients are used to determine the formula for
// computing the compatibility between 2 genomes. The formula is:
// disjoint_coeff * pdg + excess_coeff * peg + mutdiff_coeff * mdmg.
// See the compatibility method in the Genome class for more info
// They can be thought of as the importance of disjoint Genes,
// excess Genes, and parametric difference between Genes of the
// same function, respectively.
DisjointCoeff float64 `yaml:"disjoint_coeff"`
ExcessCoeff float64 `yaml:"excess_coeff"`
MutdiffCoeff float64 `yaml:"mutdiff_coeff"`
// This global tells compatibility threshold under which
// two Genomes are considered the same species
CompatThreshold float64 `yaml:"compat_threshold"`
// How much does age matter? Gives a fitness boost up to some young age (niching).
// If it is 1, then young species get no fitness boost.
AgeSignificance float64 `yaml:"age_significance"`
// Percent of average fitness for survival, how many get to reproduce based on survival_thresh * pop_size
SurvivalThresh float64 `yaml:"survival_thresh"`
// Probabilities of a non-mating reproduction
MutateOnlyProb float64 `yaml:"mutate_only_prob"`
MutateRandomTraitProb float64 `yaml:"mutate_random_trait_prob"`
MutateLinkTraitProb float64 `yaml:"mutate_link_trait_prob"`
MutateNodeTraitProb float64 `yaml:"mutate_node_trait_prob"`
MutateLinkWeightsProb float64 `yaml:"mutate_link_weights_prob"`
MutateToggleEnableProb float64 `yaml:"mutate_toggle_enable_prob"`
MutateGeneReenableProb float64 `yaml:"mutate_gene_reenable_prob"`
MutateAddNodeProb float64 `yaml:"mutate_add_node_prob"`
MutateAddLinkProb float64 `yaml:"mutate_add_link_prob"`
// probability of mutation involving disconnected inputs connection
MutateConnectSensors float64 `yaml:"mutate_connect_sensors"`
// Probabilities of a mate being outside species
InterspeciesMateRate float64 `yaml:"interspecies_mate_rate"`
MateMultipointProb float64 `yaml:"mate_multipoint_prob"`
MateMultipointAvgProb float64 `yaml:"mate_multipoint_avg_prob"`
MateSinglepointProb float64 `yaml:"mate_singlepoint_prob"`
// Prob. of mating without mutation
MateOnlyProb float64 `yaml:"mate_only_prob"`
// Probability of forcing selection of ONLY links that are naturally recurrent
RecurOnlyProb float64 `yaml:"recur_only_prob"`
// Size of population
PopSize int `yaml:"pop_size"`
// Age when Species starts to be penalized
DropOffAge int `yaml:"dropoff_age"`
// Number of tries mutate_add_link will attempt to find an open link
NewLinkTries int `yaml:"newlink_tries"`
// Tells to print population to file every n generations
PrintEvery int `yaml:"print_every"`
// The number of babies to stolen off to the champions
BabiesStolen int `yaml:"babies_stolen"`
// The number of runs to average over in an experiment
NumRuns int `yaml:"num_runs"`
// The number of epochs (generations) to execute training
NumGenerations int `yaml:"num_generations"`
// The epoch's executor type to apply (sequential, parallel)
EpochExecutorType EpochExecutorType `yaml:"epoch_executor"`
// The genome compatibility testing method to use (linear, fast (make sense for large genomes))
GenCompatMethod GenomeCompatibilityMethod `yaml:"genome_compat_method"`
// The neuron nodes activation functions list to choose from
NodeActivators []math.NodeActivationType `yaml:"-"`
// The probabilities of selection of the specific node activator function
NodeActivatorsProb []float64 `yaml:"-"`
// NodeActivatorsWithProbs the list of supported node activation with probability of each one
NodeActivatorsWithProbs []string `yaml:"node_activators"`
// LogLevel the log output details level
LogLevel string `yaml:"log_level"`
}
Options The NEAT algorithm options.
func FromContext ¶
FromContext returns the NEAT Options value stored in ctx, if any.
func LoadNeatOptions ¶
LoadNeatOptions Loads NEAT options configuration from provided reader encode in plain text format (.neat)
func LoadYAMLOptions ¶
LoadYAMLOptions is to load NEAT options encoded as YAML file
func (*Options) NeatContext ¶
NeatContext is to get Context which carries NEAT options inside to be propagated
func (*Options) RandomNodeActivationType ¶
func (c *Options) RandomNodeActivationType() (math.NodeActivationType, error)
RandomNodeActivationType Returns next random node activation type among registered with this context
type Trait ¶
type Trait struct {
// The trait ID
Id int `yaml:"id"`
// The learned trait parameters
Params []float64 `yaml:"params"`
}
Trait is a group of parameters that can be expressed as a group more than one time. Traits save a genetic algorithm from having to search vast parameter landscapes on every node. Instead, each node can simply point to a trait and those traits can evolve on their own.
func NewTrait ¶
func NewTrait() *Trait
NewTrait is to create empty trait with default parameters number (see: NumTraitParams above)
func NewTraitAvrg ¶
NewTraitAvrg Special Constructor creates a new Trait which is the average of two existing traits passed in
Directories
¶
| Path | Synopsis |
|---|---|
|
Package genetics holds data holders and helper utilities used to implement genetic evolution algorithm
|
Package genetics holds data holders and helper utilities used to implement genetic evolution algorithm |
|
Package math defines standard mathematical primitives used by the NEAT algorithm as well as utility functions
|
Package math defines standard mathematical primitives used by the NEAT algorithm as well as utility functions |
|
Package network provides data structures and utilities to describe Artificial Neural Network and network solvers.
|
Package network provides data structures and utilities to describe Artificial Neural Network and network solvers. |