Upload
cristian-escorcia-espitia
View
56
Download
0
Embed Size (px)
Citation preview
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
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
(representacin del estado, operadores). 5
6
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.
6
7
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
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, 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
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 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
10
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
11
Cmo ejecutar los algoritmos:
ejemplo
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 final (En este caso lo desconocemos.) 18
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 locales y alcanzar el mnimo global. 24
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 temperatura actual
28