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