Bien, ahora escribiremos el
procedimiento "competir por espacio".
Ante todo,
esto involucra un par de condicionales...
Vamos a "indicarle" a las tortugas
hacer esto:
Si existe alguna otra tortuga...
aquí (en ése espacio),
debe morir.
Ésta es la forma extrema
de sobrepoblación.
Ahora tenemos que escribir un procedimiento
para una condición en la que las tortugas morirán,
debido a la sobrepoblación.
Necesitamos establecer un parámetro que esté
relacionado con la sobrepoblación.
Llamemos a ése parámetro, "espacio".
Añadí un "control deslizante" aquí, llamado "espacio".
Sabemos que alrededor de cada tortuga,
existe una vecindad de ocho espacios:
Norte, Sur, Este, Oeste,
Noreste, Suroeste, etc.
Para ésos 8 "espacios", hicimos un
"control deslizante" que va de 1 a 8.
Voy a indicar...,
podemos contar fácilmente
las tortugas y los vecinos.
Si el conteo de vecinos de
las tortugas es ocho menos el
conteo de tortugas...Ésto debería darnos el
número de espacios vacíos.
Si los espacios
vacíos son menos que
la cantidad de espacios que
la tortuga necesita para vivir,
indicamos a la tortuga que muera.
Podemos establecer el espacio, seleccionando
cualquier número de espacios entre 1 y 8.
Si la tortuga necesita 8 espacios
para vivir, el espacio va a ser
muy poco poblado.
Podemos pensar en esto como un recurso que
restringe el crecimiento de esta población.
Voy a hacer una nota aquí, "restricción para
el crecimiento de población".
Debemos agregar comentarios para que otras
personas puedan entender nuestro código.
Así, al volver a esto más
tarde, podemos comprender
qué hacen las partes del código.
Ahora, tenemos que escribir nuestro
"procedimiento de dispersión".
Ése será nuestro último procedimiento.
Para dispersar, sólo hay que indicar a
las tortugas, que se muevan a
uno de los "espacios" que
no tienen alguna tortuga.
Este lenguaje no es tan obvio.....
Se lee bastante bien en Inglés, pero ciertamente no es fácil
de dominar cuando se está comenzando a programar.
Es bueno estudiar un
"código de ejemplo", éste será
un pedazo de "código de ejemplo",
al cual estudiar para recordar
todas estas palabras especiales
y saber cómo funcionan.
Esencialmente lo que estamos
haciendo es: Estamos hablando
de un "conjunto de agentes
de espacios", un subconjunto
de "espacios", los cuales cumplen
esta condición: "ninguna tortuga aquí".
Si el "espacio" no tiene tortugas en él, nos
moveremos a uno de ésos "espacios".
Tenemos que hacer una cosa un poco astuta aquí.
Si indicáramos a las tortugas que trataran de
hacer esto, y no hubiera algún "espacio"
disponible, las tortugas podrían continuar
intentando encontrar un "espacio", y esta parte
del código nunca terminaría.
Así, necesitamos añadir condiciones, para hacer
esto sólo en caso de que haya "espacios".
Entonces es importante correr esto, sólo
si el número de tortugas en la pantalla,
es menor que o igual al número de "espacios".
Podríamos tener más tortugas que "espacios",
entonces esto sería inútil, porque habría
tortugas que nunca encontrarían "un hogar",
el código seguiría corriendo y nosotros
querríamos saber qué es lo que está pasando. Hablo en base a mi experiencia en esto.
Creo que debería funcionar.
Veamos si todo esto puede funcionar ahora.
Todavía hay algunas preguntas.
Creamos una gran población inicial.
Todavía tenemos estas cosas cambiando de color.
Borremos lo que he añadido para hacer una
"dispersión artificial".
Parece que algo está pasando.
No estoy seguro qué.
Corramos esto para conseguir una mayor densidad.
Cuando "damos un paso", deberíamos tener...
Si les requerimos que necesiten mucho espacio..,
vamos a ver si esto se traduce en una
población menos densa, de hecho lo hace.
Al requerir menos espacio, se
obtiene una mayor densidad.
Me parece que tenemos un modelo
que funciona aproximadamente.
Vamos a ver lo que ocurre aquí,
cuando nos concentramos en la población.
Voy a hacer un gráfico sencillo aquí.
De forma predeterminada, se establece
un gráfico que cuenta las tortugas.
Con el fin de obtener realmente la gráfica de interés, debemos
hacerle algo al modelo.
Esto sucederá de forma predeterminada, cada
vez que efectuemos un "tick" (paso de tiempo).
Cada vez que demos un paso, veremos un "tick".
Esto nos va a dar un error la primera vez.
Veamos qué tipo de error nos da.
Si ejecutamos "configuración" y luego "paso".
Observamos que debemos de
utilizar el comando "restablecer instantes"
en "configuración".
"Restablecer instantes"....
"configuración"...., bien.
No estoy seguro de que éso era exactamente lo
que queríamos, pero tratemos de comenzar con
una población escasa
que tiene un tipo generoso...
Veamos si esto funciona.
Población inicial 12.
¿Estoy haciéndolo bien?
Parece que nuestra función de reproducción
no está funcionando.
Averigüemos qué está pasando aquí.
Inspeccionemos esta tortuga.
320. Generación 13.
Les muestro cómo depurar esto...
Comentemos esto,
veamos qué pasa.
La muerte no está sucediendo, ya que deberíamos
tener un crecimiento exponencial al haberla desactivado.
Algo está pasando aquí, cuando "damos un paso",...
Quisiera saber si ésta función ("competir por el
espacio") está causando los problemas. Veamos...
Hay algo acerca de mi "competencia por el espacio"...
No creo que éso sea el problema...
Comentemos sólo esta parte, no creo que
ésto cause problemas.
"Desactivemos" esta
segunda regla en "competir
por espacio".
Supongo que todavía tendremos
el mismo problema.
Hmmm... Supuse mal.
Volvamos a mirar aquí.
Ésta es la regla que
causa el problema.
Si cualesquiera otras tortugas mueren aquí...
Oh, veo el problema.
Necesitamos tener ... Esta regla aquí
está matando a las crías.
Necesito tener esta descendencia "dispersa",
antes de "competir por el espacio".
Así, "reproducimos" y después "dispersamos".
Luego "competimos por el espacio".
Estos programas casi nunca funcionan bien
fuera de la caja.
Espero que esto funcione.
Lo que he hecho es:
reproducir, dispersar, ...
los padres de la generación
anterior mueren y, ...
se compite por el espacio.
Ahora activo que los padres mueran.
Todos están activados, sólo he
cambiado la ordenación.
Así, "configuramos", "damos un paso",
ahora tenemos crecimiento
exponencial y obtenemos una
especie de "nivelación".
No estoy viendo la...
reorganización.
Paso, paso,..., paso.....
Eh, no es lo que esperaba,...
Éso se parece más a lo que esperaba.
Es como una especie de curva sigmoidea.
Voy a competir por una gran cantidad de espacio.
Así, el crecimiento es más lento, y...
hay más variación.
Ok, creo que el modelo,...
Yo diría que este modelo está funcionando,
tenemos crecimiento exponencial y,
a continuación, una especie de "nivelación".
Algo curioso es: ¿porqué tenemos un tipo de
"configuración congelada"?
Éstos son el tipo de preguntas que
pueden surgir cuando
se construyen modelos. Nos preguntamos:
¿Por qué esto funciona de ésa manera?
Si tuviéramos un procedimiento de dispersión
diferente, probablemente veríamos algo más.
Una de las cosas que me gustaría
cambiar en este modelo
es la cuestión de la "dispersión",
para que sea físicamente más realista.
En lugar de sólo tener tortugas que se mueven
"mágicamente" a un espacio, porqué no hacer que
emigren, que se muevan hacia adelante
desde su ubicación actual, hasta que
encuentren un espacio vacío.
Sería un poco más de código, pero...
valdría la pena.
Podría crear patrones interesantes usando diferentes
colores para ver a las diferentes familias,
su migración y su éxito con el tiempo.
Éso sería un proyecto muy cuidado.
Bien, por último, para cerrar la brecha aquí,...
Tenemos un "botón de paso", que pasa
a través de una ruta completa aquí.
El botón "Ir" puede ser un "botón de paso"
que tiene encendido el atributo
"por siempre".
Debemos llamar a éste "Ir".
Éste es un punto
importante a notar, el nombre del botón
no tiene que ser el mismo que el
del comando,
pero si no se pone el nombre del botón,
el nombre del comando
se utiliza como nombre del botón.
Tenemos un buen y pequeño modelo
que tiene restricciones.
En ciertas configuraciones espaciales,
hace...
un buen trabajo de modelación del
crecimiento exponencial y un tipo de
redondeo a una capacidad de carga.