-1
Can anyone help me? I’m getting the error below, I understand that the program tries to access a non-existent position, but I can not fix... The code is a job I have to complete and increase:
Indexerror Traceback (Most recent call last) in () 12 cObject.computeMapping("corpus.txt") 13 # Call of the genetic algorithm ---> 14 listLog = geneticAlgorithm(cObject, message)
in geneticAlgorithm(cypherObject, messages, sizePopulation, numbersGenerations, nBest) 26 # Fitness may be a list that stores probability values 27 print("I before fitness:", i, "J before fitness:", j) ---> 28 fitness, messaging Raduzida = cypherObject.computeLogProbability(messaging, population[j]) 29 print("I after fitness:", i, "I after fitness:", j, "n") 30
Indexerror: list index out of range
The code snippet with the problem:
def geneticAlgorithm(cypherObject, mensagemCodificada, tamanhoPopulacao=10, numeroGeracoes=10, nMelhores=10):
# Observacoes
# Guardar a melhor probabilidade (criar variavel)
# Criar uma variavel para armazenar a melhor traducao
# Gerar uma populacao inicial
populacao = []
newPopulacao = []
fitness = []
listaLogProbabilidade = []
melhorTraducao = []
listaFitness = []
for i in range(tamanhoPopulacao):
listaCaracteres = list(cypherObject.getAlphabet())
random.shuffle(listaCaracteres)
resultado = "".join(listaCaracteres)
populacao.append(resultado)
print("\n", populacao) # teste para validar se a população está sendo gerada corretamente.
for i in range(numeroGeracoes):
# Calcular o fitness da populacao
#print("Teste de for do i:", i)
for j in range(tamanhoPopulacao):
# Fitness pode ser uma lista que armazena os valores de probabilidade
print("I antes do fitness:", i, "J antes do fitness:", j)
fitness, mensagemTraduzida = cypherObject.computeLogProbability(mensagemCodificada, populacao[j])
print("I depois do fitness:", i, "I depois do fitness:", j, "\n")
# Selecionar os melhores valores de fitness (Posso ordenar os valores de fitness)
# https://numpy.org/doc/stable/reference/generated/numpy.argsort.html
# Ordenar valores e retornar os indices dos valores
listaFitnessIndices = np.argsort(listaFitness)[::-1]
# Aplicar alteracoes na populacao
# Selecionar os N melhores
# Adicionar cromossomos mutados
# Cruzamento dos N melhores (Implementar depois)
# populacao[algum indice] = ['axcke'] (Mutacao do cromossomo)
# Sugestao: Trocar posicoes do vetor de lugar
# Ajudou a cair menos em maximos locais
# Gerar novos cromossomos de forma aleatoria (primeiro trecho do codigo)
populacao = newPopulacao.copy()
return listaLogProbabilidade, melhorTraducao