Indexerror: list index out of range

Asked

Viewed 57 times

-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

1 answer

0

You urged the list here:

listaFitness = []
for i in range(tamanhoPopulacao):

Then he used her here:

listaFitnessIndices =  np.argsort(listaFitness)[::-1]

But halfway between instantiating her and using you didn’t fill her out, I think you must have forgotten some code, if in your code it is possible that in some situation the list is not filled in you cannot forget to check if the variable is filled with something before using it.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.