コード例 #1
0
    def family_competition(self, k=2):

        parent_fitness = [(solution,
                           Fitness.get_fitness(solution,
                                               function=self.fitness_function))
                          for solution in self.parent]
        child_fitness = [(solution,
                          Fitness.get_fitness(solution,
                                              function=self.fitness_function))
                         for solution in self.children]
        failed_reproduction = [
            baby_fitness[1] <= max(parent_fitness, key=itemgetter(1))[1]
            for baby_fitness in child_fitness
        ]

        family_fitness = parent_fitness + child_fitness
        sorted_family = sorted(family_fitness,
                               key=lambda x: x[1],
                               reverse=True)
        kth_best, kth1_best = sorted_family[k - 1], sorted_family[k]

        if kth_best[1] == kth_best[1]:
            if kth1_best[0] in self.parent and not kth_best in self.parent:
                sorted_family[k - 1] = kth1_best
                sorted_family[k] = kth_best

        return [solution[0]
                for solution in sorted_family[:k]], failed_reproduction
コード例 #2
0
 def population_stats(self):
     return [
         Fitness.get_fitness(solution, function=self.fitness_function)
         for solution in self.population
     ]