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!

1
resposta

[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)
1 resposta

Olá, Tony! Como vai?

Parabéns pela resolução da atividade!

Fique à vontade para registrar cada atividade aqui, sempre daremos feedback.

Vi que você explorou o A* para recomendação de produtos com Python, utilizou muito bem o heapq para gerenciar a fila de prioridade e ainda compreendeu a importância da heurística para guiar o algoritmo em direção ao objetivo.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Modelagem: definir claramente o espaço de estados e transições para evitar ambiguidades.
  • Heurística: ajustar a função para refletir melhor o critério de recomendação (probabilidade de conversão, relevância, etc.).
  • Validação: testar com diferentes conjuntos de produtos e categorias para verificar se o caminho recomendado faz sentido em cenários variados.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: você prefere continuar praticando com heurísticas simples para consolidar fundamentos ou acha mais interessante avançar para heurísticas probabilísticas que integrem aprendizado de máquina nos critérios de recomendação?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!