Estrutura básica
python
class Produto:
def init(self, nome, categoria, prob_conversao):
self.nome = nome
self.categoria = categoria
self.prob_conversao = prob_conversao # 0 a 1
class AStarRecommendation:
- grafo: dicionário produto -> lista de (vizinho, custo)
- produtos: dicionário nome -> objeto Produto
Passos principais
Etapa O que faz
Criar produtos Instanciar objetos com nome, categoria e probabilidade de conversão
Construir grafo Conectar produtos entre si (grafo completo)
Heurística h = 1 - prob_conversao (quanto maior a conversão, menor o h)
Algoritmo A* Encontra o melhor caminho entre dois produtos
Código essencial do A*
python
def encontrar_melhor_caminho(self, inicio, objetivo):
fronteira = [(0, inicio)] # (custo_estimado, produto)
custo_ate_agora = {inicio: 0}
caminho = {inicio: None}while fronteira:
produto_atual = heapq.heappop(fronteira)[1]
if produto_atual == objetivo:
return reconstruir_caminho(caminho, inicio, objetivo)
for vizinho, custo in self.grafo[produto_atual]:
novo_custo = custo_ate_agora[produto_atual] + custo
if vizinho not in custo_ate_agora or novo_custo < custo_ate_agora[vizinho]:
custo_ate_agora[vizinho] = novo_custo
caminho[vizinho] = produto_atual
estimativa = novo_custo + self.heuristica(vizinho, objetivo)
heapq.heappush(fronteira, (estimativa, vizinho))
Exemplo de uso
python
sistema = AStarRecommendation()
Adicionar produtos
sistema.adicionar_produto(Produto("iPhone", "Eletrônicos", 0.75))
sistema.adicionar_produto(Produto("Fone Bluetooth", "Acessórios", 0.60))
Conectar produtos
sistema.conectar_todos()
Encontrar caminho
caminho = sistema.encontrar_melhor_caminho("iPhone", "Fone Bluetooth")
Saída: ['iPhone', 'Fone Bluetooth']
Resumo visual do funcionamento
text
Produto A (h=0.25) ----custo----> Produto B (h=0.30)
│ │
└────────── A* ────────────────────┘
↓
f(n) = g(n) + h(n)
Onde: g = custo real | h = 1 - prob_conversao
Principais vantagens
✅ Busca informada (heurística guia o caminho)
✅ Produtos com alta conversão são priorizados
✅ Encontra o caminho mais curto/eficiente
✅ Permite personalização por usuário