class Produto:
def __init__(self, nome, categoria, probabilidade_conversao):
self.nome = nome
self.categoria = categoria
self.probabilidade_conversao = probabilidade_conversao
def __repr__(self):
return f"{self.nome} ({self.categoria}) - Conversao: {self.probabilidade_conversao}"
import heapq
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] = []
for outro_produto in self.produtos:
if produto != outro_produto:
# Custo é a inversa da média de conversão
custo = 1 / outro_produto.probabilidade_conversao
grafo[produto].append((outro_produto, custo))
return grafo
def heuristica(self, produto_atual, produto_destino):
# Quanto maior a probabilidade de conversão do destino, menor a heurística
return 1 / (produto_destino.probabilidade_conversao + 0.0001)
def encontrar_caminho(self, inicio, destino):
fronteira = []
heapq.heappush(fronteira, (0, [inicio]))
visitados = set()
while fronteira:
custo_total, caminho = heapq.heappop(fronteira)
atual = caminho[-1]
if atual == destino:
return caminho
if atual in visitados:
continue
visitados.add(atual)
for vizinho, custo in self.grafo[atual]:
if vizinho not in visitados:
novo_caminho = caminho + [vizinho]
nova_heuristica = self.heuristica(vizinho, destino)
novo_custo_total = custo_total + custo + nova_heuristica
heapq.heappush(fronteira, (novo_custo_total, novo_caminho))
return None
if __name__ == "__main__":
# Criando produtos
p1 = Produto("Notebook Gamer", "Eletronicos", 0.3)
p2 = Produto("Mouse RGB", "Acessorios", 0.5)
p3 = Produto("Teclado Mecanico", "Acessorios", 0.6)
p4 = Produto("Cadeira Gamer", "Moveis", 0.4)
p5 = Produto("Monitor 4K", "Eletronicos", 0.7)
produtos = [p1, p2, p3, p4, p5]
recomendador = AStarRecommendation(produtos)
caminho = recomendador.encontrar_caminho(p1, p5)
print("Melhor caminho de recomendacao:")
for produto in caminho:
print(f" - {produto}")
Output