def main(): eltismo = True # tamanho da populacao tam_pop = 30 # numero máximo de geracoes num_max_geracoes = 10000 # define o número de genes do indivíduo baseado na solucao num_genes = int(27) # cria a primeira populacao aleatérioa populacao = Populacao(num_genes, tam_pop) tem_solucao = False geracao = 0 print("Iniciando... Aptidao da solucao: ", algoritmo.solucao) # loop até o critério de parada while (not tem_solucao and geracao < num_max_geracoes): geracao += 1 # cria nova populacao populacao = algoritmo.nova_geracao(populacao, eltismo) print( "Geracao ", geracao, " | Aptidao: ", populacao.get_individuo(0).aptidao, " | Melhor: ", populacao.get_individuo(0).get_genes() ) # verifica se tem a solucao tem_solucao = populacao.tem_solucao() if (geracao == num_max_geracoes): print( "Número Maximo de Geracoes | ", populacao.get_individuo(0).get_genes(), " ", populacao.get_individuo(0).aptidao ) if (tem_solucao): print( "Encontrado resultado na geracao ", geracao, " | ", populacao.get_individuo(0).get_genes(), " (Aptidão: ", populacao.get_individuo(0).aptidao, ")" )
def selecao_torneio(self, populacao): populacao_intermediaria = Populacao(tam_pop=3) # seleciona 3 indivíduos aleatóriamente na população populacao_intermediaria.set_individuo( populacao.get_individuo( random.randint(0, (populacao.get_tam_populacao() - 1)))) populacao_intermediaria.set_individuo( populacao.get_individuo( random.randint(0, (populacao.get_tam_populacao() - 1)))) populacao_intermediaria.set_individuo( populacao.get_individuo( random.randint(0, (populacao.get_tam_populacao() - 1)))) # ordena a população populacao_intermediaria.ordena_populacao() pais = [] # seleciona os 2 melhores deste população pais.insert(0, populacao_intermediaria.get_individuo(0)) pais.insert(1, populacao_intermediaria.get_individuo(1)) return pais