eckity.genetic_operators.selections.elitism_selection
1from eckity.genetic_operators.selections.selection_method import SelectionMethod 2 3 4class ElitismSelection(SelectionMethod): 5 def __init__(self, num_elites, higher_is_better=False, events=None): 6 super().__init__(events=events, higher_is_better=higher_is_better) 7 self.num_elites = num_elites 8 self.higher_is_better = higher_is_better 9 10 def select(self, source_inds, dest_inds): 11 elites = sorted(source_inds, 12 key=lambda ind: ind.get_augmented_fitness(), 13 reverse=self.higher_is_better)[:self.num_elites] 14 for elite in elites: 15 dest_inds.append(elite.clone()) 16 self.selected_individuals = dest_inds 17 # TODO shouldn't it be after_operator? why is this needed? 18 # self.publish("after_selection") 19 return dest_inds
5class ElitismSelection(SelectionMethod): 6 def __init__(self, num_elites, higher_is_better=False, events=None): 7 super().__init__(events=events, higher_is_better=higher_is_better) 8 self.num_elites = num_elites 9 self.higher_is_better = higher_is_better 10 11 def select(self, source_inds, dest_inds): 12 elites = sorted(source_inds, 13 key=lambda ind: ind.get_augmented_fitness(), 14 reverse=self.higher_is_better)[:self.num_elites] 15 for elite in elites: 16 dest_inds.append(elite.clone()) 17 self.selected_individuals = dest_inds 18 # TODO shouldn't it be after_operator? why is this needed? 19 # self.publish("after_selection") 20 return dest_inds
def
select(self, source_inds, dest_inds):
11 def select(self, source_inds, dest_inds): 12 elites = sorted(source_inds, 13 key=lambda ind: ind.get_augmented_fitness(), 14 reverse=self.higher_is_better)[:self.num_elites] 15 for elite in elites: 16 dest_inds.append(elite.clone()) 17 self.selected_individuals = dest_inds 18 # TODO shouldn't it be after_operator? why is this needed? 19 # self.publish("after_selection") 20 return dest_inds