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!

1
resposta

[Dúvida] Faça como eu fiz construindo um sistema inteligente de recomendação

class Produto:
    def __init__(self, nome, categoria, probabilidade):
        self.nome = nome
        self.categoria = categoria
        self.probabilidade = probabilidade

    def __repr__(self):
        return f"{self.nome} ({self.categoria}, prob={self.probabilidade})"
        
        
    import heapq

class AStarRecommendation:
    def __init__(self, produtos):
        # Grafo simplificado: cada produto conectado a todos os outros
        self.produtos = produtos
        self.grafo = {p: [q for q in produtos if q != p] for p in produtos}

    def heuristica(self, produto, objetivo):
        # Quanto maior a probabilidade de conversão, menor o "custo"
        return 1 - produto.probabilidade

    def a_star(self, inicio, objetivo):
        # Estruturas de controle
        fronteira = [(0, inicio)]
        custos = {inicio: 0}
        caminhos = {inicio: None}

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

            if atual == objetivo:
                # Reconstruir caminho
                caminho = []
                while atual:
                    caminho.append(atual)
                    atual = caminhos[atual]
                return list(reversed(caminho))

            for vizinho in self.grafo[atual]:
                novo_custo = custos[atual] + (1 - vizinho.probabilidade)
                if vizinho not in custos or novo_custo < custos[vizinho]:
                    custos[vizinho] = novo_custo
                    prioridade = novo_custo + self.heuristica(vizinho, objetivo)
                    heapq.heappush(fronteira, (prioridade, vizinho))
                    caminhos[vizinho] = atual

        return None
        
    
    # Produtos de exemplo
p1 = Produto("Notebook Gamer", "Computadores", 0.8)
p2 = Produto("Mouse Wireless", "Periféricos", 0.6)
p3 = Produto("Monitor 4K", "Periféricos", 0.7)
p4 = Produto("Headset Bluetooth", "Áudio", 0.9)


sistema = AStarRecommendation([p1, p2, p3, p4])


caminho = sistema.a_star(p1, p4)
print("Melhor caminho de recomendação:", caminho)
1 resposta

Olá, Penha! Tudo bem?

A sua atividade: construindo um sistema inteligente de recomendação demonstra um excelente domínio técnico ao aplicar o algoritmo para além dos cenários tradicionais de mapas e rotas. Fica claro como a lógica de inverter a probabilidade de conversão funcionou bem como custo e heurística, permitindo que o sistema priorize produtos com maior chance de engajamento na ordenação do heap.

Uma dica importante sobre o assunto é expandir o cálculo da heurística combinando a similaridade de categorias ao custo atual.

Como você planeja ajustar a função de custo se decidir incluir a disponibilidade de estoque dos produtos como um critério de desempate na recomendação?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!