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

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

import heapq

class Produto:
def init(self, nome, categoria, probabilidade_conversao):
self.nome = nome
self.categoria = categoria
self.probabilidade_conversao = probabilidade_conversao

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

def heuristica(produto):
# Quanto maior a chance de compra, melhor a recomendação
return -produto.probabilidade_conversao

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:
        conexoes = []

        for outro_produto in self.produtos:
            if outro_produto != produto:
                conexoes.append(outro_produto)

        grafo[produto] = conexoes

    return grafo

def a_star(self, inicio, objetivo):
    fila_prioridade = []

    heapq.heappush(
        fila_prioridade,
        (self.heuristica(inicio), 0, inicio)
    )

    visitados = set()
    caminhos = {}

    while fila_prioridade:
        _, custo, atual = heapq.heappop(fila_prioridade)

        if atual in visitados:
            continue

        visitados.add(atual)

        if atual == objetivo:
            break

        for vizinho in self.grafoif vizinho not in visitados:
                h = self.heuristica(vizinho)

                heapq.heappush(
                    fila_prioridade,
                    (custo + 1 + h, custo + 1, vizinho)
                )

                caminhos[vizinho] = atual

    caminho = []
    produto_atual = objetivo

    while produto_atual in caminhos:
        caminho.insert(0, produto_atual)
        produto_atual = caminhos[produto_atual]

    return caminho

Livros da loja virtual

produtos = [
Produto("Python para Iniciantes", "Tecnologia", 0.92),
Produto("Inteligência Artificial", "Tecnologia", 0.88),
Produto("Banco de Dados", "Tecnologia", 0.75),
Produto("Gestão de Projetos", "Negócios", 0.65)
]

recomendador = AStarRecommendation(produtos, heuristica)

inicio =