Code Duplication    Length = 19-22 lines in 2 locations

src/gradient_free_optimizers/optimizers/pop_opt/genetic_algorithm.py 1 location

@@ 93-114 (lines=22) @@
90
        self.p_current = self.individuals[nth_pop]
91
        return self.p_current.init_pos()
92
93
    @EvolutionaryAlgorithmOptimizer.track_new_pos
94
    def iterate(self):
95
        n_ind = len(self.individuals)
96
97
        if n_ind == 1:
98
            self.p_current = self.individuals[0]
99
            return self.p_current.iterate()
100
101
        self.sort_pop_best_score()
102
        rnd_int = random.randint(0, len(self.pop_sorted) - 1)
103
        self.p_current = self.pop_sorted[rnd_int]
104
105
        total_rate = self.mutation_rate + self.crossover_rate
106
        rand = np.random.uniform(low=0, high=total_rate)
107
108
        if rand <= self.mutation_rate:
109
            return self.p_current.iterate()
110
        else:
111
            if not self.offspring_l:
112
                self._crossover()
113
            self.p_current.pos_new = self.offspring_l.pop(0)
114
            return self.p_current.pos_new
115
116
    @EvolutionaryAlgorithmOptimizer.track_new_score
117
    def evaluate(self, score_new):

src/gradient_free_optimizers/optimizers/pop_opt/evolution_strategy.py 1 location

@@ 88-106 (lines=19) @@
85
        self.p_current = self.individuals[nth_pop]
86
        return self.p_current.init_pos()
87
88
    @EvolutionaryAlgorithmOptimizer.track_new_pos
89
    def iterate(self):
90
        self.n_ind = len(self.individuals)
91
92
        if self.n_ind == 1:
93
            self.p_current = self.individuals[0]
94
            return self.p_current.iterate()
95
96
        self.sort_pop_best_score()
97
        self.rnd_int = random.randint(0, len(self.pop_sorted) - 1)
98
        self.p_current = self.pop_sorted[self.rnd_int]
99
100
        total_rate = self.mutation_rate + self.crossover_rate
101
        rand = np.random.uniform(low=0, high=total_rate)
102
103
        if rand <= self.mutation_rate:
104
            return self.p_current.iterate()
105
        else:
106
            return self._cross()
107
108
    @EvolutionaryAlgorithmOptimizer.track_new_score
109
    def evaluate(self, score_new):