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)