У меня есть список объектов (Хромосома )которые имеют атрибут пригодности (хромосома.фитнес между 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