- Classe Produto
Cada produto terá:
Nome
Categoria
Probabilidade de conversão
class Produto:
def init(self, nome, categoria, probabilidade_conversao):
self.nome = nome
self.categoria = categoria
self.probabilidade_conversao = probabilidade_conversao
def __repr__(self):
return self.nome
- Classe do Sistema de Recomendação com A*
import heapq
class AStarRecommendation:
def init(self):
self.grafo = {}
def adicionar_produto(self, produto):
if produto not in self.grafo:
self.grafo[produto] = []
def conectar_produtos(self):
produtos = list(self.grafo.keys())
for produto in produtos:
for outro_produto in produtos:
if produto != outro_produto:
custo = 1 - outro_produto.probabilidade_conversao
self.grafo[produto].append((outro_produto, custo))
def heuristica(self, produto):
return 1 - produto.probabilidade_conversao
def a_star(self, inicio, objetivo):
fila = []
heapq.heappush(fila, (0, inicio))
veio_de = {}
custo_ate_agora = {}
veio_de[inicio] = None
custo_ate_agora[inicio] = 0
while fila:
_, atual = heapq.heappop(fila)
if atual == objetivo:
break
for vizinho, custo in self.grafo[atual]:
novo_custo = custo_ate_agora[atual] + custo
if (vizinho not in custo_ate_agora or
novo_custo < custo_ate_agora[vizinho]):
custo_ate_agora[vizinho] = novo_custo
prioridade = novo_custo + self.heuristica(vizinho)
heapq.heappush(fila, (prioridade, vizinho))
veio_de[vizinho] = atual
caminho = []
atual = objetivo
while atual is not None:
caminho.append(atual)
atual = veio_de.get(atual)
caminho.reverse()
return caminho
- Criando os produtos
produto1 = Produto("Notebook", "Eletrônicos", 0.90)
produto2 = Produto("Mouse Gamer", "Periféricos", 0.80)
produto3 = Produto("Teclado Mecânico", "Periféricos", 0.85)
produto4 = Produto("Monitor", "Eletrônicos", 0.75) - Montando o sistema
sistema = AStarRecommendation()
sistema.adicionar_produto(produto1)
sistema.adicionar_produto(produto2)
sistema.adicionar_produto(produto3)
sistema.adicionar_produto(produto4)
sistema.conectar_produtos()
5. Testando a recomendação
caminho = sistema.a_star(produto1, produto4)
print("Melhor caminho recomendado:")
for produto in caminho:
print(produto.nome)
Saída esperada
Melhor caminho recomendado:
Notebook
Monitor
Explicação simples
Imagine que cada produto é uma cidade em um mapa.
O algoritmo A* tenta encontrar o caminho mais interessante para levar o cliente de um produto até outro.
A heurística utilizada é:
heuristica = 1 - probabilidade_de_conversao
Isso significa que:
Probabilidade de Conversão Heurística
0,90 0,10
0,80 0,20
0,75 0,25
Quanto maior a probabilidade de conversão, menor o custo, tornando aquele produto mais atrativo para ser recomendado.
Checklist da atividade
✅ Criada a classe Produto
✅ Criada a classe AStarRecommendation
✅ Implementado um grafo simplificado
✅ Implementado o algoritmo A*
✅ Criada uma heurística baseada na probabilidade de conversão
✅ Inseridos produtos de exemplo
✅ Testado o melhor caminho entre dois produtos
Esse exemplo atende aos requisitos da atividade e demonstra o uso do algoritmo A* em um sistema simples de recomendação de produtos.