La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

profesor: Luigi Ceccaroni

Presentaciones similares


Presentación del tema: "profesor: Luigi Ceccaroni"— Transcripción de la presentación:

1 profesor: Luigi Ceccaroni
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 ProbAntenasJ Frame 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


Descargar ppt "profesor: Luigi Ceccaroni"

Presentaciones similares


Anuncios Google