@staticmethod
def compute_spawn(adjusted_fitness, previous_sizes, pop_size, min_species_size):
    'Compute the proper number of offspring per species (proportional to fitness).'
    af_sum = sum(adjusted_fitness)
    spawn_amounts = []
    for (af, ps) in zip(adjusted_fitness, previous_sizes):
        if (af_sum > 0):
            s = max(min_species_size, ((af / af_sum) * pop_size))
        else:
            s = min_species_size
        d = ((s - ps) * 0.5)
        c = int(round(d))
        spawn = ps
        if (abs(c) > 0):
            spawn += c
        elif (d > 0):
            spawn += 1
        elif (d < 0):
            spawn -= 1
        spawn_amounts.append(spawn)
    total_spawn = sum(spawn_amounts)
    norm = (pop_size / total_spawn)
    spawn_amounts = [max(min_species_size, int(round((n * norm)))) for n in spawn_amounts]
    return spawn_amounts
Compute the proper number of offspring per species (proportional to fitness).
@staticmethod
def compute_spawn(adjusted_fitness, previous_sizes, pop_size, min_species_size):
    
    af_sum = sum(adjusted_fitness)
    spawn_amounts = []
    for (af, ps) in zip(adjusted_fitness, previous_sizes):
        if (af_sum > 0):
            s = max(min_species_size, ((af / af_sum) * pop_size))
        else:
            s = min_species_size
        d = ((s - ps) * 0.5)
        c = int(round(d))
        spawn = ps
        if (abs(c) > 0):
            spawn += c
        elif (d > 0):
            spawn += 1
        elif (d < 0):
            spawn -= 1
        spawn_amounts.append(spawn)
    total_spawn = sum(spawn_amounts)
    norm = (pop_size / total_spawn)
    spawn_amounts = [max(min_species_size, int(round((n * norm)))) for n in spawn_amounts]
    return spawn_amounts