Está en la página 1de 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.

6
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
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
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

También podría gustarte