def initial_pop(self): print(f"{'=' * self.load_bar_len}\ncreating genesis population") return [ Genome(i, self.network_params, self.mutation_scale, self.w_mutation_rate, self.b_mutation_rate) for i in range(self.population_size) ]
def initial_pop(self): if self.verbose: print('{0}\ncreating genisis population'.format( '=' * self.verbose_load_bar)) genomes = [] for i in range(self.population_size): genomes.append( Genome(i, self.network_params, self.mutation_scale, self.w_mutation_rate, self.b_mutation_rate)) return genomes
def evolve(self): # genesis population self.gen += 1 if self.gen == 1: return self.socket_reporter("genProgress", {"progress": 0}) print(f"{'=' * self.load_bar_len}\ncreating population {self.gen}") # find fitness by normalizing score self.normalize_score() # find pool of genomes to breed and mutate parents_1 = self.pool_selection() parents_2 = self.pool_selection() children = [] # create next generation for idx, (p1, p2) in enumerate(zip(parents_1, parents_2)): children.append( Genome(idx, self.network_params, self.mutation_scale, self.w_mutation_rate, self.b_mutation_rate, parent_1=self.genomes[p1], parent_2=self.genomes[p2] if np.random.random() < self.breeding_ratio else None)) progress = int((idx + 1) / len(parents_1) * self.load_bar_len) progress_left = self.load_bar_len - progress print('[{0}>{1}]'.format('=' * progress, ' ' * progress_left), end='\r') print(' ' * (self.load_bar_len + 3), end='\r') self.genomes = children # mutation scale will decay over time self.mutation_scale *= self.mutation_decay
def evolve(self, g): # genisis population if g == 0: return if self.verbose: print('{0}\ncreating population {1}'.format('='*self.verbose_load_bar, g+1)) # find fitness by normalizing score self.normalize_score() # find pool of genomes to breed and mutate parents_1 = self.pool_selection() parents_2 = self.pool_selection() children = [] # evolving keras network if self.network_params['network'] == 'convolutional': # temporarily save models and clear session configs, weights = [], [] for p1 in parents_1: configs.append(self.genomes[p1].model.prediction.to_json()) weights.append(self.genomes[p1].model.prediction.get_weights()) tf.keras.backend.clear_session() # reload models for idx, (config, weight) in enumerate(zip(configs, weights)): loaded = model_from_json(config) loaded.set_weights(weight) children.append(Genome(idx, self.network_params, self.mutation_scale, self.w_mutation_rate, self.b_mutation_rate, load_keras=loaded)) if self.verbose: progress = int((idx + 1)/len(parents_1) * self.verbose_load_bar) progress_left = self.verbose_load_bar - progress print('[{0}>{1}]'.format('=' * progress, ' ' * progress_left), end='\r') else: # create next generation for idx, (p1, p2) in enumerate(zip(parents_1, parents_2)): if np.random.random() < self.breeding_ratio: # breeding children.append(Genome(idx, self.network_params, self.mutation_scale, self.w_mutation_rate, self.b_mutation_rate, parent_1=self.genomes[p1], parent_2=self.genomes[p2])) else: # mutating children.append(Genome(idx, self.network_params, self.mutation_scale, self.w_mutation_rate, self.b_mutation_rate, parent_1=self.genomes[p1])) if self.verbose: progress = int((idx + 1)/len(parents_1) * self.verbose_load_bar) progress_left = self.verbose_load_bar - progress print('[{0}>{1}]'.format('=' * progress, ' ' * progress_left), end='\r') if self.verbose: print(' ' * (self.verbose_load_bar + 3), end='\r') self.genomes = children # mutation scale will decay over time self.mutation_scale *= self.mutation_decay