def __init__(self, config, initial_population=None): """ :param config: Either a config.Config object or path to a configuration file. :param initial_population: Either an initial set of Genome instances to be used as the initial population, or None, in which case a randomized set of Genomes will be created automatically based on the configuration parameters. """ # 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 self.reproduction = config.reproduction_type(config, self.reporters) self.species = SpeciesSet(config) self.generation = -1 self.total_evaluations = 0 # Create a population if one is not given, then partition into species. if initial_population is None: initial_population = self.reproduction.create_new(config.pop_size) self.species.speciate(initial_population)