Выбор рулетки в генетических алгоритмах
Уже много правильных решений, но evolutionary-algorithm я думаю, что этот код более genetic-algorithm понятен.
def select(fs):
p = random.uniform(0, sum(fs))
for i, f in enumerate(fs):
if p <= 0:
break
p -= f
return i
Кроме того, если genetic вы накапливаете fs, вы можете roulette-wheel-selection получить более эффективное genetic-algorithm решение.
cfs = [sum(fs[:i+1]) for i in xrange(len(fs))]
def select(cfs):
return bisect.bisect_left(cfs, random.uniform(0, cfs[-1]))
Это и быстрее, и genetic очень лаконичный код. STL roulette-wheel-selection в C++ имеет аналогичный алгоритм evolutionary-algorithm деления пополам, если вы roulette-wheel-selection используете этот язык.
genetic-algorithm
evolutionary-algorithm
roulette-wheel-selection
Выбор рулетки в генетических алгоритмах
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.