In improve and improve_bis you are getting the seeds from normalized_fitness which is returned by normalize_dico, while in add_pop you get a new random seed from a np.random.randint.
It looks like the results should be different. Am I missing something?