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

Faça como eu fiz: construindo um sistema inteligente de recomendação

import heapq

Classe Produto

class Produto:
def init(self, nome, categoria, probabilidade):
self.nome = nome
self.categoria = categoria
self.probabilidade = probabilidade # Valor entre 0 e 1

def __repr__(self):
    return f"{self.nome} ({self.categoria})"

Classe que implementa o algoritmo A*

class AStarRecommendation:

def __init__(self):
    self.produtos = {}
    self.grafo = {}

# Adiciona um produto
def adicionar_produto(self, produto):
    self.produtos[produto.nome] = produto
    self.grafo[produto.nome] = {}

# Conecta todos os produtos entre si
def conectar_produtos(self):
    nomes = list(self.produtos.keys())

    for origem in nomes:
        for destino in nomes:
            if origem != destino:
                # Custo baseado na diferença de probabilidade
                custo = abs(
                    self.produtos[origem].probabilidade -
                    self.produtos[destino].probabilidade
                )
                self.grafo[origem][destino] = custo

# Heurística baseada na probabilidade de conversão
def heuristica(self, produto_atual, produto_objetivo):
    return abs(
        self.produtos[produto_objetivo].probabilidade -
        self.produtos[produto_atual].probabilidade
    )

# Algoritmo A*
def a_estrela(self, inicio, objetivo):

    fila = []
    heapq.heappush(fila, (0, inicio))

    veio_de = {}
    custo = {inicio: 0}

    while fila:

        _, atual = heapq.heappop(fila)

        if atual == objetivo:
            caminho = [atual]

            while atual in veio_de:
                atual = veio_de[atual]
                caminho.append(atual)

            caminho.reverse()
            return caminho

        for vizinho, peso in self.grafo[atual].items():

            novo_custo = custo[atual] + peso

            if vizinho not in custo or novo_custo < custo[vizinho]:
                custo[vizinho] = novo_custo

                prioridade = novo_custo + self.heuristica(vizinho, objetivo)

                heapq.heappush(fila, (prioridade, vizinho))

                veio_de[vizinho] = atual

    return None

==========================

Teste do sistema

==========================

sistema = AStarRecommendation()

produtos = [
Produto("Notebook", "Eletrônicos", 0.90),
Produto("Mouse", "Periféricos", 0.75),
Produto("Teclado", "Periféricos", 0.70),
Produto("Monitor", "Eletrônicos", 0.80),
Produto("Headset", "Áudio", 0.65)
]

for produto in produtos:
sistema.adicionar_produto(produto)

sistema.conectar_produtos()

caminho = sistema.a_estrela("Notebook", "Headset")

print("Melhor caminho encontrado:")
print(" -> ".join(caminho))

1 resposta

Olá, Leila! Como vai?

Parabéns pela realização das atividades!

Vi que você apresentou um exemplo criativo de aplicação do algoritmo A*, estruturou uma lógica de recomendação baseada em probabilidade de conversão e mostrou como conectar diferentes produtos em um grafo para encontrar o melhor caminho. Esse conjunto demonstra domínio conceitual, aplicação prática e clareza na implementação, pontos fundamentais para compreender como heurísticas podem apoiar sistemas de recomendação.

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

  • Expandir o grafo: adicionar mais produtos e categorias para simular cenários reais de recomendação.
  • Visualizar resultados: criar representações gráficas do grafo e dos caminhos para facilitar a interpretação.
  • Testar diferentes heurísticas: variar a função de avaliação para observar mudanças nos caminhos encontrados.

Ah uma pergunta: O que você considera mais interessante nesse processo, perceber como o algoritmo encontra o caminho ótimo ou imaginar como essa lógica pode ser aplicada em sistemas reais de recomendação de produtos e serviços?

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!