1 Programación Declarativa Avanzada Resolución De Puzzles Vicente Andrade Alcántara Miguel Ángel Sánchez González.

Slides:



Advertisements
Presentaciones similares
Ing. Victor Jaime Polo Romero
Advertisements

Diseño y análisis de algoritmos
GRAFOS Presentado por: Oscar Leonardo Ramírez John Freddy Sandoval
FACTORIZACIÓN LU Bachilleres:
Búsqueda con retroceso
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA
Grupo 4 Matías Melgar Pablo Carbonell
Investigación de Operaciones II
Basado en una idea de Miguel de Guzmán
Búsqueda Informada Heurísticas.
COMPUTER DATA SYSTEMS.
METODO SIMPLEX El método Simplex es un procedimiento iterativo que permite ir mejorando la solución a cada paso. El proceso concluye cuando no es posible.
METODO DE BUSQUEDA ALGORITMO DE COSTO UNIFORME
Inteligencia Artificial Resolver problemas mediante búsqueda
Inteligencia Artificial Resolver problemas mediante búsqueda
Algoritmos Genéticos (AG) Integrantes: Rubén Levineri Miguel Rozas Juan Yañez Faltan autores y bibliografía.
Potencias de exponente natural mayor que 1
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
Teoria de grafos.-clase 4
Clase de Repaso Resolución ejercicios de parcial Paradigma Lógico y Objetos.
Lenguajes Formales de Consulta
Trabajo presentado por: LUIS FERNANDO OBANDO ING
Capítulo 4 BUSQUEDA INFORMADA.
Árbol recubridor mínimo Distancias
7.  El TDA Diccionario.
Optimización, Búsqueda Heurística
Problemas de Decisión y Optimización
Agentes de resoluciones d problemas Parte I. Un agente puede adoptar una meta o un propósito para satisfacer.
Estructura de Datos y Algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Parte I. Estructuras de Datos.
A LGORITMO DE BÚSQUEDA POR COSTO UNIFORME Dorian López.
Geo procesos.
Parte II. Algorítmica. 3. Algoritmos voraces.
Fase Regional 13 al 17 de mayo de 2014
CÁLCULO ELÉCTRICO DE LÍNEAS
profesor: Luigi Ceccaroni
EL MALLADO HEXAGONAL Dolores Bonilla Silva Daniel González Ortegón Remedios Gutiérrez Martínez.
METODOS DE BUSQUEDA INFORMADOS CAPITULO 5
Al hallar la raíz cuadrada de un número puede suceder que:
Backtracking 1. Método general. 2. Análisis de tiempos de ejecución.
Parte II. Algorítmica. 5. Backtracking. 1. Análisis de algoritmos.
MATEMÁTICAS 3º DIVERSIFICACIÓN
Experimentación Numérica
Programación Lineal Método Grafico
Parte I. Estructuras de Datos.
Problema de inclusión en una Curva Digital Por Orellana Muñoz, Alfonso Paz Vicente, Rafael Pérez Medina, Gerardo Rodríguez Naranjo.
Grafos..
TPE 1 - Sistemas de Producción: Rolling Cubes Sistemas de Inteligencia Artifcial Bergez, Brasca y García.
Estructura de Datos M.C. José Andrés Vázquez Flores FCC/BUAP
PROBLEMAS DE SATISFACCIÓN DE RESTRICCIONES
Parte I. Estructuras de Datos.
Tema 10: Algoritmos voraces
TEMA 5: El problema del flujo con costo mínimo
Cuadrado corazon cruz. CibelesHermanasJardin Glaciar.
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
Toribio Sarmiento Miguel Sesarego Cruz Rosmery. BUSQUEDA DE LA SOLUCION EN UN ESPACIO ESTADO BUSQUEDA SISTEMATICA O CIEGA EN PROFUNDIDAD EN AMPLITUD NO.
METODO DE SUMA Y RESTA. INDICE.
TEMA 1 Sistemas de ecuaciones lineales
Resolución de problemas
Clase #3 de Access. Temario Consultas Consultas Creación y manejos de consultas Creación y manejos de consultas Macros Macros Relaciones Relaciones.
ECACEN UNIDAD 2. LA ESTRATEGIA ORGANIZACIONAL Curso académico JUEGO GERENCIAL Cód Programa Administración de Empresas Bogotá, 2015 IR AL INICIO.
OPTIMIZACION DEL DESEMPEÑO DE ERROR
Vivenciamos Resolución de Problema con un juego y una narración
Programación I Prof. Carolina Cols. Algoritmo es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema.
UNIDAD 8 Lista Enlazada: Eliminar Deseamos eliminar un elemento llamado elem de la lista enlazada. Es posible que la variable ini sea modificada. main(){
@ Angel Prieto BenitoApuntes de Matemáticas 3º ESO1 SISTEMAS DE ECUACIONES U.D. 6 * 3º ESO E.AC.
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO FACULTAD DE QUÍMICA P.E.L: INGENIERO QUÍMICO U.A: ÁLGEBRA LINEAL Unidad II Conceptos básicos de Álgebra Tema:
Coloreado de Mapas con Backtracking
Transcripción de la presentación:

1 Programación Declarativa Avanzada Resolución De Puzzles Vicente Andrade Alcántara Miguel Ángel Sánchez González

2 Programación Declarativa Avanzada Puzzle: Coloreado de Mapas Vicente Andrade Alcántara Miguel Ángel Sánchez González

3 I. Definición del problema Hay que colorear un mapa, de forma que las provincias vecinas nunca coincidan en el color Hay que colorear un mapa, de forma que las provincias vecinas nunca coincidan en el color

4 I. Definición del problema Los colores elegidos son rojo, verde y azul Los colores elegidos son rojo, verde y azul Solución:

5 II. Implementación en árbol Este puzzle se podía realizar mediante un árbol que generara todas las posibles soluciones. Este puzzle se podía realizar mediante un árbol que generara todas las posibles soluciones. Dado un nivel ‘n’, colorear la provincia determinada para dicho nivel, se aceptan todas las configuraciones válidas y se desechan las ramas cuyo color de la provincia a colorear coincida con uno de sus provincias fronterizas. Dado un nivel ‘n’, colorear la provincia determinada para dicho nivel, se aceptan todas las configuraciones válidas y se desechan las ramas cuyo color de la provincia a colorear coincida con uno de sus provincias fronterizas.

6 II. Implementación en árbol Al final, para mostrar todas las posibles soluciones, se utilizaría el algoritmo de búsqueda que más convenga, como amplitud, profundidad, de coste, incluso se podría utilizar algún heurístico para saber si una rama determinada llegará a una solución y no tendrá poda. Al final, para mostrar todas las posibles soluciones, se utilizaría el algoritmo de búsqueda que más convenga, como amplitud, profundidad, de coste, incluso se podría utilizar algún heurístico para saber si una rama determinada llegará a una solución y no tendrá poda.

7 II. Implementación en árbol

8 III. Implementación en listas Estructuras de datos Estructuras de datos para definir los colores, las provincias, la estructura de salida y las fronteras de las provincias Estructuras de datos para definir los colores, las provincias, la estructura de salida y las fronteras de las provincias data Color = Rojo|Verde|Azul data Color = Rojo|Verde|Azul data Provincia = Almeria|Cadiz|Cordoba|Granada|Jaen|Huelva| Malaga|Sevilla data Provincia = Almeria|Cadiz|Cordoba|Granada|Jaen|Huelva| Malaga|Sevilla type ProvColor = [(Provincia,Color)] type ProvColor = [(Provincia,Color)] type Frontera = Provincia -> [Provincia] type Frontera = Provincia -> [Provincia] El mapa está definido por una lista de provincias y las fronteras de éstas El mapa está definido por una lista de provincias y las fronteras de éstas data Mapa = Atlas [Provincia] Frontera data Mapa = Atlas [Provincia] Frontera

9 III. Implementación en listas Ejemplo lProvincia=[Almeria.. Sevilla] lProvincia=[Almeria.. Sevilla] lColores=[Rojo.. Azul] lColores=[Rojo.. Azul] frontera p = case p of frontera p = case p of Almeria -> [Granada] Cadiz -> [Huelva,Sevilla,Malaga] Cordoba -> [Sevilla,Malaga,Jaen,Granada] Granada -> [Malaga,Cordoba,Jaen,Almeria] Jaen -> [Cordoba,Granada] Huelva -> [Cadiz,Sevilla] Malaga -> [Cadiz,Sevilla,Cordoba,Granada] Sevilla -> [Huelva,Cadiz,Malaga,Cordoba] andalucia = Atlas lProvincia frontera andalucia = Atlas lProvincia frontera

10 III. Implementación en listas Funciones Función que devuelve los colores de las provincias que son fronteras de la provincia "prov" Función que devuelve los colores de las provincias que son fronteras de la provincia "prov" colorDeFronteras :: Provincia -> ProvColor -> Frontera -> [Color] colorDeFronteras prov provCol f = [col'|let frontsDeProv = f prov, (prov',col')<- provCol, elem prov' frontsDeProv] Colorea un mapa a partir de una lista de colores dada. Una vez obtenida el coloreado del resto de provincias, se miran que colores no son permitidos, ya que los utiliza la provincia que es anexa a "prov", y se escogen el resto de colores permitidos Colorea un mapa a partir de una lista de colores dada. Una vez obtenida el coloreado del resto de provincias, se miran que colores no son permitidos, ya que los utiliza la provincia que es anexa a "prov", y se escogen el resto de colores permitidos colorearMapa :: Mapa -> [Color] -> [ProvColor] colorearMapa (Atlas [] _) colores = [[]] colorearMapa (Atlas (prov:restoprov) f) colores = [(prov,color):restoMapa | restoMapa <- colorearMapa (Atlas restoprov f) colores, let coloresNoP = colorDeFronteras prov restoMapa f, color <- diff colores coloresNoP]

11 III. Implementación en listas Funciones Función que devuelve True si el mapa coloreado es correcto Función que devuelve True si el mapa coloreado es correcto solucionBuena:: ProvColor -> Frontera -> Bool solucionBuena xs f = solaux xs xs f solaux:: ProvColor -> ProvColor -> Frontera -> Bool solaux [] _ _ = True solaux ((prov,col):resto) provcol f |elem col (colorDeFronteras prov provcol f) = False |otherwise = solaux resto provcol f

12 III. Implementación en listas Solución head(colorearMapa andalucia lColores) head(colorearMapa andalucia lColores) [(Almeria,Verde),(Cadiz,Azul),(Cordoba,Azul),(Gra nada,Rojo),(Jaen,Verde),(Huelva,Verde),(Malaga, Verde),(Sevilla,Rojo)]

13 Programación Declarativa Avanzada Puzzle: Cuadrados mágicos con fichas de dominó Vicente Andrade Alcántara Miguel Ángel Sánchez González

14 Definición del problema El puzzle consiste en colocar una lista de N piezas del famoso juego del dominó en un tablero cuadrado de dimensiones MxM. El puzzle consiste en colocar una lista de N piezas del famoso juego del dominó en un tablero cuadrado de dimensiones MxM.

15 La única restricción que plantea este puzzle para colocar las piezas, es que la suma de los valores de cada fila y cada columna sea la misma para todas. La única restricción que plantea este puzzle para colocar las piezas, es que la suma de los valores de cada fila y cada columna sea la misma para todas. 19

16 Estrategias de búsqueda Existen principalmente dos estrategias a seguir para encontrar las soluciones a este problema: Existen principalmente dos estrategias a seguir para encontrar las soluciones a este problema: Usar una búsqueda en grafos Usar una búsqueda en grafos Método de generación/prueba Método de generación/prueba

17 Búsqueda en Grafos Para la estrategia de búsqueda en grafos, obtendríamos el camino de ir de un nodo inicial, que representa el tablero vacío, hasta aquél que tenga colocadas todas las piezas, y satisfaga las restricciones del problema. Para la estrategia de búsqueda en grafos, obtendríamos el camino de ir de un nodo inicial, que representa el tablero vacío, hasta aquél que tenga colocadas todas las piezas, y satisfaga las restricciones del problema. La función ‘suc’, que genera los sucesores de un nodo, devolvería aquellos tableros, resultado de colocar cada una de las piezas restantes en un hueco dado La función ‘suc’, que genera los sucesores de un nodo, devolvería aquellos tableros, resultado de colocar cada una de las piezas restantes en un hueco dado

18 Ejemplo de la primera generación de sucesores...

19 Estrategia basada en generación/prueba (I) La estrategia basada en generación/prueba es sustancialmente distinta de la búsqueda en grafos. La estrategia basada en generación/prueba es sustancialmente distinta de la búsqueda en grafos. Con éste método, la finalidad es generar todas aquellas posibles combinaciones de los elementos que forman el problema, y comprobar que cumplen las restricciones que imponen. Con éste método, la finalidad es generar todas aquellas posibles combinaciones de los elementos que forman el problema, y comprobar que cumplen las restricciones que imponen.

20 Estrategia basada en generación/prueba (II) En el caso de nuestro cuadrado mágico, se trata de generar todas las formas posibles de colocar las piezas de dominó sobre el tablero, y seleccionar aquéllas que cumplan la restricción: En el caso de nuestro cuadrado mágico, se trata de generar todas las formas posibles de colocar las piezas de dominó sobre el tablero, y seleccionar aquéllas que cumplan la restricción: Para cada fila ‘i’, Σ tab(i)(j) = K1 Para cada columna ‘j’, Σ tab(i)(j) = K2 K1 = K2

21 Implementación en Haskell (I) Se ha optado por desarrollar para este problema la segunda solución: generación/prueba. Se ha optado por desarrollar para este problema la segunda solución: generación/prueba. Para implementar esta estrategia en Haskell, hemos usado listas por comprensión, de manera que una función se encarga de generar todas las combinaciones posibles de tableros, y otra actúa como condición de filtro. Para implementar esta estrategia en Haskell, hemos usado listas por comprensión, de manera que una función se encarga de generar todas las combinaciones posibles de tableros, y otra actúa como condición de filtro.

22 Implementación en Haskell (II) La sentencia queda de la siguiente forma: La sentencia queda de la siguiente forma: cuadrados_magicos x = [s | s <- posibles x, valida s]. En este ejemplo, la función ‘posibles’ genera una lista enorme de candidatos: (más de )...

23 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

24 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

25 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

26 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

27 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

28 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

29 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

30 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

31 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

32 Implementación en Haskell (II) Y la función que filtra, elimina los que no cumplen las restricciones: Y la función que filtra, elimina los que no cumplen las restricciones:

33 Implementación en Haskell (III) Las dos funciones principales son: Las dos funciones principales son: posibles :: [(Int, Int)] -> Int -> Int -> [Tablero] posibles :: [(Int, Int)] -> Int -> Int -> [Tablero] Recibe una lista de fichas y devuelve una lista de tableros Recibe una lista de fichas y devuelve una lista de tableros valida :: Tablero -> Bool valida :: Tablero -> Bool Recibe un tablero y comprueba si cumple la restricción Recibe un tablero y comprueba si cumple la restricción Ambas se apoyan en la definición de un tipo auxiliar: Tablero, que se define como sigue: type Tablero = [ [ Int ] ]

34 La función ‘posibles’ La definición de la función ‘posibles’ en el código del programa queda como sigue: La definición de la función ‘posibles’ en el código del programa queda como sigue: posibles :: [(Int, Int)] -> Int -> Int -> [Tablero] posibles x n m = elimina_vacio (alisar_nivel (map (generar_tableros (tableroinicial n m )) (map (\ x -> alisar_nivel (map tablear x)) (permutaciones x))))

35 La función ‘valida’ La definición de la función ‘valida’ en el código del programa queda como sigue: La definición de la función ‘valida’ en el código del programa queda como sigue: valida :: Tablero -> Bool valida t = (buenaH t n) && (buenaV t n) where n = sum (head t)

36 Algunas conclusiones El uso de listas por comprensión facilita bastante la definición de la solución. El uso de listas por comprensión facilita bastante la definición de la solución. Por el contrario, la implementación de la solución del problema de puzzles mágicos mediante esta estrategia presenta una elevada carga computacional, dado el orden de magnitud de la función ‘posibles’. Por el contrario, la implementación de la solución del problema de puzzles mágicos mediante esta estrategia presenta una elevada carga computacional, dado el orden de magnitud de la función ‘posibles’. Probado para 8 fichas, en un equipo a una frecuencia de 2,4 GHz, el tiempo consumido en mostrar todas las soluciones fue de 40 minutos aprox. Probado para 8 fichas, en un equipo a una frecuencia de 2,4 GHz, el tiempo consumido en mostrar todas las soluciones fue de 40 minutos aprox.