AttributeError: у объекта 'int' нет атрибута 'fitness'., Стохастическая универсальная выборка --python - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь реализовать Стохастическую универсальную выборку, которая работает следующим образом:

  1. Пусть F - сумма значений пригодности всех хромосом в популяции.

  2. Пусть N будет числом родителей для выбора.

  3. Вычислить расстояние P между последовательными точками: P = F / N.
  4. Создать случайное числомежду 0 и P в качестве отправной точки для линейки. Линейка имеет N точек, расположенных на одинаковом расстоянии друг от друга, на расстоянии P друг от друга.
  5. Назначьте каждой хромосоме диапазон, равный по длине ее пригодности и начальной точке, которая находится после конечной точки предыдущей хромосомы (например, первой хромосомы 01.53,2-я хромосома 1.54-2.26, 3-я хромосома 2.27-3.42 и т. Д.).
  6. Выберите хромосомы, чей диапазон содержит маркер (обратите внимание, что хромосома может иметь 2 маркера, в этом случае она выбирается дважды).

Я реализовал некоторую часть этой функциональности, но она дает ошибку

fitness_probSort = sorted(fitness_prob, key=attrgetter(fit_attr),  reverse=True)
AttributeError: 'int' object has no attribute 'fitness'.

Я столкнулся с проблемой при реализации 5 и 6 шага.

selection.py


def stochasticUniversalSampling(self, N, fit_attr="fitness"):
fitnessResults = {}
fitness_prob = {}

for i in range(0, len(self.population)):
    fitnessResults[i] = self.population[i].getFitness()
    fitness_prob[i] = 1 / fitnessResults[i]
fitness_probSort = sorted(fitness_prob, key=attrgetter(fit_attr),  reverse=True)
print(fitness_probSort)
point_distance = 1 / N
start_point = random.uniform(0, point_distance)
points = [start_point + i * point_distance for i in range(N)]
chosen = []
for p in points:
    i = 0
    sum_ = getattr(fitness_probSort[i], fit_attr).values[0]
    while sum_ < p:
        i += 1
        sum_ += getattr(fitness_probSort[i], fit_attr).values[0]
    chosen.append(fitness_probSort[i])

 return chosen

...