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
ElitismSelection(num_elites, higher_is_better=False, events=None)
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
num_elites
higher_is_better
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