Как этот алгоритм соответствует выбору колеса рулетки?

Я пытаюсь реализовать выбор колеса рулетки. Я понял этот алгоритм:

  1. Вычислите сумму S всех хромосомных приспособлений в популяции.
  2. Сгенерировать случайное число r из интервала (0, S)
  3. Прокрутите популяцию и просуммируйте приспособленности от 0 до S, это частичная сумма, назовите ее P.
  4. Когда P> S: остановитесь и верните соответствующую хромосому.

Я не понимаю, как это соответствует этому: алгоритм выбора колеса рулетки ( ответ 44 голосами). Для меня это имеет смысл, но не тот, что выше.


person Green    schedule 12.02.2019    source источник


Ответы (2)


Следующее делается с использованием суммы

def choose_parent_using_RWS(genes, S, points):
    P = randint(0, int(S))
    for x in genes:
        P += evaluate(x, points)
        if P > S:
            return x
    return genes[-1]

следующее выполняется путем нормализации от 0 до 1

def choose_parent_using_RWS(genes, S, points):
    P = randint(0, int(S))/S
    for x in genes:
        P += evaluate(x, points)/S
        if P > S/S:
            return x
    return genes[-1]
person guroosh    schedule 14.02.2019
comment
У меня есть дополнительный вопрос. Случайное число не следует добавлять к первой хромосоме. Разве это не должно быть, если r (т.е. случайное число) ‹P выбрать x? - person Green; 14.02.2019
comment
Цитата: Shouldn't it be if r (i.e. the random number) < P, P - случайное число, начиная с P = randint(0, int(S)), иначе я не понял. - person guroosh; 15.02.2019
comment
Хорошо, я подумал, что P - это частичная сумма, поскольку мы продолжаем добавлять приспособления. Тогда в моей голове должно быть случайное число, назовем его r. Итак, когда r ‹P, мы выбираем x. - person Green; 16.02.2019
comment
нам нужно выбрать положение хромосомы. Когда это P ›S, выберите x, здесь P = initial random number r + the sum of all fitness up to and including x. - person guroosh; 16.02.2019

В ответе с 44 голосами диапазон был нормализован от 0 до 1, что легче понять, но требует дополнительных шагов для вычислений.

Вы можете реализовать упомянутый подход. Таким образом, при вычислении суммы каждая отдельная хромосома добавляет свой собственный value, поэтому, когда случайное число генерируется между 0 и S, мы предполагаем, что если r находится между двумя числами, диапазон которых равен вышеупомянутому value, он выбирается с помощью вероятность пропорциональна его значению пригодности. Чем больше значение, тем больше вероятность того, что r попадет в свой диапазон.

Например, предположим, что хромосома, имеющая пригодность 23 (предположение), является 5-й хромосомой при повторении и общая сумма S равна 130. Сумма первых 4 хромосом, скажем, равна 54. Итак, если random r находится между 55 и 77 (обе включительно) выбирается эта хромосома.

После нормализации 55/130 ~ = 0,423 и 77/130 ~ = 0,5923 - это диапазон, в который должно попадать случайное число r2 (от 0 до 1) для выбора этой хромосомы.

person guroosh    schedule 13.02.2019
comment
Но что означает добавление значения пригодности каждой хромосомы? Я имею в виду, почему мы так поступаем? В другом ответе ясно, что мы делим диапазон от 0 до 1 на несколько неперекрывающихся сегментов, соответствующих количеству хромосонов. Каждый сегмент пропорционален пригодности одного из десяти пунктов. Затем вы просто генерируете случайное число и смотрите, в каком диапазоне оно находится. Делая это, мы не продолжаем добавлять приспособленность каждой хромосоны. - person Green; 13.02.2019
comment
Как вы сделаете количество неперекрывающихся сегментов, соответствующее количеству хромосонов. Например, как вы узнаете, что хромосома со значением пригодности 23 в популяции 130 человек будет соответствовать отрезку длины 0,1769, и как вы выберете его? - person guroosh; 13.02.2019
comment
Это точно так же, как объяснил ответ с 44 голосами. Вы просто разделите круговую диаграмму в соответствии с пропорциональностью пригодности каждой хромосомы. - person Green; 14.02.2019
comment
Да, но чтобы узнать долю хромосомы, вам нужно разделить ее значение пригодности на общее значение приспособленности популяции, следовательно, вам нужно будет найти сумму. Вот почему мы делаем сумму. Когда у нас есть сумма, разработчик выбирает, нормализовать ли все значения от 0 до 1, разделив все на 130 (сумма), где 130 (значение пригодности для всего населения) становится 1; а 23 (значение одной хромосомы) становится 23/100 ~ = 0,1769. Итак, чтобы ответить на исходный вопрос Как этот алгоритм соответствует выбору колеса?, 44 голоса были нормализованы. - person guroosh; 14.02.2019