Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

0
respostas

Faça como eu fiz: construindo um sistema inteligente de recomendação

import heapq
class Produto:
def init(self, nome, categoria, probabilidade_conversao):
self.nome = nome
self.categoria = categoria
self.probabilidade_conversao = probabilidade_conversao

def __repr__(self):
    return f"{self.nome} ({self.categoria})"

class AStarRecommendation:
def init(self):
self.produtos = {}
self.grafo = {}

def adicionar_produto(self, produto):
    self.produtos[produto.nome] = produto

def construir_grafo(self):
    """
    Grafo simplificado:
    Cada produto se conecta a todos os outros.
    """
    for nome1 in self.produtos:
        self.grafo[nome1] = {}

        for nome2 in self.produtos:
            if nome1 != nome2:
                produto_destino = self.produtos[nome2]

                custo = 1 - produto_destino.probabilidade_conversao

                self.grafo[nome1][nome2] = custo

def heuristica(self, produto_nome):
    produto = self.produtos[produto_nome]

    return 1 - produto.probabilidade_conversao

def astar(self, inicio, objetivo):
    fila = []
    heapq.heappush(fila, (0, inicio))

    veio_de = {}
    g_score = {produto: float('inf') for produto in self.produtos}
    g_score[inicio] = 0

    f_score = {produto: float('inf') for produto in self.produtos}
    f_score[inicio] = self.heuristica(inicio)

    while fila:
        _, atual = heapq.heappop(fila)

        if atual == objetivo:
            caminho = [atual]

            while atual in veio_de:
                atual = veio_de[atual]
                caminho.append(atual)

            caminho.reverse()
            return caminho

        for vizinho, custo in self.grafo[atual].items():
            g_temporario = g_score[atual] + custo

            if g_temporario < g_score[vizinho]:
                veio_de[vizinho] = atual
                g_score[vizinho] = g_temporario

                f_score[vizinho] = (
                    g_temporario + self.heuristica(vizinho)
                )

                heapq.heappush(
                    fila,
                    (f_score[vizinho], vizinho)
                )

    return None

produto1 = Produto("Notebook Gamer", "Eletrônicos", 0.90)
produto2 = Produto("Mouse Gamer", "Periféricos", 0.85)
produto3 = Produto("Teclado Mecânico", "Periféricos", 0.80)
produto4 = Produto("Headset", "Áudio", 0.75)
produto5 = Produto("Monitor", "Eletrônicos", 0.88)

sistema = AStarRecommendation()

for produto in [produto1, produto2, produto3, produto4, produto5]:
sistema.adicionar_produto(produto)

sistema.construir_grafo()

inicio = "Notebook Gamer"
objetivo = "Headset"

caminho = sistema.astar(inicio, objetivo)

print("Melhor caminho encontrado:")
print(" -> ".join(caminho))

Melhor caminho encontrado:
Notebook Gamer -> Headset