Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

0
respostas

[Projeto] Contexto dos meus estudos: IA, pensamento computacional e Python

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)