def compara_metodos(pos_inicial, heuristica_1, heuristica_2): """ Compara en un cuadro lo nodos expandidos y el costo de la solución de varios métodos de búsqueda @param pos_inicial: Una tupla con una posicion inicial @param heuristica_1: Una función de heurística @param heuristica_2: Una función de heurística @return None (no regresa nada, son puros efectos colaterales) Si la búsqueda no informada es muy lenta, posiblemente tendras que quitarla de la función """ solucion1 = busquedas.busqueda_A_estrella(ProblemaLightsOut(pos_inicial), heuristica_1) solucion2 = busquedas.busqueda_A_estrella(ProblemaLightsOut(pos_inicial), heuristica_2) print('-' * 50) print('Método'.center(10) + 'Costo'.center(20) + 'Nodos visitados') print('-' * 50 + '\n\n') print('A* con h1'.center(10) + str(solucion1.costo).center(20) + str(solucion1.nodos_visitados)) print('A* con h2'.center(10) + str(solucion2.costo).center(20) + str(solucion2.nodos_visitados)) print('-' * 50 + '\n\n')
def probando(pos_ini, tipo): """ Muestra el resultado de aplicar un tipo de búsqeda al problema del 8 puzzle con una posición inicial determinada. Por el momento muy manual, solamente descomentar las búsquedas que se deseen realizar. Recuerda que las búsquedas no informadas pueden ser muy lentas. Tipo: 0: busqueda_ancho, 1: busqueda_profundo, 2: busqueda_profundidad_iterativa, 3: busqueda_costo_uniforme, 4: busqueda_A_estrella con heuristica h1, 5: busqueda_A_estrella con heuristica h2 """ print(Modelo8puzzle.dibuja(pos_ini)) tipos = ["BFS", "DFS", "IDS", "UCS", "A* con h1", "A* con h2"] print("---------- Utilizando {} -------------".format(tipos[tipo])) problema = Ocho_puzzle(pos_ini) t_inicial = time() solucion = (busquedas.busqueda_ancho(problema) if tipo is 0 else busquedas.busqueda_profundo(problema, 50) if tipo is 1 else busquedas.busqueda_profundidad_iterativa(problema, 50) if tipo is 2 else busquedas.busqueda_costo_uniforme(problema) if tipo is 3 else busquedas.busqueda_A_estrella(problema, h_1) if tipo is 4 else busquedas.busqueda_A_estrella(problema, h_2)) t_final = time() print(solucion) print("Explorando {} nodos".format(solucion.nodos_visitados)) print("Tiempo: {} segundos".format(t_final-t_inicial))
def probando(pos_ini): """ Muestra el resultado de aplicar un tipo de búsqeda al problema del 8 puzzle con una posición inicial determinada. Por el momento muy manuel, solamente descomentar las búsquedas que se deseen realizar. Recuerda que las búsquedas no informadas pueden ser muy lentas. """ print(Modelo8puzzle.dibuja(pos_ini)) """ # ------- BFS ----------- print("---------- Utilizando BFS -------------") problema = Ocho_puzzle(pos_ini) solucion = busquedas.busqueda_ancho(problema) print(solucion) print("Explorando {} nodos\n\n".format(solucion.nodos_visitados)) # ------- DFS ----------- print("---------- Utilizando DFS -------------") problema = Ocho_puzzle(pos_ini) solucion = busquedas.busqueda_profundo(problema, 50) print(solucion) print("Explorando {} nodos\n\n".format(solucion.nodos_visitados)) # ------- IDS ----------- print("---------- Utilizando IDS -------------") problema = Ocho_puzzle(pos_ini) solucion = busquedas.busqueda_profundidad_iterativa(problema, 50) print(solucion) print("Explorando {} nodos\n\n".format(solucion.nodos_visitados)) # ------- UCS ----------- print("---------- Utilizando UCS -------------") problema = Ocho_puzzle(pos_ini) solucion = busquedas.busqueda_costo_uniforme(problema) print(solucion) print("Explorando {} nodos\n\n".format(solucion.nodos_visitados)) """ # # ------- A* con h1 ----------- print("---------- Utilizando A* con h1 -------------") problema = Ocho_puzzle(pos_ini) solucion = busquedas.busqueda_A_estrella(problema, h_1) print(solucion) print("Explorando {} nodos".format(solucion.nodos_visitados)) # # ------- A* con h2 ----------- print("---------- Utilizando A* con h2 -------------") problema = Ocho_puzzle(pos_ini) solucion = busquedas.busqueda_A_estrella(problema, h_2) print(solucion) print("Explorando {} nodos".format(solucion.nodos_visitados)) """