Цикл NeuroEvolution вышел из индекса - PullRequest
0 голосов
/ 30 октября 2019

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

Примечание : первая популяция генерируется случайным образом

Код выполняет генерацию случайных букв до совпадения со строкой верблюжьих букв, которую дает пользователь. У меня есть два класса, один для ДНК и один для населения. Класс ДНК имеет такие функции, как Breed, Mutate и CalculateFitness. Каждый делает то, что говорит заголовок.

Моя проблема связана с созданным пулом спаривания. Я сделал так, чтобы он вычислял пригодность каждого объекта ДНК и добавлял его в пул спаривания так, чтобы% пригодности равнялся «нет». раз он добавляется в пул спаривания

Например: если показатель пригодности объекта ДНК составляет 5%, этот объект добавляется в пул спаривания 5 раз.

Воткод цикла ()

def loop():
    global population
    global found
    while not found:
        next_population = False
        mating_pool = []
        for x in range(0, population.__len__()):
            if population[x].fitness == 1:
                found = True
            population[x].CalculateFitness()
            if population[x].fitness > 0:
                mating_strength = int(population[x].fitness * 100)
            else:
                mating_strength = 0
            for count in range(0, mating_strength):
                mating_pool.append(population[x])

        next_population = []
        while not next_population:
            parentA = mating_pool[random.randint(0, mating_pool.__len__())]
            parentB = mating_pool[random.randint(0, mating_pool.__len__())]
            child = DNA()
            child.char_list = parentA.Breed(parentB)
            child.Mutation()
            next_population.append(child)
            if next_population.__len__() == population.__len__():
                population = next_population
                next_population = True

This is the error, sometimes it shows up with parentA and sometimes with parentB:

    parentB = mating_pool[random.randint(0, mating_pool.__len__())]
IndexError: list index out of range
...