CarlosWGama icon

AG - Aula 1

CarlosWGama | PRO | 01/15/20 11:35:11 PM UTC | 0 ⭐ | 635 👁️ | Never ⏰ | []
Python |

2.76 KB

|

None

|

0 👍

/

0 👎

#------------------------------# 
#               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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎