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

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

  1. Classe Produto

Cada produto terá:

Nome
Categoria
Probabilidade de conversão
class Produto:
def init(self, nome, categoria, probabilidade_conversao):
self.nome = nome
self.categoria = categoria
self.probabilidade_conversao = probabilidade_conversao

def __repr__(self):
    return self.nome
  1. Classe do Sistema de Recomendação com A*
    import heapq

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

def adicionar_produto(self, produto):
    if produto not in self.grafo:
        self.grafo[produto] = []

def conectar_produtos(self):
    produtos = list(self.grafo.keys())

    for produto in produtos:
        for outro_produto in produtos:
            if produto != outro_produto:
                custo = 1 - outro_produto.probabilidade_conversao
                self.grafo[produto].append((outro_produto, custo))

def heuristica(self, produto):
    return 1 - produto.probabilidade_conversao

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

    veio_de = {}
    custo_ate_agora = {}

    veio_de[inicio] = None
    custo_ate_agora[inicio] = 0

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

        if atual == objetivo:
            break

        for vizinho, custo in self.grafo[atual]:
            novo_custo = custo_ate_agora[atual] + custo

            if (vizinho not in custo_ate_agora or
                    novo_custo < custo_ate_agora[vizinho]):

                custo_ate_agora[vizinho] = novo_custo

                prioridade = novo_custo + self.heuristica(vizinho)

                heapq.heappush(fila, (prioridade, vizinho))

                veio_de[vizinho] = atual

    caminho = []
    atual = objetivo

    while atual is not None:
        caminho.append(atual)
        atual = veio_de.get(atual)

    caminho.reverse()

    return caminho
  1. Criando os produtos
    produto1 = Produto("Notebook", "Eletrônicos", 0.90)
    produto2 = Produto("Mouse Gamer", "Periféricos", 0.80)
    produto3 = Produto("Teclado Mecânico", "Periféricos", 0.85)
    produto4 = Produto("Monitor", "Eletrônicos", 0.75)
  2. Montando o sistema
    sistema = AStarRecommendation()

sistema.adicionar_produto(produto1)
sistema.adicionar_produto(produto2)
sistema.adicionar_produto(produto3)
sistema.adicionar_produto(produto4)

sistema.conectar_produtos()
5. Testando a recomendação
caminho = sistema.a_star(produto1, produto4)

print("Melhor caminho recomendado:")
for produto in caminho:
print(produto.nome)
Saída esperada
Melhor caminho recomendado:
Notebook
Monitor
Explicação simples

Imagine que cada produto é uma cidade em um mapa.

O algoritmo A* tenta encontrar o caminho mais interessante para levar o cliente de um produto até outro.

A heurística utilizada é:

heuristica = 1 - probabilidade_de_conversao

Isso significa que:

Probabilidade de Conversão Heurística
0,90 0,10
0,80 0,20
0,75 0,25

Quanto maior a probabilidade de conversão, menor o custo, tornando aquele produto mais atrativo para ser recomendado.

Checklist da atividade

✅ Criada a classe Produto

✅ Criada a classe AStarRecommendation

✅ Implementado um grafo simplificado

✅ Implementado o algoritmo A*

✅ Criada uma heurística baseada na probabilidade de conversão

✅ Inseridos produtos de exemplo

✅ Testado o melhor caminho entre dois produtos

Esse exemplo atende aos requisitos da atividade e demonstra o uso do algoritmo A* em um sistema simples de recomendação de produtos.