Генетический алгоритм отбора турниров, random.choice () выбирает одинаковых родителей - PullRequest
0 голосов
/ 22 декабря 2019

Я пытаюсь реализовать генетический алгоритм, проблема в том, что когда популяция становится меньше, моя функция tour_selection возвращает тех же родителей. Вот две основные функции

def crossover(agents, x):
offspring = []

for _ in range(len(agents)):
    p1 = tournament_selection(agents)
    p2 = tournament_selection(agents)
    split = random.randint(0, len(p2.individual) - 1)
    child1 = p1
    child1.individual = p1.individual[0:split] + p2.individual[split:len(p1.individual)]
    offspring.append(child1)
agents = offspring
return agents


def tournament_selection(population):
parents = random.choices(population, k=5)
parents = sorted(parents, key=lambda agent: agent.fitness, reverse=True)
bestparent = parents[0]
return bestparent

1 Ответ

0 голосов
/ 29 декабря 2019

Вы можете изменить tournament_selection так, чтобы он возвращал двух родителей:

def tournament_selection(population):
    parents = random.choices(population, k=5)
    parents = sorted(parents, key=lambda agent: agent.fitness, reverse=True)
    return parents[0], parents[1]

Тогда единственное другое необходимое изменение будет состоять в том, чтобы заменить ваши строки p1 = и p2 = одной строкой:

p1, p2 = tournament_selection(agents)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...