1 / 28

Inteligencia Artificial (laboratorio) Resolver problemas mediante búsqueda heurística

Inteligencia Artificial (laboratorio) Resolver problemas mediante búsqueda heurística. Primavera 2009 profesor: Luigi Ceccaroni. Las clases Java de AIMA (Artificial Intelligence, a Modern Approach).

khalil
Download Presentation

Inteligencia Artificial (laboratorio) Resolver problemas mediante búsqueda heurística

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Inteligencia Artificial (laboratorio)Resolver problemas mediante búsqueda heurística Primavera 2009 profesor: Luigi Ceccaroni

  2. Las clases Java de AIMA (Artificial Intelligence, a Modern Approach) • AIMA está constituido por un conjunto de clases Java que permiten definir problemas de búsqueda. • Las clases implementan varios algoritmos: • búsqueda ciega: anchura, profundidad y profundidad iterativa • búsqueda heurística: A*, A*PI • búsqueda local: ascensión de colinas, temple simulado • Las clases para la representación del problema están separadas de las clases para los algoritmos de búsqueda.

  3. Definición de problemas • La definición de un problema requiere la instanciación de una serie de clases: • representación de los estados • operadores • función generadora de estados accesibles (aima.search.framework.SuccessorFunction) • función que determina si se ha llegado al estado final (aima.search.framework.GoalTest) • función heurística (aima.search.framework.HeuristicFunction)

  4. Representación de los estados y operadores • La representación de los estados se implementa a través del constructor de una clase independiente, por ejemplo: /* Constructor */ public ProbIA15Board(char[] b) { for(int i=0;i<5;i++) board[i]=b[i]; } • Adicionalmente, hay funciones que transforman el estado según los posibles operadores a utilizar. • Es conveniente que haya funciones que indiquen si un operador se puede aplicar sobre un estado. • Se pueden incluir otras funciones auxiliares, si necesarias.

  5. Función generadora de estados accesibles • Implementa la clase aima.search.framework.SuccessorFunction y la función public List getSuccessors(Object aState). • Esta función genera la lista de los estados accesibles a partir del que recibe como parámetro. • Esta lista contiene pares de elementos que consisten en: • una cadena que representa la operación que se ha aplicado • el estado sucesor resultante • La función usa necesariamente otras funciones declaradas en la clase que define el problema (representación del estado, operadores). 5

  6. Función que determina si se ha llegado al estado final • Implementa la clase aima.search.framework.GoalTest y la función public boolean isGoalState(Object aState). • Esta función ha de retornar cierto cuando un estado sea final. 6

  7. Función heurística • Implementa la clase aima.search.framework.HeuristicFunction y la función public int getHeuristicValue(Object n). • Esta función ha de retornar el valor de la función heurística (la h’). • Las características de la función dependen del problema. 7

  8. Ejemplo: el 8 puzzle • Definido en el paquete aima.search.eightpuzzle • Cuatro clases que representan el problema: • EightPuzzleBoard representa el tablero (un vector de 9 posiciones, números del 0 al 8, el 0 es el blanco). • ManhattanHeuristicFunction implementa la función heurística (suma de distancia Manhattan de cada ficha). • EightPuzzleSuccessorFuncion implementa la función que genera los estados accesibles desde uno dado (posibles movimientos del blanco). • EightPuzzleGoalTest define la función que identifica el estado final. • La clase aima.search.demos.EightPuzzleDemo tiene las funciones que permiten solucionar el problema con distintos algoritmos. 8

  9. Ejemplo: vector de 5 posiciones • Definido en el paquete IA.probIA15 • Cuatro clases que representan el problema: • ProbIA15Board representa el tablero (un vector de 5 posiciones con la configuración inicial de fichas). • ProbIA15HeuristicFunction implementa la función heurística (número de piezas blancas). • ProbIA15SuccessorFunction implementa la función que genera los estados accesibles desde uno dado • operadores: saltos y desplazamientos • ProbIA15GoalTest define la función que identifica el estado final. • La clase IA.probIA15.ProbIA15Demo permite ejecutar los algoritmos de búsqueda ciega y heurística. 9

  10. Cómo ejecutar los algoritmos • El funcionamiento se puede ver en los ejemplos, de los que es útil analizar el código. • Definir un objeto Problem que recibe: • otro objeto que representa el estado inicial • la función generadora de sucesores • la función que prueba el estado final • la función heurística, si se utiliza un algoritmo de búsqueda informada • Definir un objeto Search que sea una instancia del algoritmo que se va a usar. • Definir un objeto SearchAgent que recibe los objetos Problem y Search. • Las funciones printActions y printInstrumentation permiten imprimir el camino de búsqueda y la información de la ejecución del algoritmo de búsqueda. 10

  11. Cómo ejecutar los algoritmos: ejemplo

  12. Ejecución de los ejemplos • Podéis ejecutar las demos ejecutando el fichero I:\AIA\AIMA.bat y escogiendo la demo que queráis desde el interfaz.

  13. Ejecución de los ejemplos:8 puzzle • El problema se resuelve mediante los siguientes algoritmos: • profundidad limitada • profundidad iterativa • primero el mejor (dos funciones) • A* (dos funciones)

  14. Ejemplos: vector de 5 posiciones (probIA15) • El problema se resuelve mediante los siguientes algoritmos: • anchura • profundidad limitada • profundidad iterativa • A* • A*PI con dos heurísticas

  15. Ejemplos: path finder • Interfaz a partir de la cual se puede seleccionar el problema, el algoritmo y varias heurísticas. • El problema consiste en encontrar un camino entre la posición azul y la roja.

  16. Ejemplos: path finder

  17. Ejemplos: path finder • Cosas a observar: • Los algoritmos exhaustivos dejan de ser efectivos a partir de tamaños pequeños. • La heurística influye mucho en la eficiencia de los algoritmos informados. • A*PI gana a A* en tiempo y gasta menos memoria. • A partir de cierto tamaño, A* deja de ser competitivo. • Hay configuraciones de problemas (ver menús) que no se pueden resolver con ningún algoritmo en un tiempo razonable (hace falta un conocimiento mas especializado).

  18. Ejemplos: el viajante de comercio • Definido en el paquete IA.probTSP. • Las 4 clases que representan el problema: • ProbTSPBoard: representación del espacio (un vector de n posiciones que representan la secuencia de recorrido entre las n ciudades) • ProbTSPHeuristicFunction: implementa la función heurística (suma del recorrido) • ProbTSPSuccessorFunction: implementa la función que genera los estados accesibles desde uno dado (todos los posibles intercambios de 2 ciudades) • probTSPGoalTest: define una función que siempre retorna falso como prueba de estado final (En este caso lo desconocemos.)

  19. Ejemplos: el viajante de comercio • La clase ProbTSPJFrame permite ejecutar la ascensión de colinas y el temple simulado. • Se puede modificar el numero de ciudades. • En cada panel aparece la ejecución del problema del viajante de comercio con ascensión de colinas y temple simulado.

  20. Ejemplos: el viajante de comercio • Se puede comprobar que frecuentemente la solución que da el temple simulado es mejor. • Evidentemente, para cada tamaño de problema habría que reajustar los parámetros del temple simulado.

  21. Ejemplos: el viajante de comercio

  22. Ejemplos: antenas de telefonía • Definido en el paquete IA.probAntenas. • Las 4 clases que representan el problema: • ProbAntenasBoard: representación del espacio (una matriz NxN que representa el mapa, y un vector de antenas) • ProbAntenasHeuristicFunction, ProbAntenasHeuristicFunction2, ProbAntenasHeuristicFunction3: implementan varias funciones heurísticas • ProbAntenasSuccessorFunction: implementa la función que genera los estados accesibles desde uno dado (mover antena, aumentar y disminuir potencia) • probAntenasGoalTest: define una función que siempre retorna falso como prueba de estado final

  23. Ejemplos: antenas de telefonía • La clase ProbAntenasJFrame permite ejecutar la ascensión de colinas y el temple simulado.

  24. Ejemplos: antenas de telefonía • Cosas a observar: • Las heurísticas permiten elegir el tipo de solución (dar prioridad a la cobertura, al número de antenas, penalizar los solapamientos). • Temple simulado es mas tolerante a funciones heurísticas peores y a la elección de la solución inicial. • Se puede comprobar que las soluciones con el temple simulado tienen menos variación que las de la ascensión de colinas. • Hay menos probabilidad de quedarse en mínimos locales y alcanzar el mínimo global.

  25. Las clases de los algoritmos (no informados) • aima.search.uninformed • BreadthFirstSearch: búsqueda en anchura, recibe como parámetro un objeto TreeSeach • DepthLimitedSearch: búsqueda con profundidad limitada, recibe como parámetro la profundidad máxima de exploración • IterativeDeepeningSearch: búsqueda en profundidad iterativa, sin parámetros

  26. Las clases de los algoritmos (informados) • aima.search.informed • AStarSearch: búsqueda A*, recibe como parámetro un objeto GraphSearch • IterativeDeepeningAStarSearch: búsqueda A*PI, sin parámetros • HillClimbingSearch: búsqueda ascensión de colinas, sin parámetros

  27. Las clases de los algoritmos (informados) • aima.search.informed • SimulatedAnnealingSearch: temple simulado, recibe 4 parámetros: • El número máximo de iteraciones • El número de iteraciones por cada paso de temperatura • Los parámetros k y  que determinan el comportamiento de la función de temperatura

  28. Las clases de los algoritmos (temple simulado) • La función de temperatura es • k y  determinan cómo desciende la función al descender la temperatura • El valor inicial de T se obtiene experimentalmente • La función que determina la probabilidad de no aceptación de un estado es: • Probabilidad de no aceptación = • donde E es la diferencia de energía entre el estado actual y el siguiente y T es la temperatura actual

More Related