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)
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.