def run(parametros): prmt = { "npop": parametros[0], "nger": parametros[1], "tc": parametros[2], "tm": parametros[3], } melhores_solucoes = [] for _ in range(0, 5): populacao = Populacao(refeicoes, produtos_ids, dieta_kcal, prmt["npop"], prmt["tc"], prmt["tm"]) for _ in range(0, prmt["nger"]): populacao.avalia_pop(nutrientes_prod_dict, restricoes, penalidade=100) melhor_indiv = populacao.get_melhor_indiv() pais = populacao.torneio() indiv_interm = populacao.cruzamento(pais, refeicoes, produtos_ids) populacao.substituir_pop(indiv_interm) populacao.exec_elitismo(melhor_indiv) if melhor_indiv.kcal >= 1200: melhores_solucoes.append(melhor_indiv) return melhores_solucoes, prmt
} produtos_ids = __io.load_products("Dataset/produtos.json") nutrientes_prod = __io.load_data("Dataset/dataset_formatado.csv") nutrientes_prod_dict = pd_to_dict(nutrientes_prod) populacao = Populacao(refeicoes, produtos_ids, dieta_kcal, npop, taxa_cruzamento, taxa_mutacao) log_pop = [] for ger_i in range(0, nger): populacao.avalia_pop(nutrientes_prod_dict, restricoes, penalidade=100) log_pop.append(gen_log(populacao)) melhor_indiv = populacao.get_melhor_indiv() pais = populacao.torneio() indiv_interm = populacao.cruzamento(pais, refeicoes, produtos_ids) populacao.substituir_pop(indiv_interm) populacao.exec_elitismo(melhor_indiv) print("=> Geração: " + str(ger_i + 1) + "/" + str(nger) + " -> Melhor solução encontrada até o momento: %.2f" % melhor_indiv.fitness, melhor_indiv.valida(nutrientes_prod_dict, restricoes), end=" \r") print("\n\nRestrições:", restricoes) print("\nDieta:", populacao.get_melhor_indiv().get_nutrientes(nutrientes_prod_dict), "\n") print("\nFitness: %.2f" % populacao.get_melhor_indiv().fitness, " - Kcal: %.2f" % populacao.get_melhor_indiv().kcal) pc.plot_graphics(log_pop, parametros)