Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haz lo que hicimos en el aula

import heapq

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})"

class AStarRecommendation:
def init(self, productos, heuristica):
self.productos = productos
self.heuristica = heuristica
self.grafo = self.crear_grafo()

def crear_grafo(self):
    grafo = {}
    for producto in self.productos:
        grafo[producto] = [p for p in self.productos if p != producto]
    return grafo

def a_star(self, inicio, objetivo):
    fila_prioridad = []
    heapq.heappush(fila_prioridad, (0 + self.heuristica(inicio), 0, inicio))  # f = g + h
    visitados = set()
    caminos = {}

    while fila_prioridad:
        _, g, actual = heapq.heappop(fila_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(fila_prioridad, (g + 1 + h, g + 1, vecino))  # g es el costo acumulado
                caminos[vecino] = actual

    # Recuperando el camino
    camino = []
    producto = objetivo
    while producto in caminos:
        camino.insert(0, producto)
        producto = caminos[producto]
    return camino

def heuristica(producto):

return -producto.probabilidad_conversion

productos = [
Producto("Celular", "Categoría 1", 0.9),
Producto("Computadora", "Categoría 1", 0.8),
Producto("Tableta", "Categoría 2", 0.7),
Producto("Audifonos", "Categoría 2", 0.6),
]

recomendador = AStarRecommendation(productos, heuristica)

inicio = productos[0]
objetivo = productos[2]

camino_recomendado = recomendador.a_star(inicio, objetivo)

print("Camino recomendado:")
for p in camino_recomendado:
print(p)

1 respuesta

Hola, Alberto! ¿Cómo vas?

Gracias por compartir tus reflexiones y aprendizajes con la comunidad Alura. Me gustó cómo aplicaste el algoritmo A* para crear un sistema de recomendación, usando una heurística basada en la probabilidad de conversión. Solo revisa un punto importante: en Python, el constructor debe escribirse como __init__, con doble guion bajo antes y después, para que la clase inicialice correctamente sus atributos.

dica: ajusta también la indentación del código, porque en Python los bloques dentro de class, def, for y while dependen de los espacios. Puedes probar el código por partes: primero la clase Producto, después la clase AStarRecommendation y al final la ejecución con print(). Vas muy bien, sigue practicando porque este tipo de ejercicio ayuda mucho a entender búsquedas, grafos y sistemas inteligentes.

Cuenta con el apoyo del foro en tu viaje. Saludos y buenos estudios!