Introducción a la Complejidad: Tarea 1, Avanzada
Este es un tutorial que explicará la opción avanzada de la tarea
Por favor abran el modelo de NetLogo "Multiple Ants. nlogo"
que se encuentra en la sección "Course Materials" del website
cuando lo abra la interfaz se debe ver asi
Ya le hicimos unas cuantas modificaciones en las primeras secciones de la tarea
y no lo hemos eliminado.
Lo primero que quiero hacer es recolorear las hormigas
para que siempre se vean rojas
Para eso eliminaré estas dos líneas de código
eso lo hará menos confuso...
Vuelvo a la Interfaz
La tarea nos pide crear el rastro de feromonas que dejan las hormigas para que otras lo sigan,
una vez que encuentran comida, y ver si así el proceso es mas rápido que en el caso actual.
Hagamos eso, vamos a la sección de código
Primero creemos una variable patch y llamemosla "pheromone"
Lo hago aquí
Siguiente, bajamos al setup
necesitamos hacer el setup de los patches, para tener también feromonas
cambiamos set-up-nest a set-up-patches
le pedimos a patches que inicialice "pheromone" en 0
entonces: set pheromone 0
y revisamos...
ahora, queremos que las hormigas dejen un rastro de feromonas
luego de que comen y se comienzan a devolver al nido
y luego queremos que las otras hormigas sigan ese rastro.
Para hacer esto me voy a nuestro procedimiento return-to-nest
que escribimos antes
y añadimos una linea para fijar el nivel de feromonas del patch
entonces "set pheromone pheromone + 1" (nivel actual de feromonas + 1)
y luego para visualizar cuantas feromonas hay en cada patch
voy a ponerle una etiqueta: set plabel pheromone, el valor numérico de feromonas
también podría usar otro color para esto si quisiera
pero creo que es interesante usar esta etiqueta
entonces, revisamos a ver si funciona...
Parece que sí.
Parece que las hormigas están recolectando comida y devolviéndola al nido
y dejando un rastro de feromonas mientras lo hacen
el cual aumenta numéricamente
Ahora, queremos que la feromona se evapore en el tiempo
nos devolvemos al código para hacer eso.
Entonces creamos una nueva línea en el procedimiento go
la llamaremos evaporate-pheromone
Ahora escribamos ese procedimiento
"to evaporate-pheromone"
queremos que la feromona tenga una probabilidad de evaporarse
o sea, un número entre 0 y 1
entonces creemos una variable temporal y la llamamos x
que será un decimal aleatorio entre 0 y 1
"let x random-float 1"
y luego "ask patches with [peromone > 0]" (con feromona mayor que cero)
entonces cualquier patch que tenga feromonas.
si x es menor que
la probabilidad que decidamos, que será una barra que pondremos en la interfaz
y llamaremos a esa barra "probabilidad de evaporación"
entonces "probability-to-evaporate"
entonces, haremos que la feromona sea su valor actual
y, digamos, -1
para que la feromona se evapore gradualmente.
y queremos verlo, así que volvemos a poner la plabel.
Y tenemos que agregar esa barra que mencioné
para hacer eso, vaya a la interfaz
a este botón, y elija "slider"
y lo pondremos acá un segundo, y lo llamaremos
probability-to-evaporate
y será un número entre 0 y 1
con incrementos de .01
Y que inicialmente sea .1
...me faltó una e... presiono ok
Y quiero mover esta barra para que este debajo de las otras
voy a mover esta ventana de gráfico para abajo
y alinearla con el limite del Mundo para que se vea bonito
y luego muevo la barra para acá
y la hago del mismo ancho que las otras barras
entonces... podemos estar listos
reviso... de nuevo a la interfaz
corramoslo...
y los niveles de feromonas deberían decrecer
parece que los están haciendo
eso es bueno...
Ahora, el problema final
es que las otras hormigas sigan el rastro de feromonas
hagamos eso a continuación.
Por cierto, la manera de elegir distintas ventanas en la iterfaz
es clickear un espacio vacío en la interfaz y arrastrar sobre la barra o lo que sea
y también se puede hacer click derecho luego de elegir el botón para editarlo de distintas maneras.
Ahora vamos al código y cambiar la manera en que se mueven las hormigas en su mundo
vamos a to look-for-food
y vamos a agregar un poco de código aquí
vamos a poner unas variables nuevas
digamos,
let pheromone-ahead? scent-at-angle 0
y ya casi explico lo que eso significa
let pheromone-right? scent-at-angle 45
y... let pheromone-left? scent-at-angle -45
este código es muy similar al modelo de hormigas de Net Logo en la libreria de modelos
básicamente estamos pidiendo a cada hormiga que vea hacia adelante,
y un poquito a la derecha y otro poquito a la izquierda
para que determine si hay feromonas en esas direcciones
y si hay, que las siga...
y sino que camine aleatoriamente
que es este código que mantendremos igual
luego haremos una serie de declaraciones ifelse
ifelse pheromone-right (a la derecha) es mayor que pheromone-ahead (adelante)
o pheromone-left (izquierda) es mayor que pheromone-ahead
ifelse pheromone-right es mayor que pheromone-left, vamos a movernos a la derecha 45.
Sino... a la izquierda 45.
y si ninguna es true, quiere decir que hay feromonas hacia adelante o no hay feromonas
entonces.. if pheromone-ahead? = 0
en ese caso seguimos con este procedimiento... un bracket ahi
y cierro el bracket.
Revisamos.... y nos dice que no hay nada llamado scent-at-angle
es cierto, no lo hemos escrito aun
bajemos al código y lo reportamos
to-report scent-at-angle
y luego le meteremos un ángulo
hagamos que p sea el patch-right-and-ahead
estas son primitivas de NetLogo
si quieren revisar lo que significa una primitiva pueden seleccionarla
y luego darle click derecho / quick help
y esto les da una pequeña sinopsis sobre lo que es.
entonces usamos los ángulos que le metimos y
luego la distancia hacia adelante, que es 1
si no hay feromonas, entonces report 0
y sino, reporte el nivel de feromonas "report [pheromones] of p"
y eso sería...
Ok, revisamos el codigo
No hay bracket que cierre este bracket
entonces... se me olvido poner un bracket para cerrar acá
y también veo que faltan un par de brackets
para estas lineas, lo agrego...
reviso, todo bien...
De vuelta a la Interfaz....
y... parece que el comportamiento es bastante bueno
podríamos analizarlo un poco más...
y hacer algunas mejores observaciones sobre como está funcionando
pero dejaré que eso lo hagan ustedes....
Noto que muchas hormigas están recolectando en los bordes del mundo visible
y podemos arreglar esto yendo a settings
y clickeando en "World wraps horizontally" y "World wraps vertically"
y Ok...
Ahora parece que las hormigas son muy rápidas en comerse la comida
en 73 ticks, antes de las feromonas duraban como 128 ticks
Eso fue la tarea número 1, espero que hayan disfrutado el tutorial. Nos vemos la próxima!