Насколько этот алгоритм соответствует выбору колеса рулетки?
Я пытаюсь осуществить выбор колеса рулетки. Я понял этот алгоритм:
- Рассчитайте сумму S всех хромосомных приспособлений в популяции
- Генерация случайного числа r из интервала (0,S)
- Цикл по населению и сумме пригодности от 0 до S, это частичная сумма, назовите это P.
- Когда P > S: остановите и верните соответствующую хромосому.
Что я не понимаю, так это то, как это соответствует этому: алгоритм выбора колеса рулетки (ответ с 44 голосами). Это имеет смысл для меня, но не тот, что выше.
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]
В ответе с 44 голосами диапазон был нормализован между 0 и 1, что легче понять, но требует дополнительных шагов для расчетов.
Вы можете реализовать подход, который вы упомянули. При этом при расчете суммы каждая отдельная хромосома добавляет свою собственную value
поэтому, когда случайное число генерируется между 0 и S, мы предполагаем, что если r находится между 2 числами, диапазон которых равен вышеупомянутому value
, он выбирается с вероятностью, пропорциональной значению его пригодности. Чем больше значение, тем больше вероятность того, что r попадет в его диапазон.
Например, предположим, что хромосома, имеющая приспособленность 23 (предположение), является 5-й хромосомой, когда вы выполняете итерацию, а общая сумма S равна 130. Сумма первых 4 хромосом равна, скажем, 54. Так что если random r
от 55 до 77 (оба включительно), эта хромосома выбрана.
После нормализации 55/130 ~= 0,423 и 77/130 ~= 0,5923 - это диапазон случайного числа r2
(между 0 и 1) должен падать для этой хромосомы, которая будет выбрана.