#------------------------------#
# 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
Comments
0 B
|👍
/👎