Olá, pessoal!
Estou estudando pensamento computacional, IA e sistemas inteligentes, e estou tentando aplicar os conceitos diretamente nos meus projetos (automação, recomendações, uso de LLMs e Python).
Neste curso específico, quero usar o fórum como parte do meu processo de aprendizado: registrar o que implementei, tirar dúvidas sobre trechos de código e validar se estou modelando os problemas da forma correta (espaço de estados, algoritmos de busca, redes bayesianas, etc.).
Sempre que eu postar aqui, vou:
- descrever o contexto do exercício ou projeto (curso, aula, objetivo);
- colar o trecho de código ou algoritmo em que tenho dúvida;
- explicar o que eu já tentei fazer e qual resultado estou obtendo;
- perguntar se há uma forma melhor ou mais idiomática de resolver, ou se minha interpretação dos conceitos (probabilidade, A*, grafos, redes bayesianas, LLMs) está correta.
Abaixo está o código que estou usando no exercício de recomendação com A* e o resultado que obtive:
import heapq
class Produto:
def __init__(self, nome, categoria, conversao_probabilidade):
self.nome = nome
self.categoria = categoria
self.conversao_probabilidade = conversao_probabilidade
def __repr__(self):
return f"{self.nome} ({self.categoria})"
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:
grafo[produto] = [p for p in self.produtos if p != produto]
return grafo
def a_star(self, inicio, objetivo):
fila_prioridade = []
heapq.heappush(fila_prioridade, (0 + self.heuristica(inicio), 0, inicio))
visitados = set()
caminhos = {}
while fila_prioridade:
_, g, atual = heapq.heappop(fila_prioridade)
if atual in visitados:
continue
visitados.add(atual)
if atual == objetivo:
break
for vizinho in self.grafo[atual]:
if vizinho not in visitados:
h = self.heuristica(vizinho)
heapq.heappush(fila_prioridade, (g + 1 + h, g + 1, vizinho))
caminhos[vizinho] = atual
caminho = []
produto = objetivo
while produto in caminhos:
caminho.insert(0, produto)
produto = caminhos[produto]
return caminho
def heuristica(produto):
return -produto.conversao_probabilidade
produtos = [
Produto("Produto A", "Categoria 1", 0.9),
Produto("Produto B", "Categoria 1", 0.8),
Produto("Produto C", "Categoria 2", 0.7),
Produto("Produto D", "Categoria 2", 0.6),
]
recomendador = AStarRecommendation(produtos, heuristica)
inicio = produtos # Produto A
objetivo = produtos # Produto C[3]
caminho_recomendado = recomendador.a_star(inicio, objetivo)
print("Caminho recomendado:")
for p in caminho_recomendado:
print(p)
Saída no terminal:
Caminho recomendado:
Produto B (Categoria 1)
Produto C (Categoria 2)