class Neuron(object): """ A simple sigmoidal neuron """ # TODO: Get rid of these global indexers. indexer = Indexer(0) def __init__(self, neuron_type, ID, bias, response, activation_type): assert neuron_type in ('INPUT', 'OUTPUT', 'HIDDEN') self.type = neuron_type self.ID = self.indexer.next(ID) self.bias = bias self.response = response self.activation = activation_functions.get(activation_type) self._synapses = [] self.output = 0.0 # for recurrent networks all neurons must have an "initial state" def activate(self): """Activates the neuron""" assert self.type is not 'INPUT' z = self.bias + self.response * self._update_activation() return self.activation(z) def _update_activation(self): soma = 0.0 for s in self._synapses: soma += s.incoming() return soma def create_synapse(self, s): self._synapses.append(s) def __repr__(self): return '{0:d} {1!s}'.format(self.ID, self.type)
def __init__(self, config): """ :param config: Either a config.Config object or path to a configuration file. """ # If config is not a Config object, assume it is a path to the config file. if not isinstance(config, Config): config = Config(config) # Configure statistics and reporting as requested by the user. self.reporters = ReporterSet() if config.collect_statistics: self.statistics = StatisticsReporter() self.add_reporter(self.statistics) else: self.statistics = None if config.report: self.add_reporter(StdOutReporter()) self.config = config print(self.config.genotype.__name__) ## Check if we have a society directory defined and may be this a continuation on an existing run. if self.config.society_directory != None: ## Check if latest society file is available if os.path.isdir(self.config.society_directory): print("Society Directory") self.species_indexer = Indexer(1) self.genome_indexer = Indexer(1) self.innovation_indexer = InnovationIndexer(0) self.reproduction = config.reproduction_type(self.config, self.reporters, self.genome_indexer, self.innovation_indexer) self.species = [] self.generation = -1 self.total_evaluations = 0 # Create a population if one is not given, then partition into species. self.population = self._create_population() self._speciate(self.population)