Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

import heapq

#---1 - Definir los productos:
"""
Cada producto tiene un nombre, categoría y probabilidad de conversión.
Crea una clase Producto para representar estos atributos.
"""

==================== CLASE PRODUCTO ====================

class Producto:

def __init__(self, nombre, categoria, probabilidad_conversion):
    self.nombre = nombre
    self.categoria = categoria
    self.probabilidad_conversion = probabilidad_conversion

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

#---2 - Crear el sistema de recomendación:
"""
Desarrolla una clase AStarRecommendation que implemente:
Un grafo simplificado donde cada producto se conecta a todos los demás.
El algoritmo A* para calcular el mejor camino entre dos productos.
"""

==================== CLASE SISTEMA DE RECOMENDACIÓN ====================

class AStarRecommendation:

def __init__(self, productos, heuristica):
    self.productos = productos
    self.heuristica = heuristica  # Función que evalúa la calidad del producto
    self.grafo = self.crear_grafo()

def crear_grafo(self):

    grafo = {}
    for producto in self.productos:
        # Conectamos cada producto con todos los demás (excepto consigo mismo)
        grafo[producto] = [p for p in self.productos if p != producto]
    return grafo

def a_star(self, inicio, objetivo):

    
    cola_prioridad = []
    
    heapq.heappush(cola_prioridad, (0 + self.heuristica(inicio), 0, inicio))
    
    visitados = set()
    
    caminos = {}

    while cola_prioridad:

        _, g, actual = heapq.heappop(cola_prioridad)
        
   
        if actual in visitados:
            continue
        
        
        visitados.add(actual)
        
        
        if actual == objetivo:
            break
        
        
        for vecino in self.grafo[actual]:
            if vecino not in visitados:
                
                h = self.heuristica(vecino)
                
               
                heapq.heappush(cola_prioridad, (g + 1 + h, g + 1, vecino))
                
                
                caminos[vecino] = actual
    
    # ===== RECONSTRUCCIÓN DEL CAMINO =====
    camino = []
    producto = objetivo
    
    while producto in caminos:
        camino.insert(0, producto)  # Insertamos al principio de la lista
        producto = caminos[producto]  # Retrocedemos al producto anterior
    
    return camino

---3 - Implementar la heurística:

"""
Crea una función de heurística basada en la probabilidad de conversión
del producto (cuanto mayor, mejor).
"""

==================== FUNCIÓN HEURÍSTICA ====================

def heuristica(producto):

return -producto.probabilidad_conversion

#---4 - Probar el sistema:
"""
Inserta ejemplos de productos.
Usa el sistema para encontrar el mejor camino entre dos productos.
"""

==================== EJEMPLO DE USO ====================

if name == "main":

productos = [
    Producto("Moto", "Vehiculo", 0.9),  # Alta probabilidad de conversión
    Producto("Apartamento", "Vivienda", 0.7),
    Producto("Azucar", "Alimento", 0.5),
    Producto("Lapices", "Estudio", 0.3),  
    Producto("Bicicleta", "Vehiculo", 0.8),  
    Producto("Casa", "Vivienda", 0.6),
    Producto("carne", "Alimentos", 0.4),
    Producto("Libros", "Estudio", 0.2),  # Baja probabilidad de conversión
]

recomendador = AStarRecommendation(productos, heuristica)

inicio = productos[0]    # Producto A
objetivo = productos[2]  # Producto C

camino_recomendado = recomendador.a_star(inicio, objetivo)

# Mostramos el resultado
print("Camino recomendado:")
for p in camino_recomendado:
    print(p)