CarlosWGama

AG - Aula 1

Jan 15th, 2020
155
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #------------------------------#
  2. #               main.py        #
  3. #------------------------------#
  4. from ag import AlgoritmoGenetico
  5.  
  6. dados = [
  7.     {'item': 'Lapis', 'peso': 1, 'valor': 2},
  8.     {'item': 'Borracha', 'peso': 1, 'valor': 1},
  9.     {'item': 'Caderno', 'peso': 3, 'valor': 4},
  10.     {'item': 'Livro', 'peso': 4, 'valor': 5},
  11.     {'item': 'Caneta', 'peso': 1, 'valor': 2},
  12.     {'item': 'Cálculadora', 'peso': 3, 'valor': 3},
  13. ]
  14.  
  15. def funFitness(genes, dados):
  16.     peso = 0
  17.     valor = 0
  18.    
  19.     for i in range(len(genes)):
  20.         #Adiciona os itens na bolsa
  21.         if (genes[i]==1):
  22.             peso += dados[i]['peso']
  23.             valor += dados[i]['valor']
  24.    
  25.     if (peso > 10):
  26.         return 0
  27.     return valor
  28.  
  29. ag = AlgoritmoGenetico(dados, funcaoFitness=funFitness)
  30. ag.executa()
  31. print(ag.populacao)
  32.  
  33. #-------------------------------------------------------#
  34. #                 ag.py                                 #
  35. #-------------------------------------------------------#
  36. import random
  37.  
  38. class AlgoritmoGenetico:
  39.  
  40.     def __init__(self, dados, tamPopulacao = 10, limGeracoes = 50, probMutacao=5, funcaoFitness = None, maiorFitness = True):
  41.         #Atributos
  42.         self.dados = dados
  43.         self.tamPopulacao = tamPopulacao
  44.         self.limGeracoes = limGeracoes
  45.         self.funcaoFitness = funcaoFitness
  46.         self.maiorFitness = maiorFitness
  47.         self.probMutacao = probMutacao
  48.         self.populacao = []
  49.         self.geracao = 1
  50.        
  51.         #Funções que podem ser alteradas
  52.         self.funMutacao = self.mutacao
  53.         self.funSelecao = self.selecao
  54.         self.funCrossover = self.crossover
  55.         self.funCriaIndividuo = self.criaIndividuo
  56.        
  57.  
  58.     def executa(self):
  59.         """ Executa o código """
  60.         self.criaPopulacaoInicial()
  61.        
  62.     def criaPopulacaoInicial(self):
  63.         """ Cria a primeira população """
  64.         for i in range(self.tamPopulacao):
  65.             cromossomo = {'fitness': 0, 'genes': self.funCriaIndividuo(self.dados)}
  66.             cromossomo['fitness'] = self.funcaoFitness(cromossomo['genes'], self.dados)
  67.             self.populacao.append(cromossomo)
  68.            
  69.  
  70.     def criaIndividuo(self, dados):
  71.         """ Cria um novo individuo """
  72.         gene = []
  73.         for i in range(len(dados)):
  74.             gene.append(random.randint(0,1))
  75.         return gene
  76.  
  77.     def crossover(self, pai1, pai2):
  78.         """ Cruza os genes dos pais gerando 2 filhos """
  79.         pass
  80.  
  81.     def selecao(self, populacao):
  82.         """ Realiza a escolha de um elemento para cruzar """
  83.         pass
  84.  
  85.     def mutacao(self, genes):
  86.         """ Realiza a mutação de um item """
  87.         pass
  88.  
  89.     def melhorResultado(self):
  90.         """ Retorna o melhor resultado """
  91.         pass
RAW Paste Data