Выбор рулетки в генетических алгоритмах

Уже много правильных решений, но 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

2022-10-20T18:04:45+00:00
Вопросы с похожей тематикой, как у вопроса:

Выбор рулетки в генетических алгоритмах