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

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

Embed Size (px)

Citation preview

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

Inteligencia Artificial (laboratorio)

Resolver problemas mediante búsqueda heurística

Primavera 2009

profesor: Luigi Ceccaroni

Page 2: 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)

• 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.

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

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)

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

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

11

Cómo ejecutar los algoritmos: ejemplo

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

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.

12

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

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)

13

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

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

14

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

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.

15

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

Ejemplos: path finder

16

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

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).

17

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

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.) 18

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

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.

19

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

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.

20

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

Ejemplos: el viajante de comercio

21

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

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

22

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

Ejemplos: antenas de telefonía

• La clase ProbAntenasJFrame permite ejecutar la ascensión de colinas y el temple simulado.

23

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

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. 24

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

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

25

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

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

26

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

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

27

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

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

28