1.9 Nuestro segundo modelo en Netlogo
Construyamos nuestro segundo modelo, en base al primero
Lo primero que haremos es hacer una copia de él, ant.nlogo
Hacemos click derecho sobre el ícono de Netlogo
clickeamos sobre "copiar" o
hacemos ctrl + v,
lo que haya en tu sistema operativo para copiar
Haz una copia de ellos, voy a renombrarlos
como ant2. nlogo.
Ahora hago doble click para abrirlo
y lo etiquetamos.
Haciendo click derecho sobre esta etiqueta
menú "edit" y llamándolo hormigas 2
Tenemos una hormiga que puede moverse por ahí,
démosle ahora algo para comer.
Vamos al código y hagamos crecer algo de comida para la hormiga
Entonces en el procedimiento "setup" escribiremos "grow-food" (crece comida)
bien, pero ahora tenemos que decirle al sistema cómo hacer crecer esa comida
ponemos aquí un nuevo procedimiento
"to grow-food" y lo que vamos a hacer es
"ask patches set pcolor green" y luego "end"
Déjenme explicarles sobre los "patches" (área).
Volvemos a la interfaz y pueden ver el mundo
que es esta área negra, podemos hacer click derecho
"edit" y observen que nos muestra las coordenadas del sistema
del mundo, probablemente sea difícil de verlo en la pantalla
pero lo pueden hacer en Netlogo y verlo en directo
donde las coordenadas 0 - 0 están en el medio
y aquí vamos desde menos 16 hacia 16, en la vertical
y desde menos 16 hacia 16 en la horizontal
y así toda la caja es una grilla de 33 por 33 celdas
que son llamadas "patches" (áreas)
y aquí tenemos el número de pixels por área
aquí hay 13 y así sucesivamente.
Entonces cada área tiene sus propias propiedades
como el color. Si vuelvo al código
y les digo a todas las áreas que asignen su color,
pcolor es el color del área,
a verde. Veamos pues qué sucede cuando clickeo en "setup",
de hecho, todo se tornó verde.
Podemos ver entonces a la hormiga viviendo en un mundo de pasto.
Volvamos a la pestaña del código
y escribamos un código para que la hormiga coma el pasto
Vamos a escribir lo siguiente justo aquí.
"if pcolor = green", voy a poner un comentario aquí,
si la tortuga está posicionada sobre un área verde,
Esto es decirle a la tortuga que mire a las áreas y si
se encuentra sobre un área en particular y
si el área es verde, entonces esto es lo que tiene que hacer:
va a comer el pasto y asignamos el color nuevamente a negro
Así "set pcolor black"
y luego mantenemos un registro de cuanta comida consumió
entonces vamos a asignar la comida consumida
como comida consumida más uno.
Y ahora vamos a hacer una cosa más
que es tener, en su cuerpo, una etiqueta
que nos diga cuánta comida comió.
Así, "set label food-eaten"
Esto es todo lo que le vamos a decir a la tortuga que realice.
Aquí me doy cuenta que tengo que poner este paréntesis, justo aquí
Ahora voy a indentar (con la tecla tab), a donde debería ir.
Ahora tengo estos dos paréntesis este y este, envolviendo a todos
los comandos que usamos para decirle a la tortuga que haga algo
Le decimos que gire a la izquierda, que vaya hacia adelante,
que mire el área y si el color es verde,
asigne el color a negro, incremente la cantidad de comida consumida
en uno, y la etiquetamos para saber cuánta comida comió la hormiga.
Ahora sólo queda una cosa por hacer, que es asignar la comida consumida
Las tortugas tienen algunas clases de
variables asociadas con ellas, llamada food-eaten,
Uno puede pensar que es el estómago de la tortuga,
tenemos registro de cuanta comida se consumió,
la tortuga no digiere nada en este modelo.
Para hacer eso voy a escribir:
"turtles own [food-eaten]" y esto lo que es,
es una variable llamada food-eaten,
específica de cada tortuga, cada tortuga tiene su propia variable
food-eaten, así cada tortuga puede tener una cantidad diferente de food-eaten
Aquí arriba en "se up" voy a asignarla a 0
set food-eaten 0
Nos aseguramos de que comience en 0
y a medida que la hormiga come, va acumulando la comida.
Probemos esto, se ve bien,
volvemos a la interfaz,
lo hacemos un poco más lento
así podemos ver a la tortuga comiendo.
La tortuga, perdón, la hormiga anda a través del mundo
moviéndose alrededor, cada vez se mueve
a través del mundo, se posiciona en un área verde
y come la comida que hay allí.
Recuerda que se mueve entre 0 y 3 pasos cada vuelta
y come la comida luego de cumplir con los pasos
La vemos corriendo alrededor
podemos acelerarlo un poco
y podemos ver a la hormiga dando vueltas y comiendo toda la comida
Probablemente no puedas verlo en esta pantalla
pero la hormiga tiene una etiqueta
que muestra cuanta comida viene comiendo
es mucha comida para una sola hormiga pequeña
y la próxima cosa a hacer
es darle a nuestra hormiga una colonia
Agreguemos entonces más hormigas
La forma de hacerlo es agregar una población
y esto nos permitirá usar nuestro modelo
para asignar la medida de esta población
Por lo tanto voy a arriba, al menú de la interfaz
y hago click sobre "slider"
Voy a poner un "slider"
voy a llamar a la variable global "population",
voy a poner la mínima de
población en 1 y la máxima, digamos, 200
podemos permitir que el usuario la incremente de 1 en 1
y el valor inicial será de 50, suena bien
hacemos click sobre "Apply", luego "Ok",
Movamos esto, selecciono, "move", arriba
Ahora le tenemos que decir al código qué debe hacer
esta variable de población
Vamos entonces al panel del código
y en vez de "create turtles 1"
voy a poner "create-turtles population"
así el usuario puede asignar el número de la población
y así el código creará esa cantidad de tortugas
Veamos entonces que pasa cuando hacemos click en "setup"
Tenemos todas nuestras hormigas
justo en el medio hay 50 de ellas
Dejemos que arranquen
podemos verlas moviéndose todas haciendo las mismas cosas
aunque algunas de ellas realizan algunas elecciones al azar
Se puede ver como algunas actúan en forma diferente
y si aceleramos, podemos verlas como verdaderas hormigas, moviéndose
comiendo comida. Probemos incrementando la población
130 parece ser un buen número de hormigas
¡Ahora realmente hay una multitud!
Hay mucha población, creo que debería ir al código y hacerla un poco más pequeña
Asignemos su medida en 1
Veamos qué sucede, "setup" y ahora son más pequeñas
no se pueden ver muy bien, pero hay más espacio para cada una de ellas
Es muy pequeño para que lo puedan ver en sus pantallas
pero cada hormiga tiene una etiqueta que muestra cuanta comida comió
Lo que nos gustaría saber es cuánta cantidad de comida comió la colonia
Entonces lo que voy a hacer es agregar un "plot", que muestre a lo largo
del tiempo cuánta comida fue consumida.
Volvemos al menú de la interfaz y elegimos "plot"
Ponemos el "plot" aquí, y me pide que rellene con unas cuantas cosas
lo voy a llamar "Total Food Eaten", hay que tener cuidado con el mínimo
y máximo, llamada eje de las X, "Total Food Eaten"
y el eje de las Y es "Time"
llamemos al lápiz, el color será negro
el lápiz se llamará "total-food-eaten"
y voy a dar un comando para el plot
aquí le voy a decir que dibuje
la suma de la comida consumida por las tortugas,
esto es, mire a cada tortuga, mire cuanta comida consumió
sumarice y dibuje esa cantidad.
Ok, aplicamos,
ups, tengo un error, este debería ser el eje de las Y, "Total Food Eaten"
y éste debería ser el eje de las X "Time".
Ok, seleccionémoslo
movámoslo, hagámoslo un poco más alto
así lo podemos ver, ok.
Y ahora veamos si funciona el "setup",
ahí va, podemos ver el plot,
vemos como cambia la cantidad
y esto muestra cuán rápida es la comida consumida
y podemos jugar con la medida de la población y ver cómo afecta.
Cuán rápida la comida es consumida.
Para terminar nuestro modelo
permitamos que el usuario pruebe con otras variables que las hormigas
obedecerán. Por ejemplo, pongamos un "slider" que le permita al usuario
asignar el máximo de la medida del paso y el ángulo máximo de rotación
Voy a seleccionar el "plot" y bajarlo un poco para hacer espacio y poner
otros "sliders". Voy aquí, selecciono "slider", llamo a la variable
"max-step-size", que su mínimo sea 1, su máximo que sea 10,
su valor inicial que sea 4, ok,
movemos esto aquí,
los dos, estos muchachos para arriba.
Agreguemos otro "slider"
al que llamaremos "max-turn-angle", damos ok
y este será, digamos, un mínimo de 1 grado un máximo de 180.
Ok, el valor inicial será de 60, aplicamos, damos ok,
lo seleccionamos, lo movemos.
Ok ahora tenemos que poner estas variables en el código,
así aquí en vez de decir 60, ponemos "max-turn-angle"
y lo mismo aquí "max-turn-angle".
Ok, tenemos "right random max-turn-angle left random max-turn-angle",
seguro notaron, si prestaron atención, que esta instrucción de azar "random"
va desde 0 hasta menos 1, max-turn-angle menos 1.
Realmente el max-turn-angle es un poco, debería ser el max-turn-angle
debería ser éste menos 1, pero no voy a insistir mucho en eso.
Ok, aquí tenemos la misma cosa en vez de 4, voy a decir
max-step-size.
Entonces probemos este código.
Por cierto, me doy cuenta que este código puede ser difícil de ver.
Voy a subirlo a la página junto a los materiales del curso,
se llama "ant2.nlogo" y así podrán bajarlo y pegarle una mirada.
Será utilizado durante la tarea para el hogar.
Ok, ahora veamos si esto funciona,
parece que funciona.
Otra cosa que puede ser de ayuda sobre netlogo es que a veces
netlogo se cuelga, aún si se hace click en el botón"go", no se apaga
porque está ejecutando muchos comandos. En el menú herrmientas "tools"
hay un comando "halt", que se puede usar para frenar el programa ya que
siempre funciona para frenarlo.
Es de ayuda en caso de que por alguna razón, el programa se cuelgue
y no se puede presionar el botón"go".
Ok, hagamos un experimento, incrementemos el max-step-size
a 10, y veamos qué sucede.
Ahora, parece que las hormigas quedan atrapadas en los bordes
y se puede jugar con los diferentes, con estas tres diferentes variables
y ver cuánto tiempo tardan en comerse toda la comida. Nos gustaría frenar
cuando toda la comida haya sido consumida, para que podamos ver
exactamente cuántos "ticks" les tomó comerse toda la comida.
Entonces voy a colocar un comando para hacerlo, voy al código.
Aquí está el comando que usaremos para frenar la corrida.
Si no hay ningún área con color igual a verde (todo se volvió negro),
entonces haremos esto: frenarlo. Esto es un tipo de sintaxis
que se usa en netlogo, se puede negar, se puede preguntar por cualquier
área con alguna propiedad y frenarlo.
Probemos todo ahora, asignemos la población a 200
y el max-step-size a 4, el max-angle-turn a 60 y veamos cuán rápido
estas hormigas pueden comer toda la comida.
Lo hicieron en sólo en 105 ticks.
Ahora salvamos nuestro modelo, yendo al menú de archivo y
haciendo click sobre "save"
y así terminamos nuestro segundo modelo