Sunteți pe pagina 1din 28

Inteligencia Artificial

(laboratorio)

Resolver problemas mediante bsqueda heurstica


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 bsqueda. Las clases implementan varios algoritmos:
bsqueda ciega: anchura, profundidad y profundidad iterativa bsqueda heurstica: A*, A*PI bsqueda local: ascensin de colinas, temple simulado

Las clases para la representacin del problema estn separadas de las clases para los algoritmos de bsqueda.

Definicin de problemas
La definicin de un problema requiere la instanciacin de una serie de clases:
representacin de los estados operadores funcin generadora de estados accesibles (aima.search.framework.SuccessorFunction) funcin que determina si se ha llegado al estado final (aima.search.framework.GoalTest) funcin heurstica (aima.search.framework.HeuristicFunction)

Representacin de los estados y operadores


La representacin de los estados se implementa a travs 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 segn 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.

Funcin generadora de estados accesibles


Implementa la clase aima.search.framework.SuccessorFunction y la funcin public List getSuccessors(Object aState). Esta funcin genera la lista de los estados accesibles a partir del que recibe como parmetro. Esta lista contiene pares de elementos que consisten en: una cadena que representa la operacin que se ha aplicado el estado sucesor resultante La funcin usa necesariamente otras funciones declaradas en la clase que define el problema 5 (representacin del estado, operadores).

Funcin que determina si se ha llegado al estado final


Implementa la clase aima.search.framework.GoalTest y la funcin public boolean isGoalState(Object aState). Esta funcin ha de retornar cierto cuando un estado sea final.

Funcin heurstica
Implementa la clase aima.search.framework.HeuristicFunction y la funcin public int getHeuristicValue(Object n). Esta funcin ha de retornar el valor de la funcin heurstica (la h). Las caractersticas de la funcin dependen del problema.
7

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, nmeros del 0 al 8, el 0 es el blanco). ManhattanHeuristicFunction implementa la funcin heurstica (suma de distancia Manhattan de cada ficha). EightPuzzleSuccessorFuncion implementa la funcin que genera los estados accesibles desde uno dado (posibles movimientos del blanco). EightPuzzleGoalTest define la funcin que identifica el estado final.

La clase aima.search.demos.EightPuzzleDemo tiene las funciones que permiten solucionar el problema con distintos algoritmos.
8

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 configuracin inicial de fichas). ProbIA15HeuristicFunction implementa la funcin heurstica (nmero de piezas blancas). ProbIA15SuccessorFunction implementa la funcin que genera los estados accesibles desde uno dado
operadores: saltos y desplazamientos

ProbIA15GoalTest define la funcin que identifica el estado final. La clase IA.probIA15.ProbIA15Demo permite ejecutar los algoritmos de bsqueda ciega y heurstica.
9

Cmo ejecutar los algoritmos


El funcionamiento se puede ver en los ejemplos, de los que es til analizar el cdigo.
Definir un objeto Problem que recibe:
otro objeto que representa el estado inicial la funcin generadora de sucesores la funcin que prueba el estado final la funcin heurstica, si se utiliza un algoritmo de bsqueda 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 bsqueda y la informacin de la ejecucin del algoritmo de bsqueda. 10

Cmo ejecutar los algoritmos: ejemplo

11

Ejecucin de los ejemplos


Podis ejecutar las demos ejecutando el fichero I:\AIA\AIMA.bat y escogiendo la demo que queris desde el interfaz.

12

Ejecucin 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

Ejemplos: vector de 5 posiciones (probIA15)


El problema se resuelve mediante los siguientes algoritmos:
anchura profundidad limitada profundidad iterativa A* A*PI con dos heursticas

14

Ejemplos: path finder


Interfaz a partir de la cual se puede seleccionar el problema, el algoritmo y varias heursticas. El problema consiste en encontrar un camino entre la posicin azul y la roja.

15

Ejemplos: path finder

16

Ejemplos: path finder


Cosas a observar:
Los algoritmos exhaustivos dejan de ser efectivos a partir de tamaos pequeos. La heurstica influye mucho en la eficiencia de los algoritmos informados. A*PI gana a A* en tiempo y gasta menos memoria.
A partir de cierto tamao, A* deja de ser competitivo.

Hay configuraciones de problemas (ver mens) que no se pueden resolver con ningn algoritmo en un tiempo razonable (hace falta un conocimiento mas especializado).
17

Ejemplos: el viajante de comercio


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

Ejemplos: el viajante de comercio


La clase ProbTSPJFrame permite ejecutar la ascensin de colinas y el temple simulado. Se puede modificar el numero de ciudades. En cada panel aparece la ejecucin del problema del viajante de comercio con ascensin de colinas y temple simulado.
19

Ejemplos: el viajante de comercio


Se puede comprobar que frecuentemente la solucin que da el temple simulado es mejor. Evidentemente, para cada tamao de problema habra que reajustar los parmetros del temple simulado.

20

Ejemplos: el viajante de comercio

21

Ejemplos: antenas de telefona


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

Ejemplos: antenas de telefona


La clase ProbAntenasJ Frame permite ejecutar la ascensin de colinas y el temple simulado.
23

Ejemplos: antenas de telefona


Cosas a observar:
Las heursticas permiten elegir el tipo de solucin (dar prioridad a la cobertura, al nmero de antenas, penalizar los solapamientos). Temple simulado es mas tolerante a funciones heursticas peores y a la eleccin de la solucin inicial. Se puede comprobar que las soluciones con el temple simulado tienen menos variacin que las de la ascensin de colinas.
Hay menos probabilidad de quedarse en mnimos 24 locales y alcanzar el mnimo global.

Las clases de los algoritmos (no informados)


aima.search.uninformed
BreadthFirstSearch: bsqueda en anchura, recibe como parmetro un objeto TreeSeach DepthLimitedSearch: bsqueda con profundidad limitada, recibe como parmetro la profundidad mxima de exploracin IterativeDeepeningSearch: bsqueda en profundidad iterativa, sin parmetros

25

Las clases de los algoritmos (informados)


aima.search.informed
AStarSearch: bsqueda A*, recibe como parmetro un objeto GraphSearch IterativeDeepeningAStarSearch: bsqueda A*PI, sin parmetros HillClimbingSearch: bsqueda ascensin de colinas, sin parmetros

26

Las clases de los algoritmos (informados)


aima.search.informed
SimulatedAnnealingSearch: temple simulado, recibe 4 parmetros:
El nmero mximo de iteraciones El nmero de iteraciones por cada paso de temperatura Los parmetros k y que determinan el comportamiento de la funcin de temperatura

27

Las clases de los algoritmos (temple simulado)


La funcin de temperatura es k y determinan cmo desciende la funcin al descender la temperatura El valor inicial de T se obtiene experimentalmente La funcin que determina la probabilidad de no aceptacin de un estado es: Probabilidad de no aceptacin =
donde E es la diferencia de energa entre el estado actual y el siguiente y T es la 28 temperatura actual

S-ar putea să vă placă și