0
respostas

Desafio - "Fundamentos de IA: explorando a estrutura e abordagens de sistemas inteligentes".

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}) - Conversao: {self.probabilidade_conversao}"


import heapq

class AStarRecommendation:
    def __init__(self, produtos):
        self.produtos = produtos
        self.grafo = self._criar_grafo()

    def _criar_grafo(self):
        grafo = {}
        for produto in self.produtos:
            grafo[produto] = []
            for outro_produto in self.produtos:
                if produto != outro_produto:
                    # Custo é a inversa da média de conversão
                    custo = 1 / outro_produto.probabilidade_conversao
                    grafo[produto].append((outro_produto, custo))
        return grafo

    def heuristica(self, produto_atual, produto_destino):
        # Quanto maior a probabilidade de conversão do destino, menor a heurística
        return 1 / (produto_destino.probabilidade_conversao + 0.0001)

    def encontrar_caminho(self, inicio, destino):
        fronteira = []
        heapq.heappush(fronteira, (0, [inicio]))
        visitados = set()

        while fronteira:
            custo_total, caminho = heapq.heappop(fronteira)
            atual = caminho[-1]

            if atual == destino:
                return caminho

            if atual in visitados:
                continue
            visitados.add(atual)

            for vizinho, custo in self.grafo[atual]:
                if vizinho not in visitados:
                    novo_caminho = caminho + [vizinho]
                    nova_heuristica = self.heuristica(vizinho, destino)
                    novo_custo_total = custo_total + custo + nova_heuristica
                    heapq.heappush(fronteira, (novo_custo_total, novo_caminho))

        return None

if __name__ == "__main__":
    # Criando produtos
    p1 = Produto("Notebook Gamer", "Eletronicos", 0.3)
    p2 = Produto("Mouse RGB", "Acessorios", 0.5)
    p3 = Produto("Teclado Mecanico", "Acessorios", 0.6)
    p4 = Produto("Cadeira Gamer", "Moveis", 0.4)
    p5 = Produto("Monitor 4K", "Eletronicos", 0.7)

    produtos = [p1, p2, p3, p4, p5]

    recomendador = AStarRecommendation(produtos)
    caminho = recomendador.encontrar_caminho(p1, p5)

    print("Melhor caminho de recomendacao:")
    for produto in caminho:
        print(f" - {produto}")

Output
Insira aqui a descrição dessa imagem para ajudar na acessibilidade