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)