Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 19 additions & 5 deletions busquedas.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,15 @@ def __init__(self, x0, meta, modelo):
@param modelo: Un objeto de la clase ModeloBusqueda

"""
self.num_nodos = 0 # Solo para efectos medición
self.x0 = x0
self.modelo = modelo
def es_meta(estado):
self.num_nodos += 1
return meta(estado)
self.es_meta = es_meta

self.x0 = x0
self.modelo = modelo
self.num_nodos = 0 # Solo para efectos medición



class Nodo:
Expand Down Expand Up @@ -283,5 +284,18 @@ def busqueda_A_estrella(problema, heuristica):
@return Un objeto tipo Nodo con la estructura completa

"""
raise NotImplementedError('Hay que hacerlo de tarea \
(problema 2 en el archivo busquedas.py)')
frontera = []
heapq.heappush(frontera, (0, Nodo(problema.x0)))
visitados = {problema.x0: 0}

while frontera:
(_, nodo) = heapq.heappop(frontera)
if problema.es_meta(nodo.estado):
nodo.nodos_visitados = problema.num_nodos
return nodo
for hijo in nodo.expande(problema.modelo):
if (hijo.estado not in visitados or
visitados[hijo.estado] > hijo.costo + heuristica(hijo)):
heapq.heappush(frontera, (hijo.costo + heuristica(hijo), hijo))
visitados[hijo.estado] = hijo.costo + heuristica(hijo)
return None
62 changes: 30 additions & 32 deletions problemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,41 +16,34 @@
# Desarrolla el modelo del Camión mágico
# ------------------------------------------------------------

class CamionMagico.busquedas.ModeloBusqueda):
"""
---------------------------------------------------------------------------------
Supongamos que quiero trasladarme desde la posición discreta $1$ hasta
la posicion discreta $N$ en una vía recta usando un camión mágico.

Puedo trasladarme de dos maneras:
1. A pie, desde el punto $x$ hasta el punto $x + 1$ en un tiempo de 1 minuto.
2. Usando un camión mágico, desde el punto $x$ hasta el punto $2x$ con un tiempo
de 2 minutos.

Desarrollar la clase del modelo del camión mágico
----------------------------------------------------------------------------------

"""
def __init__(self):
raise NotImplementedError('Hay que hacerlo de tarea')
class CamionMagico(busquedas.ModeloBusqueda):
def __init__(self, meta):
self.meta = meta

def acciones_legales(self, estado):
raise NotImplementedError('Hay que hacerlo de tarea')
acciones = []
if(estado + 1 <= self.meta):
acciones.append("caminar")
if(estado * 2 <= self.meta):
acciones.append("camion")
return acciones


def sucesor(self, estado, accion):
raise NotImplementedError('Hay que hacerlo de tarea')
return (estado+1) if (accion=="caminar") else (estado*2)


def costo_local(self, estado, accion):
raise NotImplementedError('Hay que hacerlo de tarea')
return 1 if(accion == "caminar") else 2


@staticmethod
def bonito(estado):
"""
El prettyprint de un estado dado

"""
raise NotImplementedError('Hay que hacerlo de tarea')

print(f"Estado: {estado}, Meta: {self.meta}")
# ------------------------------------------------------------
# Desarrolla el problema del Camión mágico
# ------------------------------------------------------------
Expand All @@ -61,9 +54,9 @@ class PblCamionMágico(busquedas.ProblemaBusqueda):
punto $1$ hasta el punto $N$ en el menor tiempo posible.

"""
def __init__(self):
raise NotImplementedError('Hay que hacerlo de tarea')

def __init__(self, N):
estado_inicial = 1
super().__init__(estado_inicial, lambda estado: estado == N, CamionMagico(N))

# ------------------------------------------------------------
# Desarrolla una política admisible.
Expand All @@ -75,7 +68,7 @@ def h_1_camion_magico(nodo):
PLATICADA DE PORQUÉ CREES QUE LA HEURÍSTICA ES ADMISIBLE

"""
return 0
return 2


# ------------------------------------------------------------
Expand All @@ -90,13 +83,13 @@ def h_2_camion_magico(nodo):
PLATICADA DE PORQUÉ CREES QUE LA HEURÍSTICA ES ADMISIBLE

"""
return 0
return 1

# ------------------------------------------------------------
# Desarrolla el modelo del cubo de Rubik
# ------------------------------------------------------------

class CuboRubik.busquedas.ModeloBusqueda):
class CuboRubik(busquedas.ModeloBusqueda):
"""
La clase para el modelo de cubo de rubik, documentación, no olvides poner
la documentación de forma clara y concisa.
Expand Down Expand Up @@ -181,6 +174,8 @@ def compara_metodos(problema, heuristica_1, heuristica_2):
"""
solucion1 = busquedas.busqueda_A_estrella(problema, heuristica_1)
solucion2 = busquedas.busqueda_A_estrella(problema, heuristica_2)
solucion3 = busquedas.busqueda_costo_uniforme(problema)
solucion4 = busquedas.busqueda_profundidad_iterativa(problema)

print('-' * 50)
print('Método'.center(12) + 'Costo'.center(18) + 'Nodos visitados'.center(20))
Expand All @@ -191,6 +186,12 @@ def compara_metodos(problema, heuristica_1, heuristica_2):
print('A* con h2'.center(12)
+ str(solucion2.costo).center(20)
+ str(solucion2.nodos_visitados))
print('Busqueda a costo uniforme '.center(12)
+ str(solucion3.costo).center(20)
+ str(solucion3.nodos_visitados))
print('Busqueda a profundida iterativa '.center(12)
+ str(solucion4.costo).center(20)
+ str(solucion4.nodos_visitados))
print('-' * 50 + '\n\n')


Expand All @@ -199,11 +200,8 @@ def compara_metodos(problema, heuristica_1, heuristica_2):

# Compara los métodos de búsqueda para el problema del camión mágico
# con las heurísticas que desarrollaste
problema = PblCamionMágico( XXXXXXXXXX ) # <--- PONLE LOS PARÁMETROS QUE NECESITES
problema = PblCamionMágico(100) # <--- PONLE LOS PARÁMETROS QUE NECESITES
compara_metodos(problema, h_1_camion_magico, h_2_camion_magico)

# Compara los métodos de búsqueda para el problema del cubo de rubik
# con las heurísticas que desarrollaste
problema = PblCuboRubik( XXXXXXXXXX ) # <--- PONLE LOS PARÁMETROS QUE NECESITES
compara_metodos(problema, h_1_problema_1, h_2_problema_1)