ok, tenemos también los agentes basados en metas y lo agentes basados en metas son
agentes que están tratando de alcanzar alguna meta; uno puede pensar en los
agentes basados en la utilidad, pero son un poco diferentes, los agentes basados en
la utilidad, se puede decir que la meta es maximizar, pero aquí necesitamos algunos
criterios, algunas metas especificadas a alcanzar en el futuro, como uno quiere, en
el ejemplo, podemos decir que si uno quiere manejar su auto desde el comienzo
en un lugar hasta el lugar donde está el hogar o desde el hogar hasta el lugar de
trabajo y entonces ustedes tienen la meta exacta de que es lo que están tratando de
alcanzar y si quieren alcanzar esa meta entonces es eso; no hay un sentido de usar
funciones de utilidad o algo así, en vez de satisfacer y alcanzar esa meta como una
parte de lo que se está intentando; ahora a veces uno hace algunas clases de
mediciones, para saber si estoy cerca de la meta; esa clase de utilidad, pero no
quiero sonar como que son extremadamente diferentes, sino que son formas distintas
de pensar en el conocimiento de los agentes
volvemos acá y vamos a abrir el modelo basado en metas, escribimos "goal" y en el
capítulo 5 lo encontramos y este es el modelo del tráfico en grilla que es un
poco diferente del modelo básico del tráfico que en verdad opera en una grilla
de 2 dimensiones y la versión tradicional de este modelo en forma esencial se asigna
algo diferente para que el tráfico realice que corran en diferentes sentidos y traten
de ver como se puede ajustar la forma en que los autos se mueven, aunque los autos
se mueven siguiendo un patrón simple, arriba y abajo, acá le estamos dando a
cada agente una meta, un hogar y un lugar de trabajo, entonces están constantemente
moviéndose del hogar al trabajo y ustedes pueden ver que se mueven por ahí y algunos
giran a la izquierda o a la derecha y vemos diferentes clases de giros que están
haciendo ahora en el sistema; a medida que se mueven por ahí, están tratando de
alcanzar esta meta; están tratando girar a la izquierda o a la derecha para poder
quedar más cerca de su meta y entonces en un tiempo determinado, el tiempo cambia y
van al hogar, van al trabajo y luego del trabajo, van al hogar
miremos esto con más detalle, tenemos el comando "seguir" en NetLogo que nos
permite hacer esto, podemos pedirle que siga a una de las tortugas y entonces va a
quedar iluminada esa tortuga en particular y les podemos permitir, podemos verlas
yendo entre el trabajo y el hogar, nos muestran cual es su meta, cuando las
seguimos, está tratando de ir al trabajo y ahora está tratando de ir a la casa; ahora
va al trabajo, a la casa, etc. es bastante lindo ver como funcionan; esta tortuga en
particular, esta tratando de ir y venir, hay otras y algunas veces las pueden ver
cuando se mueven por ahí, que quedan como estancadas y quedan yendo y viniendo,
yendo y viniendo, eso es debido a que el código que escribimos para poder
determinar como se hace para ir y venir desde el trabajo o desde la casa no es
siempre el mejor código; les digo la verdad; algunas veces quedan estancados en
lo que llamamos un mínimo local, un lugar de donde no pueden salir, de hecho esta
de acá está estancada ahora mismo, no debido a que el código ande mal sino por
el tráfico, hay mucho tráfico en esa intersección y eso causa el problema ya
que no puede atravesarlo para poder resolverlo; esto sucede definitivamente y
podríamos escribir un código que recablee y que permita que vayan a otros lugares
pero quisimos que el ejemplo sea simple e ilustrativo, vamos a ver un poco el código
sólo para tener una idea de que es lo que está haciendo en verdad, entonces ahora
cuando miramos al código, el código de go tenemos ahora este comando que dice que
"enfrentemos el siguiente parche" que no estaba en el modelo original, entonces
veamos que es lo que hace ese nuevo código obviamente, ya hablamos un poco de eso
antes, pero enfrentar le dice a una tortuga que encare para una dirección en
particular y en este caso es que encare un parche y que trate de determinar cual es
el siguiente parche; hay un montón de código acá que básicamente establece las
metas y luego se mueve al siguiente parche que se encuentra más cerca de esa meta,
entonces cuando está yendo a casa y el siguiente parche es mi casa, entonces
tengo que volver al trabajo y si llego al trabajo, entonces necesito ir a casa y así
si la meta es igual a "casa" y un miembro está en un parche aquí en el vecindario de
la casa, entonces asigne mi meta como el trabajo, así voy al lugar siguiente y uno
puede ir y venir y entonces de esa forma tenemos siempre actualizada la
localización; la próxima cosa que vamos a hacer es es intentar darnos cuenta cual de
los otros parches están disponibles para moverse; las opciones son del vecindario
cuyo color de parche es blanco, son rojos son el camino, o son verdes que es la luz
del tráfico, que podemos considerar que cuelgan por encima del camino, entonces
son elecciones válidas; hay opciones, uno de esos parches va a minimizar la
distancia entre mi meta y yo mismo, entonces con cada parche que se encuentra
cerca de mi casa o de mi trabajo, depende de hacia donde me estoy dirigiendo,
entonces va a minimizar la distancia entre ellos, va a elegir ese parche para
minimizar la distancia cada vez que se elija esa opción; esta es la meta de los
agentes y cada uno tiene una meta diferente y cada vez que suceden los pasos
como ticks, entonces se moverá más cerca de esa meta, ahora la meta cambia a lo
largo del tiempo, lo cual lo vuelve interesante, pero es esencialmente lo que
es; por qué estamos trayendo este tipo de problemas donde a veces tenemos a las
tortugas moviéndose para adelante y para atrás, por ejemplo, porque ellas pueden
enfrentarse; los parches quedan fuera de los límites, los asigamos así, son las
cuadras, las cuadras de las calles sobre las que simplemente se puede manejar sobre
esas cuadras de la ciudad; entonces puede ser posible que una tortuga encuentre en
una cierta forma que es lo mismo alcanzar el objetivo y entonces si es un poco más a
la izquierda entonces puede ser el caso que moviéndose a la izquierda en realidad
quede más cerca la meta, pero si se mueve a la derecha puede que se beneficie al
encontrarse justo en el medio, puede que cada vez que se mueve un parche para un
lado o para el otro, quede levemente más lejos de su meta y por lo tanto queda
moviéndose para adelante y para atrás, hay formas de encarar este problema, de hecho
hay toda una literatura en Inteligencia Artificial que trabaja sobre la
planificación de senderos y en búsquedas y que nos previene de volver atrás por los
mismos pasos que se encuentran, para poner un, para los objetivos de ésto, no
quisimos hacer el código muy complejo y entonces no incluimos mucha de esa
discusión; pero como un ejercicio para que hagan en casa, siéntanse libres de cambiar
el código y vean si pueden darse cuenta como pueden parar el hecho de que las
tortugas queden atrapadas en lo que se llama "mínimo local", como espacios
locales que están muy cerca del óptimo pero no lo suficiente, hay ahí otros
óptimos mejores, mejores soluciones en algún lado; fíjense si se pueden dar
cuenta, siéntanse libres para modificar el código y veremos que sale
por último tenemos los agentes adaptativos y estos son agentes que contienen no sólo
las decisiones sino las acciones que quieren tomar, pero también las
estrategias; la idea que a veces trata de expresar esto es que la acción que un
agente puede tomar y en otros casos de conocimiento de agente es la misma dado el
hecho de que están viendo el mismo medio ambiente, pero un agente adaptativo en
realidad aprende de las experiencias pasadas y realiza diferentes acciones en
el futuro; ustedes pueden tener un agente adaptativo que sea un agente basado en
utilidad, donde están tratando de darse cuenta cuales son las acciones que pueden
maximizar la utilidad, basados en la experiencia que puedan tener o una meta
básica, que no alcancen esa meta debido a que en vez de ir para un lado fueron para
el otro, aún cuando estaban en el mismo lugar y basados en la misma dirección y
eso sería todavía un agente adaptativo, es un agente que cambia no únicamente las
acciones que lleva a cabo sino las reglas mediantes las cuales decide que acción
debe tomar y entonces creamos un modelo que se llama "tráfico básico adaptativo"
en donde los agentes andan por ahí un poco hasta que aceleran y observan cual es la
velocidad máxima y entonces tratan de darse cuenta cual es la mejor aceleración
para el sistema como un todo, déjenme que les muestre
ok acá vamos a ver el ejemplo final del conocimiento de agente que vamos a
explorar en la biblioteca de modelos de NetLogo, en el capítulo 5, del manual del
IABM ustedes van a encontrar el que se llama "Traffic Basic Adaptive Individuals"
y con eso vamos a estar trabajando hoy, en esta sección; el modelos es muy similar al
modelo original del tráfico básico, tiene el "setup" y el "go" que es el mismo de
antes, ustedes se darán cuenta que hay un par de nuevos deslizadores y de gráficos
nuevos, hay algunos botones nuevos, hay un nuevo deslizador que se llama "aceleración
inicial" en vez de "aceleración", debido a que les vamos a permitir a los agentes que
puedan modificarla a lo largo del tiempo, también tenemos un deslizador que se llama
"ticks entre tareas", que básicamente controla cuan a menudo los agentes van a
explorar nuevas soluciones, nuevas adaptaciones, primero explorando aquellas
que ya tienen y van a ver este gráfico que nos muestra la aceleración, así podemos
tener alguna idea de cual es la distribución de la aceleración; entonces
miremos que hace el "adaptive go", cuando lo presiono, ustedes van a notar que este
gráfico ya no tiene una sola línea, pero ahora tiene números diferentes que indican
como los diferentes autos están explorando las aceleraciones diferentes y algo muy
interesante sucede cuando le permitimos a este modelo que corra por un tiempo, ahora
vemos básicamente que se ilumina como el modelo básico del tráfico, con la
diferencia de que en este gráfico, con las velocidades máximas y mínimas no son como,
son volátiles, hay un poco más de estabilidad en términos de la forma en que
trabaja y lo que quiero decir con eso es que el hecho de que los autos vayan hacia
un 0 absoluto todo el tiempo, si lo aceleramos un poco, ahora empezamos a ver
más, ahora la velocidad mínima es mayor que 0 y eso nos indica que los autos no
están, no van a frenar completamente, no están frenando y llegando a un atasco de
tráfico, están yendo hacia un atasco de tráfico leve y si dejamos que siga
corriendo el modelo, aún por más tiempo eventualmente llegaremos a un estado de
flujo libre donde todas las tortugas, todos los autos se moveran a una velocidad
justa y alta y como pueden ver, aún en el medio hay un poco de atasco de tráfico, en
el medio de esto, pero aún con la velocidad mínima del tráfico, los libera
eso es algo bueno cuando puede haber mucho tráfico luego; debido a que se están
adaptando en forma constante, eso sucede todo el tiempo; si lo dejan corriendo lo
suficiente
eventualmente llegarán a una situación en la que todos los autos se estarán moviendo
a su máxima velocidad y eso es debido a que a medida que continúan moviéndose el
promedio de aceleración sube y baja y los separa lo suficiente y por lo tanto ya no
es un problema
ahora miremos un poco el código que hace que esto suceda; déjenme que lo agrande un
poco; ahora hay un procedimiento que se llama "go adapative", que básicamente le
dice a la tortuga que se adapta y el código para que se adapte, básicamente
dice, esto es lo que vamos a hacer
cada vez que corremos una prueba recuerden cuan rápido podemos ir durante esa prueba
y cada vez que alcanzamos un poco más de velocidad, ponemos esa velocidad en la
prueba, ahora si el modelo, si es el tiempo para la prueba, si es tiempo de
explorar una nueva aceleración, entonces veremos cual fue la velocidad promedio
durante la última prueba que corrimos, si la velocidad promedio durante ese tiempo
fue más grande que la mejor velocidad que hayamos tenido antes, entonces vamos a
sumarla a la aceleración que estuvimos usando la última vez, esa es nuestra mejor
aceleración y vamos a registrarla a lo largo del tiempo, ahora lo que vamos a
hacer, una vez que hicimos todo eso, si es el caso entonces lo que vamos a hacer es
cambiar la aceleración en forma azarosa un poco, vamos a mover arriba y abajo con un
azar basado en un número de punto flotante entre el valor negativo .01 y el valor
positivo .01, por supuesto que dejaremos que sea 0; vamos a reiniciar la velocidad,
entonces si encontramos una buena velocidad lo que vamos, vamos a recordar
cual es pero luego vamos a usar la utilidad y ver si era mejor esa velocidad
si no lo hacemos, entonces vamos a asignar la velocidad que sea igual a un poco como
fue la última velocidad más la mejor velocidad que tenemos
esto es debido al hecho de que puede que imaginemos, debido a que otras cosas están
cambiando en el modelo, una vez que uno mira a la aceleración el modelo se
comporta de forma extremadamente rápida, eso puede ser un escenario único, a lo
largo del tiempo vamos a promediar la mejor velocidad que hemos visto hacia una
velocidad promedio y entonces vamos a permitirle olvidar como lo hizo durante
aquel tiempo y que trate
de buscar por la mejor velocidad que pueda mostrar y ese es el caso donde vamos a
reiniciar la velocidad de vuelta a la velocidad que tuvo, porque esa fue muy
buena y entonces vamos a tratar de mantenerla, ok?
este es un muy buen ejemplo de adaptación la velocidad y las acciones de los agentes
van a variar basadas en su conducta pasada si tuvieron una muy buena conducta en el
pasado, dada esa aceleración entonces van a continuar usando esa aceleración en el
futuro, si no tuvieron una buena aceleración en el pasado, entonces van a
tratar de hacer algo diferente en el futuro
este no es el 1er ejemplo de un modelo de agentes adaptativo que vemos en esta clase
les voy a decir cual fue el otro modelo que vimos, del que estuvimos hablando
bastante, pero en vez de decírselos se los voy a dejar como una pregunta; piensen y
traten de recordar, que otro modelo en el cual los agentes actúan diferente en el
futuro basados en su conducta pasada, ese también es un modelo basado en agentes
adaptativo