De acuerdo a lo aprendido en clase, una solución en Python de acuerdo a lo solicitado sería:
import heapq
==========================
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 self.nombre
==========================
Clase AStarRecommendation
==========================
class AStarRecommendation:
def __init__(self):
self.grafo = {}
# Agregar producto
def agregar_producto(self, producto):
if producto not in self.grafo:
self.grafo[producto] = []
# Conectar dos productos
def conectar(self, producto1, producto2, costo=1):
self.grafo[producto1].append((producto2, costo))
self.grafo[producto2].append((producto1, costo))
# Heurística
# Mientras mayor sea la probabilidad de conversión,
# menor será el valor heurístico.
def heuristica(self, producto):
return 1 - producto.probabilidad_conversion
# Algoritmo A*
def a_estrella(self, inicio, objetivo):
cola = []
heapq.heappush(cola, (0, inicio))
vino_de = {}
costo = {inicio: 0}
while cola:
_, actual = heapq.heappop(cola)
if actual == objetivo:
camino = []
while actual in vino_de:
camino.append(actual.nombre)
actual = vino_de[actual]
camino.append(inicio.nombre)
camino.reverse()
return camino
for vecino, peso in self.grafo[actual]:
nuevo_costo = costo[actual] + peso
if vecino not in costo or nuevo_costo < costo[vecino]:
costo[vecino] = nuevo_costo
prioridad = nuevo_costo + self.heuristica(vecino)
heapq.heappush(cola, (prioridad, vecino))
vino_de[vecino] = actual
return None
==========================
Crear productos
==========================
laptop = Producto("Laptop Gamer", "Computadoras", 0.90)
mouse = Producto("Mouse Inalámbrico", "Accesorios", 0.75)
teclado = Producto("Teclado Mecánico", "Accesorios", 0.80)
monitor = Producto("Monitor 27 pulgadas", "Monitores", 0.85)
audifonos = Producto("Audífonos Gamer", "Audio", 0.70)
==========================
Crear sistema
==========================
sistema = AStarRecommendation()
productos = [laptop, mouse, teclado, monitor, audifonos]
for p in productos:
sistema.agregar_producto(p)
Grafo simplificado
sistema.conectar(laptop, mouse)
sistema.conectar(mouse, teclado)
sistema.conectar(teclado, monitor)
sistema.conectar(monitor, audifonos)
sistema.conectar(laptop, monitor)
sistema.conectar(mouse, audifonos)
==========================
Buscar mejor camino
==========================
camino = sistema.a_estrella(laptop, audifonos)
print("Mejor camino encontrado:")
print(" -> ".join(camino))
Explicación de la solución
- Clase Producto
Representa cada producto.
Contiene:
nombre
categoría
probabilidad de conversión
- Clase AStarRecommendation
Construye un grafo donde los productos son nodos.
Permite agregar productos y conectarlos.
Implementa el algoritmo A* para encontrar el mejor recorrido.
- Heurística
Como una mayor probabilidad de conversión es mejor, la heurística devuelve un valor menor para esos productos, haciendo que el algoritmo los priorice durante la búsqueda.
def heuristica(producto):
return 1 - producto.probabilidad_conversion
- Prueba del sistema
Se crean cinco productos, se conectan entre sí y se busca el mejor camino desde Laptop Gamer hasta Audífonos Gamer.
Resultado esperado
Una salida posible es:
Mejor camino encontrado:
Laptop Gamer -> Mouse Inalámbrico -> Audífonos Gamer
Conclusión
Este ejemplo demuestra cómo adaptar el algoritmo A* a un sistema de recomendación simplificado:
Los productos son los nodos del grafo.
Las conexiones representan posibles recomendaciones.
La heurística utiliza la probabilidad de conversión para favorecer los productos con mayor posibilidad de compra.
El algoritmo A* encuentra el camino más conveniente combinando el costo acumulado y la heurística, produciendo recomendaciones más inteligentes.