Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

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

Para responder à atividade, optei por implementar a solução em Python, criando uma classe Produto e uma classe AStarRecommendation. A proposta foi representar os produtos como nós de um grafo simplificado e aplicar o algoritmo A* usando uma heurística baseada na probabilidade de conversão. Assim, produtos com maior chance de compra passam a ser priorizados na recomendação.

import heapq

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

    def __repr__(self):
        return f"{self.nome} ({self.categoria}, conversão={self.conversao_probabilidade})"


class AStarRecommendation:
    def __init__(self, produtos):
        self.produtos = produtos
        self.grafo = self.criar_grafo()

    def criar_grafo(self):
        grafo = {}
        for produto in self.produtos:
            grafo[produto] = [p for p in self.produtos if p != produto]
        return grafo

    def heuristica(self, produto):
        # Quanto maior a conversão, mais interessante o produto
        return -produto.conversao_probabilidade

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

        custo_g = {inicio: 0}
        veio_de = {}
        visitados = set()

        while fila_prioridade:
            _, g_atual, _, atual = heapq.heappop(fila_prioridade)

            if atual in visitados:
                continue

            visitados.add(atual)

            if atual == objetivo:
                return self.reconstruir_caminho(veio_de, atual)

            for vizinho in self.grafo[atual]:
                novo_g = g_atual + 1

                if vizinho not in custo_g or novo_g < custo_g[vizinho]:
                    custo_g[vizinho] = novo_g
                    veio_de[vizinho] = atual
                    contador += 1
                    f = novo_g + self.heuristica(vizinho)
                    heapq.heappush(fila_prioridade, (f, novo_g, contador, vizinho))

        return []

    def reconstruir_caminho(self, veio_de, atual):
        caminho = [atual]
        while atual in veio_de:
            atual = veio_de[atual]
            caminho.insert(0, atual)
        return caminho


produtos = [
    Produto("Notebook", "Eletrônicos", 0.90),
    Produto("Mouse Gamer", "Eletrônicos", 0.75),
    Produto("Teclado Mecânico", "Eletrônicos", 0.80),
    Produto("Cadeira Escritório", "Móveis", 0.65),
]

recomendador = AStarRecommendation(produtos)

inicio = produtos[0]      # Notebook
objetivo = produtos[2]    # Teclado Mecânico

caminho = recomendador.a_star(inicio, objetivo)

print("Caminho recomendado:")
for produto in caminho:
    print(produto)

Execução

Minha reflexão final é que essa atividade mostrou de forma prática como um algoritmo de busca pode ser adaptado para recomendação de produtos. A heurística baseada na probabilidade de conversão faz sentido porque ajuda a priorizar itens com maior chance de interesse ou compra. Assim, o A* deixa de ser apenas um algoritmo teórico e passa a ser visto como uma ferramenta útil em aplicações do dia a dia.

1 resposta
solução!

Ei! Tudo bem, Leandro?

Mandou muito bem na solução!

Sua implementação mostra um entendimento bem sólido, a modelagem com classes ficou organizada, e a forma como você usou a heurística baseada na probabilidade de conversão foi bem certeira com o objetivo do problema.

A reflexão trouxe um plus, conectando bem a teoria com a prática, é que buscamos nos estudos, não é mesmo?

Excelente trabalho, parabéns pela dedicação nos estudos e continue assim.

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