Пропорциональный выбор фитнеса (Выбор колеса рулетки )в Python

У меня есть список объектов (Хромосома )которые имеют атрибут пригодности (хромосома.фитнес между 0 и 1)

Имея список таких объектов, как я могу реализовать функцию, которая возвращает единственная хромосома, шансы которой быть выбранной пропорциональны ее приспособленности? То есть хромосома с приспособленностью 0,8 имеет в два раза больше шансов быть выбранной, чем хромосома с пригодностью 0,4.

Я нашел несколько реализаций Python и псевдокода, но они слишком сложны для этого требования :функции нужен только список хромосом. Хромосомы сохраняют свою приспособленность как внутреннюю переменную.

Реализация, которую я уже написал, была до того, как я решил разрешить хромосомам сохранять свою пригодность, поэтому она была намного сложнее и включала в себя архивирование списков и прочее.

----------------------------РЕДАКТИРОВАТЬ----------------------------

Спасибо Lattyware. Следующая функция работает.

def selectOne(self, population):
        max     = sum([c.fitness for c in population])
        pick    = random.uniform(0, max)
        current = 0
        for chromosome in population:
            current += chromosome.fitness
            if current > pick:
                return chromosome
12
задан Rory 25 April 2012 в 21:43
поделиться