Fitness proportionate selection (roulette wheel selection) in Python

There is a very simple way to select a weighted random choice from a dictionary:

def weighted_random_choice(choices):
    max = sum(choices.values())
    pick = random.uniform(0, max)
    current = 0
    for key, value in choices.items():
        current += value
        if current > pick:
            return key

If you don't have a dictionary at hand, you could modify this to suit your class (as you haven't given more details of it, or generate a dictionary:

choices = {chromosome: chromosome.fitness for chromosome in chromosomes}

Presuming that fitness is an attribute.

Here is an example of the function modified to take an iterable of chromosomes, again, making the same presumption.

def weighted_random_choice(chromosomes):
    max = sum(chromosome.fitness for chromosome in chromosomes)
    pick = random.uniform(0, max)
    current = 0
    for chromosome in chromosomes:
        current += chromosome.fitness
        if current > pick:
            return chromosome

Use numpy.random.choice.

import numpy.random as npr
def selectOne(self, population):
    max = sum([c.fitness for c in population])
    selection_probs = [c.fitness/max for c in population]
    return population[npr.choice(len(population), p=selection_probs)]