Простой способ изменить порядок вероятности:
Скажем, исходный список вероятностей [p1,p2,p3,...,pn]
предназначен для отдельных лиц в популяции.
Чтобы изменить порядок, для каждого pi
в этом списке мы получаем new_pi = (1-pi) / (n-1)
.
Пояснение:
Начиная с 0<=pi<=1
, значение (1-pi)
заставляет меньшую вероятность получить большее значение.
Поскольку сумма (1-pi)
для i
от 1
до n
становится n-1
, после деления на (n-1)
(нормализация) мы убеждаемся, что 0<=new_pi<=1
.
Пример кода:
def rouletteWheelSelect(population):
fitnessSum = 0
for individual in population:
fitnessSum += individual.fitness
for individual in population:
individual.selectProb = individual.fitness / fitnessSum
probSum = 0
wheelProbList = []
if MAXIMIZATION_PROBLEM:
for individual in population:
probSum += individual.selectProb
wheelProbList.append(probSum)
elif MINIMIZATION_PROBLEM:
for individual in population:
probSum += (1-individual.selectProb) / (POPULATION_SIZE-1)
wheelProbList.append(probSum)
r = random.random() # 0<=r<1
for i, p in enumerate(wheelProbList):
if r < p:
return population[i]
return None
person
Instein
schedule
02.03.2020