Я пытаюсь сделать простой алгоритм нейроэволюции без аккуратной библиотеки (как я только начал и хочу получить хорошее представление о том, как она работает), но я не могу исправить эту ошибку, которую я продолжаю иметь.
Примечание : первая популяция генерируется случайным образом
Код выполняет генерацию случайных букв до совпадения со строкой верблюжьих букв, которую дает пользователь. У меня есть два класса, один для ДНК и один для населения. Класс ДНК имеет такие функции, как 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