import heapq
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})"
def heuristica(produto):
# Quanto maior a chance de compra, melhor a recomendação
return -produto.probabilidade_conversao
class AStarRecommendation:
def init(self, produtos, heuristica):
self.produtos = produtos
self.heuristica = heuristica
self.grafo = self.criar_grafo()
def criar_grafo(self):
grafo = {}
for produto in self.produtos:
conexoes = []
for outro_produto in self.produtos:
if outro_produto != produto:
conexoes.append(outro_produto)
grafo[produto] = conexoes
return grafo
def a_star(self, inicio, objetivo):
fila_prioridade = []
heapq.heappush(
fila_prioridade,
(self.heuristica(inicio), 0, inicio)
)
visitados = set()
caminhos = {}
while fila_prioridade:
_, custo, atual = heapq.heappop(fila_prioridade)
if atual in visitados:
continue
visitados.add(atual)
if atual == objetivo:
break
for vizinho in self.grafoif vizinho not in visitados:
h = self.heuristica(vizinho)
heapq.heappush(
fila_prioridade,
(custo + 1 + h, custo + 1, vizinho)
)
caminhos[vizinho] = atual
caminho = []
produto_atual = objetivo
while produto_atual in caminhos:
caminho.insert(0, produto_atual)
produto_atual = caminhos[produto_atual]
return caminho
Livros da loja virtual
produtos = [
Produto("Python para Iniciantes", "Tecnologia", 0.92),
Produto("Inteligência Artificial", "Tecnologia", 0.88),
Produto("Banco de Dados", "Tecnologia", 0.75),
Produto("Gestão de Projetos", "Negócios", 0.65)
]
recomendador = AStarRecommendation(produtos, heuristica)
inicio =