Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #------------------------------#
- # 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement