Sie sind auf Seite 1von 6

Ampliaci

on de Inteligencia Artificial (Curso 20132014)

GII-TI

Trabajo final: procesos de decisi


on de Markov

Este trabajo est


a basado en la primera parte del proyecto Reinforcement Learning, uno de los proyectos
de Inteligencia Artificial de la serie The Pacman Projects, de la Universidad de Berkeley (accesibles en
http://inst.eecs.berkeley.edu/~cs188/pacman).
El trabajo tiene dos partes principales:
Implementaci
on de tres algoritmos relacionados con procesos de decision de Markov (MDP): iteraci
on
de valores, iteraci
on de polticas y valoracion de estados mediante muestreo,
Aplicacion a distintos MDP generados a partir de cuadrculas, similares a la que se usa como ejemplo
en las diapositivas del tema 4 (ver figura 1).

1.

Implementaci
on de los algoritmos
Se pide realizar una implementaci
on en Python de los siguientes algoritmos:
Algoritmo de iteraci
on de valores: realiza un calculo aproximado de la valoracion optima de cada estado
de un MDP, actualiz
andola iterativamente mediante las ecuaciones de Bellman. Devuelve adem
as la
poltica (optima) asociada a esa valoracion.
Algoritmo de iteraci
on de polticas: devuelve lo mismo que el algoritmo anterior, pero mediante el
metodo de mejora de polticas a partir de una poltica inicial dada.

El tercer algoritmo a implementar se pedira en la segunda parte. Detallamos a continuacion un poco


mas cada uno de los puntos anteriores.

1.1.

Clase gen
erica MDP

En primer lugar, se pide definir un clase generica MDP, que va a servir para representar un proceso de
decision de Markov. La clase debe tener al menos los siguientes atributos y metodos:
estados: atributo para almacenar una lista con los estados del MDP
estado_inicial: atributo con el estado inicial del MDP.
descuento: atributo que almacena el descuento para la valoracion de las secuencias de estados.
R: metodo que recibe un estado como entrada y devuelve la recompensa en ese estado.
A: metodo que recibe un estado y devuelve la lista de acciones aplicables al estado.
T: metodo que implementa el modelo de transicion. Supondremos que recibe un estado s y una acci
on
aplicable a, y que va a devolver una lista de tuplas [(s1,p1),(s2,p2),...,(sn,pn)] en la que
s1,. . .,sn son los estados que se pueden obtener aplicando a a s, y p1,. . ., pn son las respectivas
probabilidades de que se obtengan.
El constructor de la clase debe recibir como entrada los valores de los tres atributos. Los metodos R, A
y T no hay que implementarlos en esta clase generica (poner pass) en la definicion), sino cuando se definan
MDPs concretos como subclase de esta clase generica.
IMPORTANTE: Los dos algoritmos que se piden en esta seccion se han de implementar usando s
olo
estos atributos y metodos. En la implementacion no se debe usar ninguna particularidad de los ejemplos de
las cuadrculas que se comentan m
as adelante.
1

1.2.

Algoritmo de iteraci
on de valores

Implementar dos versiones del algoritmo de iteracion de valores:


Aplicando iteraciones hasta que se asegura que la valoracion que se tiene comete un error menor que
un  dado (es decir, como el descrito en las diapositivas del tema 4)
Aplicando un n
umero de iteraciones dado (es decir, sin comprobar nada relacionado con el error y
acabando cuando se ha iterado un n
umero de veces dado).
En ambos casos, se pide que adem
as de devolver la valoracion encontrada, se devuelva tambi
en la
poltica
optima encontrada. Ambas (valoracion y poltica) se deben de representar mediante diccionarios
cuyas claves son los estados.
Notese que puesto que tambien se pide la poltica optima, esto significa que como u
ltimo paso, el algoritmo
habra de calcularla a partir de la valoraci
on. Por tanto, ademas hay que implementar una funcion que dado
un MDP y una funci
on de valoraci
on, encuentra la poltica optima asociada a esa valoraci
on. Recuerdese que
X
eso es simplemente aplicar la siguiente f
ormula, para cada estado: (s) = argmaxaA(s)
P (s0 |s, a)V (s0 ).
s0

1.3.

Algoritmo de iteraci
on de polticas

Implementar el algoritmo de iteraci


on de polticas, tal y como se describe en las diapositivas del tema 4.
En particular, debe recibir como entrada un MDP y el n
umero k de iteraciones que se aplican para calcular
V en cada paso (ver los detalles en las diapositivas).
Notese que este algoritmo y el anterior deben de dar aproximadamente el mismo resultado.

2.

Procesos de decisi
on de Markov basados en cuadrculas

En esta segunda parte, se pide definir procesos de decision de Markov que describen el movimiento de
un agente sobre una cuadrcula, del estilo de la cuadrcula que se muestra en las diapositivas del tema 4 (ver
figura 1).

+1

0.8

0.1

0.1

START

(a)

(b)

Figura 1: Cuadrcula del ejemplo del tema 4


En concreto, un agente que se mueve por una cuadrcula puede realizar cuatro tipos de acciones: arriba,
abajo, izquierda y derecha. El efecto deseado de cada accion es avanzar a la casilla en la direccion que indica
la accion (y si hay una pared en la direcci
on que se avanza, se queda en la misma casilla).
Sin embargo, el movimiento deseado ocurre solo con probabilidad 1 p, ya que puede ocurrir que se
mueva en cualquiera de las dos direcciones perpendiculares a la deseada, con probabilidad p/2 cada una. En
lo que sigue, diremos que p es el ruido.
Por ejemplo, en el caso de las diapositivas, el ruido es 0.2, ya que se tiene probabilidad 0.8 de moverse
en la direccion esperada, y probabilidad 0.1 de moverse a cada una de las direcciones perpendiculares. Si
2

el ruido fuera por ejemplo 0.3, habra una probabilidad 0.7 de moverse en la direccion deseada, y 0.15 de
moverse a cada direcci
on perpendicular.

2.1.

La subclase Cuadr
cula de la clase MDP

Representaremos las cuadrculas en Python mediante listas de listas, como por ejemplo la siguiente, que
representa la cuadrcula anterior:
[[ , , ,+1],
[ ,#, ,-1],
[S, , , ]]
Los estados se representan mediante sus coordenadas columna y fila (en ese orden), teniendo en cuenta
que las columnas se numeran de de izquierda a derecha y las filas de abajo a arriba, empezando ambas
a contar desde 1. Los estados terminales se indican con un n
umero, que cuantifica su recompensa. Las casillas
bloqueadas se indican con la cadena # y el estado inicial con la cadena S. El resto de casillas se indican
con un espacio en blanco.
Se pide definir una clase Cuadr
cula, subclase de MDP. Ademas de los atributos y metodos de la clase
MDP, incluir en Cuadr
cula los atributos y/o metodos que se consideren convenientes. El constructor de la
clase Cuadr
cula debe recibir los siguientes argumentos de entrada:
cuadr
cula: una lista de listas como la indicada anteriormente.
recompensa_no_terminales: es la recompensa asociada a los estados no terminales. Por defecto ha
de ser 0.04.
descuento: la tasa de descuento que se aplica en la valoracion de secuencias de estados. Por defecto,
0.9.
ruido: el ruido a la hora de aplicar las acciones. Por defecto, 0.2.
Nota: Para gestionar bien los estados terminales, una posible manera es haciendo que sobre ellos la u
nica
accion aplicable sea una acci
on especial exit, y que el resultado de aplicar exit sobre un estado terminal sea
el propio estado pero con probabilidad 0.

2.2.

Experimentaci
on: c
alculo de polticas o
ptimas en cuadrculas

Se pide ahora experimentar los algoritmos implementados sobre las MDPs correspondientes a una serie
de cuadrculas. En particular, se pueden aplicar a la cuadrcula anterior y tambien las cuadrculas de las
figuras 2, 3, 4 y 5:

Figura 2: Cuadrcula puente

Figura 3: Cuadrcula precipicio

Figura 4: Cuadrcula laberinto


Para una correcta visualizaci
on, se pide ademas implementar una funcion imprime_pol
tica, que recibiendo como entrada una poltica y el correspondiente MDP, imprime una cuadrcula en la que se vea,
mediante flechas, la poltica que se recomienda en cada estado no terminal. Por ejemplo:
>>> mdp_rn=Cuadr
cula(rn_grid,descuento=1)
>>> pi_rn,V_rn=iteraci
on_de_pol
ticas(mdp_rn,40)
>>> imprime_pol
tica(pi_rn,mdp_rn)
----------------| | | |
|
----------------| | * | |
|
----------------| | | | |
----------------Al menos, se han de responder las siguientes cuestiones. En todos los casos, cuando hablamos de los
parametros, nos referimos al ruido, la recompensa en no terminales y el descuento:
Calcular las polticas
optimas que aparecen en las diapositivas del tema 4 y comprobar que salen
iguales a las que se muestran, para distintos valores de la recompensa a los estados no terminales.
Tengase en cuenta que las figuras que se muestran en el tema 4 son para descuento = 1 (notese que
si el descuento es 1, no tiene sentido aplicar la primera version del algoritmo de iteracion de valores,
aunque s la segunda versi
on, y tambien el algoritmo de iteracion de polticas).
En el caso de la cuadrcula puente, dar varios ejemplos de polticas que se pueden obtener con distintos
valores de los par
ametros (ruido, recompensa en no terminales y descuento). Hacerlo de manera que
4

Figura 5: Cuadrcula descuento


en algunos casos compense cruzar el puente y en otros no. Intentar describir situaciones en las que
cambiando s
olo el valor de uno de los parametros pase de aconsejarse no cruzar el puente a aconsejar
cruzarlo.
Las mismas experimentaciones para la cuadrcula precipicio, en las que para ciertos valores de los
parametros se aconseje ir pegado al precipicio y para otros valores se aconseje alejarse del precipicio.
En la cuadrcula del laberinto, lo normal es que la poltica aconseje acciones que apuntan hacia la
salida. Comprobarlo para algunos valores de los parametros, y tratar tambien de buscar valores de los
parametros que aconsejen algo distinto.
En la cuadrcula descuento, dar valores de los parametros para los que las polticas optimas sugieran
los siguientes tipos de caminos:
Preferir salir por +1, evitando el precipicio (estados -10)
Preferir salir por +1, arriesg
andose a pasar cerca del precipicio
Preferir salir por +10, evitando el precipicio
Preferir salir por +10, arriesg
andose a pasar cerca del precipicio
Evitar ambas salidas, y el precipicio.
Se pide adem
as inventar una cuadrcula, y mostrar polticas distintas en esa cuadrcula, dependiendo
del valor de los par
ametros. Se valorara que el ejemplo sea interesante y novedoso respecto de los
anteriores ejemplos.
Todas estas experimentaciones y comentarios, incluirlos como comentarios al codigo.

2.3.

Algoritmo de muestreo para valoraci


on de estados respecto de una poltica

Dada una poltica y un estado s, definimos la valoracion de ese estado respecto de la poltica (notada
V ), como la media esperada (es decir, ponderada por la probabilidad) de las valoraciones de las secuencias
que se pueden generar a partir de s siguiendo la pol
tica . La forma habitual de calcular V es resolviendo
P

el sistema de ecuaciones lineales V (s) = R(s) + s0 P (s0 |s, (s)) V (s0 ) (bien directamente, o mediante
iteracion, como se hace en nuestra implementacion del algoritmo de iteracion de polticas).
Podemos sin embargo calcular una aproximacion de V (s), usando tecnicas de muestreo. La idea es
generar mediante simulaci
on un n
umero grande de secuencias de estados que empiecen en s y que lleguen a
estados terminales, siguiendo la poltica . Cada secuencia la podemos valorar (sumando las recompensas de
5

los estados por donde pasa, con el correspondiente descuento) y finalmente podemos obtener la media de esas
valoraciones. Con un n
umero suficientemente grande de secuencias generadas, esa media se aproximar
a al
valor V (s).
Se pide:
Definir una funci
on estima_valor_muestreo que recibiendo un estado s , una poltica , un MDP y
un n
umero n de secuencias a generar, devuelve una estimacion de V (s) siguiendo el procedimiento
de muestreo descrito anteriormente.
Comprobar el comportamiento de esta funcion calculando el valor de un estado de alguna cuadrcula,
respecto de una poltica
optima de las calculadas en los algoritmos anteriores (recordar que dichos
algoritmos devuelven tanto una poltica como una valoracion).
Comparar el valor calculado con el valor calculado por los algoritmos anteriores.
Por ejemplo, en la siguiente sesi
on, calculamos, con el algoritmo de iteracion de polticas, la poltica
optima y su valoracion asociada (pi_rn y V_rn, respectivamente). Luego calculamos con el algoritmo de muestreo
las valoraciones (respecto de pi_rn) de algunos estados, y podemos ver que son bastante aproximadas.
>>> mdp_rn=Cuadr
cula(rn_grid,descuento=1)
>>> pi_rn,V_rn=iteraci
on_de_pol
ticas(mdp_rn,40)
>>> V_rn
{(1, 2): 0.7615582191780823, (3, 2): 0.6602739726027398,
(1, 3): 0.8115582191780822, (2, 3): 0.8678082191780823,
(3, 3): 0.9178082191780822, (4, 3): 1, (4, 2): -1,
(3, 1): 0.6114155251141552, (4, 1): 0.3879249112125825,
(1, 1): 0.7053082191780823, (2, 1): 0.6553082191780822}
>>> estima_valor_muestreo((2,3),pi_rn,mdp_rn,100000)
0.8675927999990032
>>> estima_valor_muestreo((3,1),pi_rn,mdp_rn,100000)
0.6109783999998482
>>> estima_valor_muestreo((1,1),pi_rn,mdp_rn,100000)
0.704708400000536
Nota: Para generar una secuencia de estados mediante muestreo a partir de un estado s, comenzamos
en s y vamos aplicando la acci
on que en cada momento recomiende la poltica, hasta que lleguemos a un
estado terminal. En la aplicaci
on de una accion a un estado, influye la aleatoriedad, pero ha de hacerse
siguiendo la distribuci
on de probabilidad indicada en el modelo de transicion.