#------------------------------# # main.py # #------------------------------# from ag import AlgoritmoGenetico dados = [ {'item': 'Lapis', 'peso': 1, 'valor': 2}, {'item': 'Borracha', 'peso': 1, 'valor': 1}, {'item': 'Caderno', 'peso': 3, 'valor': 4}, {'item': 'Livro', 'peso': 4, 'valor': 5}, {'item': 'Caneta', 'peso': 1, 'valor': 2}, {'item': 'Cálculadora', 'peso': 3, 'valor': 3}, ] def funFitness(genes, dados): peso = 0 valor = 0 for i in range(len(genes)): #Adiciona os itens na bolsa if (genes[i]==1): peso += dados[i]['peso'] valor += dados[i]['valor'] if (peso > 10): return 0 return valor ag = AlgoritmoGenetico(dados, funcaoFitness=funFitness) ag.executa() print(ag.populacao) #-------------------------------------------------------# # ag.py # #-------------------------------------------------------# import random class AlgoritmoGenetico: def __init__(self, dados, tamPopulacao = 10, limGeracoes = 50, probMutacao=5, funcaoFitness = None, maiorFitness = True): #Atributos self.dados = dados self.tamPopulacao = tamPopulacao self.limGeracoes = limGeracoes self.funcaoFitness = funcaoFitness self.maiorFitness = maiorFitness self.probMutacao = probMutacao self.populacao = [] self.geracao = 1 #Funções que podem ser alteradas self.funMutacao = self.mutacao self.funSelecao = self.selecao self.funCrossover = self.crossover self.funCriaIndividuo = self.criaIndividuo def executa(self): """ Executa o código """ self.criaPopulacaoInicial() def criaPopulacaoInicial(self): """ Cria a primeira população """ for i in range(self.tamPopulacao): cromossomo = {'fitness': 0, 'genes': self.funCriaIndividuo(self.dados)} cromossomo['fitness'] = self.funcaoFitness(cromossomo['genes'], self.dados) self.populacao.append(cromossomo) def criaIndividuo(self, dados): """ Cria um novo individuo """ gene = [] for i in range(len(dados)): gene.append(random.randint(0,1)) return gene def crossover(self, pai1, pai2): """ Cruza os genes dos pais gerando 2 filhos """ pass def selecao(self, populacao): """ Realiza a escolha de um elemento para cruzar """ pass def mutacao(self, genes): """ Realiza a mutação de um item """ pass def melhorResultado(self): """ Retorna o melhor resultado """ pass