BehaviorSpace Guide en Español

NetLogo 6.4.0 User Manual

Esta guía consta de tres partes:

Se añadieron varias funciones nuevas en NetLogo 6.4:

Más acerca de las modificaciones en Espacio-Conductual en NetLogo 6.4:

¿Qué es Espacio-Conductual?

Espacio-Conductual es una herramienta de software integrada con NetLogo que permite realizar experimentos con modelos.

Espacio-Conductual ejecuta un modelo varias veces, variando sistemáticamente la configuración del modelo y registrando los resultados de cada ejecución. A este proceso a veces se le llama “exploración de parámetros”. Permite explorar el “espacio” de posibles comportamientos del modelo y determinar qué combinaciones de configuración provocan los comportamientos de interés.

Si la computadora tiene múltiples núcleos de procesador, puede especificarse cuántas ejecuciones del modelo ocurrirán en paralelo.

¿Por qué Espacio-Conductual?

La necesidad de este tipo de experimento se hace evidente a través de las siguientes observaciones. A menudo, los modelos tienen muchas configuraciones, cada una de las cuales puede tomar un rango de valores. Juntas, forman lo que en matemáticas se llama un “espacio de parámetros” para el modelo, cuyas dimensiones son el número de configuraciones, y en el cual cada punto es una combinación particular de valores. Ejecutar un modelo con diferentes configuraciones (y a veces incluso las mismas) puede llevar a un comportamiento drásticamente diferente en el sistema que se está modelizando. De modo que, ¿cómo saber qué configuración particular de valores, o qué tipos de configuraciones, producirán el tipo de comportamiento que nos interesa? Esto equivale a la pregunta: ¿dónde - en su enorme espacio de parámetros multidimensional- funciona mejor nuestro modelo?

Por ejemplo, supongamos que desea lograrse una sincronización rápida entre los agentes en el modelo Fireflies. El modelo tiene cuatro deslizadores: number, cycle-length, flash-length and flashes-to-reset, con aproximadamente 2000, 100, 10 y 3 valores posibles, respectivamente. Esto significa que, ¡hay 2000 * 100 * 10 * 3 = 6,000,000 posibles combinaciones de valores de los deslizadores! Probar combinaciones una por una, no es una forma remotamente eficiente de descubrir cuál provocará la sincronización más rápida.

Espacio-Conductual ofrece una forma mucho mejor de resolver este problema al muestrear el espacio de parámetros del modelo, no de manera exhaustiva, pero lo suficiente como para observar la formación de relaciones entre los diferentes valores de los deslizadores y el comportamiento del sistema. Una forma de hacerlo es especificar un subconjunto de valores dentro de los rangos de cada deslizador. Consulta Sintaxis combinatoria. Espacio-Conductual ejecutará el modelo con cada posible combinación de esos valores y registrará los resultados durante cada ejecución. Desde NetLogo 6.4, es posible especificar conjuntos no combinatorios de valores de los deslizadores. Consulta Sintaxis de subexperimento. Después de que todas las ejecuciones finalizan, se genera un conjunto de datos que se puede abrir en una herramienta diferente, como una hoja de cálculo, una base de datos o una aplicación de visualización científica, y explorarlos.

Al permitir explorar todo el “espacio” de comportamientos que un modelo puede exhibir, Espacio-Conductual puede ser un poderoso asistente para el modelador.

Cómo funciona

Para comenzar a usar Espacio-Conductual, abre el modelo y luego selecciona la opción “Espacio-Conductual” en el menú “Herramientas” de NetLogo.

Gestión de configuración de experimentos

El cuadro de diálogo que se abre permite crear, editar, duplicar, eliminar, importar, exportar y ejecutar configuraciones de experimentos. Los experimentos se enumeran por nombre y el número total de ejecuciones del modelo.

Las configuraciones de experimentos se consideran parte de un modelo de NetLogo y se guardan como componentes del modelo, pero también pueden exportarse como archivos individuales. Consulta Importar y exportar (Desde 6.4).

Para crear una nueva configuración de experimento, presiona el botón “Nuevo”. Para editar una configuración de experimento existente, presiona el botón “Editar”. El mismo cuadro de diálogo se utiliza en ambos casos, lo que difiere es la información que ya está incluida. El cuadro de diálogo no bloquea, lo que resulta útil si se desea copiar algo de la pestaña de “Código” o ver los deslizadores en la pestaña de “Ejecutar” (Desde 6.4).

Creación de una configuración de experimentos

A continuación se detalla la información que se puede incluir en el cuadro de diálogo del experimento. Ten en cuenta que no es necesario especificar todo; algunas partes pueden dejarse en blanco o con sus valores predeterminados. Si el nombre de una propiedad está subrayado, puedes desplazar el cursor sobre él para obtener más información sobre la propiedad y sobre cómo se utiliza, de modo que no tengas que visitar esta página con tanta frecuencia (Desde 6.4).

Nombre del experimento: Los experimentos de un mismo modelo deben tener nombres distintos. Si se abre un modelo que contiene experimentos con nombres duplicados, éstos se modificarán para garantizar que todos los nombres sean únicos (Desde 6.4).

Variar variables de la siguiente manera: En este apartado, se especifican las configuraciones que se desean modificar y los valores que deben tomar. Las variables pueden incluir deslizadores, interruptores, seleccionadores y cualquier variable global en el modelo. Es posible que la vista y los gráficos no coincidan con los valores en los elementos visuales una vez que finaliza el experimento. Esto se debe a que las variables globales controladas por los elementos visuales vuelven a su estado inicial al final del experimento. Para sincronizar la vista y los gráficos con los elementos visuales, se debe ejecutar el procedimiento que inicializa la vista.

También se pueden incluir en las variables max-pxcor, min-pxcor, max-pycor y min-pycor, world-width, world-height y random-seed. Estas no son variables, estrictamente hablando, pero Espacio-Conductual permite variarlas como si así lo fueran. Variar las dimensiones del mundo, permite explorar el efecto de su tamaño sobre el modelo. Establecer world-width y world-height es válido bajo dos circunstancias: 1) Si el origen está centrado en anchura o altura, Espacio-Conductual lo mantendrá centrado en esa dimensión. Esto requiere que el/los valor(es) correspondiente(s) de world-width y/o world-height sea(n) impar(es). 2) Si uno de los límites es cero, se mantendrá en cero y el otro límite se moverá. Por ejemplo, si se comienza con un mundo donde min-pxcor = 0 y max-pxcor = 10, y se varía world-width de esta manera:

["world-width" [11 1 14]]

min-pxcor se mantendrá en cero y max-pxcor se ajustará a 11, 12 y 13 en ejecuciones sucesivas. Si ninguna de estas condiciones es cierta, no se podrá variar world-height o world-width directamente, sino que se deberá variar max-pxcor, max-pycor, min-pxcor y min-pycor en su lugar.

Variar random-seed permite repetir ejecuciones al usar una semilla conocida para el generador de números aleatorios de NetLogo. Considera que también se permite usar el comando random-seed en la configuración de los comandos del experimento. Para más información sobre semillas aleatorias, consulta la sección Random Numbers de la Guía de Programación.

Sintaxis combinatoria

Los valores pueden especificarse ya sea enumerando los que se desean utilizar, o indicando que se desea probar cada valor dentro de un rango específico. Por ejemplo, para asignar a un deslizador llamado number cada valor de 100 a 1000, en incrementos de 50, se ingresaría:

["number" [100 50 1000]]

O, para asignar únicamente los valores 100, 200, 400, and 800, se ingresaría:

["number" 100 200 400 800]

Atención con los corchetes. Observa que hay menos corchetes en el segundo ejemplo. La inclusión o no de este conjunto adicional de corchetes, es la forma en que se indica a Espacio-Conductual si se están enumerando valores individuales o se está especificando un rango.

También considera que las comillas en los nombres de las variables son requeridas.

Todas las combinaciones de los valores especificados se ejecutarán. Por ejemplo, si se tienen dos valores para la variable a y tres valores para la variable b, se obtendrán seis ejecuciones.

[["a" 1 2]

["b" [2 6 10]]

Las seis ejecuciones creadas se organizarán de la siguiente manera:

ab
12
16
110
22
26
210

Casilla de verificación para ejecutar combinaciones en orden secuencial Esta casilla está marcada de forma predeterminada y provoca que las variables especificadas posteriormente varíen más rápido que las especificadas anteriormente. Cuando la casilla está en blanco, se obtiene un orden no secuencial, con las variables especificadas anteriormente variando más rápido que las especificadas posteriormente. El orden no-secuencial para la especificación de variables anterior es:

ab
12
22
16
26
110
210

Sintaxis de subexperimento

(Desde 6.4)

Para usuarios más avanzados, existe una tercera sintaxis disponible para variar parámetros: la sintaxis de subexperimento. Por ejemplo, si se desea probar dos valores para una variable a con un valor de una variable b, pero otros dos valores de a para un segundo valor de b, se puede escribir de la siguiente manera:

[["a" 1 2]["b" 1]]

[["a" 3 4]["b" 2]]

Atención al uso de dobles corchetes anidados para separar cada variable dentro del subexperimento. Esto generará cuatro ejecuciones, organizadas de la siguiente manera:

ab
11
21
32
42

La sintaxis de subexperimento también permite definir constantes utilizando la sintaxis estándar. Estas constantes se aplicarán a cada subexperimento, a menos que se sobrescriban. Siguiendo el ejemplo anterior, si se desea probar esas combinaciones de a y b con un valor específico para una tercera variable c, se puede escribir de la siguiente manera:

["c" 5]

[["a" 1 2]["b" 1]]

[["a" 3 4]["b" 2]]

Esto fijaría el valor de c en 5 para los 4 subexperimentos, lo que resultaría en las siguientes ejecuciones:

abc
115
215
325
425

También se puede sobreescribir una constante en un subexperimento, como se muestra en el siguiente ejemplo:

["a" 1]

["b" 2]

[["a" 2]]

Esto generaría una ejecución con la siguiente combinación:

ab
22

Ten en cuenta que todos los valores constantes deben definirse antes de cualquier subexperimento.

Se pueden variar tantas configuraciones como se desee, incluyendo solo una o ninguna. Cualquier configuración que no varíe mantendrá su valor actual. No variar ninguna configuración es útil si simplemente desea ejecutarse el modelo con las configuraciones actuales.

El orden en que se enumeran las variables determina el orden de las ejecuciones. Se probarán todos los valores de una variable posterior antes de pasar al siguiente valor de una variable anterior. Por ejemplo, si se varía tanto x como y de 1 a 3, y x se enumera primero, entonces el orden de las ejecuciones del modelo será: x=1 y=1, x=1 y=2, x=1 y=3, x=2 y=1, y así sucesivamente.

Repeticiones: A veces, el comportamiento de un modelo puede variar mucho de una ejecución a otra - incluso si las configuraciones no cambian-, si el modelo utiliza números aleatorios. Si deseas ejecutar el modelo más de una vez en cada combinación de configuraciones, ingresa un número mayor. Con repeticiones en un orden secuencial, las repeticiones ocurren en ejecuciones secuenciales:

ab
12
12
22
22
16
16
26
26
110
110
210
210

Con repeticiones en un orden no-secuencial, las repeticiones se realizan como un segundo grupo de ejecuciones:

ab
12
22
16
26
110
210
12
22
16
26
110
210

Evaluar las ejecuciones utilizando estos reporteros: Aquí se especifica qué datos recopilar de cada ejecución. Por ejemplo, para registrar cómo la población de las tortugas aumentó y disminuyó durante cada ejecución, se incluiría:

count turtles

Se puede ingresar un reportero, varios o ninguno. Si se ingresan varios, cada reportero debe estar en una línea diferente, por ejemplo:

count frogs count mice count birds

Si no se ingresan reporteros, las ejecuciones aún se llevarán a cabo. Esto es útil si deseas registrar los resultados a tu propia manera, como con el comando export-world. Se pueden usar los reporteros que hayan sido definidos en la pestaña “Código”. Los reporteros aparecerán como encabezados de columna. Si se prefieren encabezados más compactos, se puede reemplazar count patches with [ pcolor = red ] con un reportero red-patches definido en la pestaña “Código”

Ejecutar indicadores a cada paso: Normalmente, NetLogo evaluará las ejecuciones del modelo a cada paso, utilizando los reporteros ingresados en el cuadro previo. Si se está realizando una ejecución de modelo muy larga, es posible que no se deseen todos los datos. Si se desea evaluar el modelo solo al final de la ejecución, o si se desea especificar ciertas condiciones que indiquen cuándo evaluar el modelo, se debe dejar la casilla en blanco.

Ejecutar indicadores cuando

(Desde 6.4)

Este reportero se utilizará para determinar cuándo se deben registrar datos, si no se está evaluando a cada paso. Los datos siempre se obtendrán al final de cada ejecución del modelo, aún si este cuadro de texto está vacío, como sucedía cuando Evaluar ejecuciones a cada paso (ahora Ejecutar indicadores a cada paso) se dejaba en blanco. Por ejemplo ticks mod 10 = 0 registrará datos tanto en cada décimo tick, como en el último tick. Se pueden combinar múltiples reporteros usando and y or.

Comandos pre-experimento

Estos comandos se ejecutarán una vez, antes de que inicie el experimento.

Instrucciones de configuración inicial: Estos comandos se utilizarán para iniciar cada ejecución del modelo. Por lo general, se ingresa el nombre de un procedimiento que configure el modelo, como setup. Sin embargo, también es posible incluir otros comandos. Si se desea obtener los mismos resultados cada vez que se ejecuta un experimento, se puede utilizar algo como random-seed 473 setup. Para obtener resultados diferentes en repeticiones, se puedes usar random-seed (474 + behaviorspace-run-number) setup

Comandos go: Estos comandos se ejecutarán una y otra vez para avanzar el modelo al siguiente ‘paso’. Por lo general, esto será el nombre de un procedimiento, como go, pero se pueden incluir los comandos que se deseen.

Condición de finalización: Esto permite realizar ejecuciones del modelo de diferentes duraciones, finalizando cada una cuando se cumple una cierta condición. Por ejemplo, supongamos que se desea que cada ejecución dure hasta que ya no queden tortugas. En ese caso, se ingresaría:

not any? turtles

Si se desea que todas las ejecuciones tengan una duración fija, simplemente se deja en blanco.

La ejecución también puede detenerse debido a que los comandos go utilizan el comando stop de la misma manera que stop se usa para detener un botón “Continuo”. El comando stop puede usarse directamente en los comandos go o en un procedimiento llamado directamente por los comandos go. (La intención es que el mismo procedimiento go funcione tanto en un botón como en un experimento de Espacio-Conductual). Ten en cuenta que el paso en el que se utiliza stop se considera como si hubiera sido interrumpido, por lo que no se registrarán resultados para ese paso. Por lo tanto, la prueba de detención debería estar al principio de los comandos go, o del procedimiento, no al final.

Comandos post-ejecución: Estos son cualquier comando adicional que se quiera ejecutar cuando finaliza la ejecución. Generalmente se deja en blanco, pero pudiera usarse para llamar al comando export-world o para registrar los resultados de la ejecución de alguna otra manera.

Comandos post-experimento

Estos son cualquier comando adicional que se quiera ejecutar cuando finaliza el experimento, una vez que todas las ejecuciones han finalizado.

Límite de tiempo: Esto permite establecer una longitud fija máxima para cada ejecución. Cuando no se desea establecer un máximo, sino que se prefiere que la longitud de las ejecuciones esté controlada por la condición de detención, se ingresa 0.

Nota sobre comandos pre y post-experimento: Estos comandos se ejecutan fuera de las ejecuciones reales, por lo que no pueden afectar a las variables globales o a los agentes en el modelo (para eso se utilizan los comandos de configuración inicial y los comandos post-ejecución). Si se utilizan primitivas como file-open o la extensión CSV en los comandos previos o posteriores al experimento, su estado interno no se transferirá a las ejecuciones y es probable que ocurran errores si se utilizan ahí.

Importar y exportar

(Desde 6.4)

Aunque los experimentos están vinculados a un modelo y generalmente se guardan junto con el modelo, también se pueden importar y exportar de forma individual a archivos XML. Esto permite transferir fácilmente experimentos entre modelos y prepararlos para ejecuciones en modo sin interfaz. Después de exportar un experimento a un archivo XML, es posible editarlo manualmente o mediante otro script, no solo dentro de NetLogo.

El botón Importar permite importar experimentos desde un archivo XML. Los archivos seleccionados pueden contener múltiples experimentos, pero aquellos que no cumplan con el formato correcto no se cargarán. Si se importa un experimento que comparta el nombre con otro experimento existente, el nombre del experimento importado será ligeramente modificado para garantizar que los nombres sean únicos.

El botón Exportar permite exportar experimentos a un archivo XML. Se pueden seleccionar múltiples experimentos para ser exportados en una sola instancia, pero serán combinados en un único archivo de resultados.

Primitivas especiales para experimentos en Espacio-Conductual

Actualmente, sólo existen dos variables, behaviorspace-run-number y behaviorspace-experiment-name. El número de ejecución reportado por la primera primitiva coincide con el número de ejecución usado en los archivos de resultados generados por Espacio-Conductual. El nombre del experimento reportado por la segunda primitiva coincide con el nombre con el que se configuró el experimento.

Ejecutar un experimento

Cuando se completa la configuración de un experimento, se presiona el botón “OK”, y enseguida el botón “Ejecutar”. Aparecerá un cuadro de diálogo llamado “Opciones de ejecución”.

Opciones de ejecución: formatos

El cuadro de diálogo “Opciones de ejecución” permite la elección de archivos de resultados en dos formatos principales: Resultados tabulados y Resultados en hoja de cálculo. Si se elige uno o ambos formatos, también se pueden seleccionar los formatos adicionales Resultados en lista y Resultados estadísticos. Cada ruta de archivo puede ingresarse en su cuadro de texto correspondiente, o con el botón Examinar… a través del cuadro de diálogo del sistema de archivos. Si no se desea utilizar un formato en particular, se puede dejar en blanco el cuadro de texto del archivo, o hacer clic en el botón Desactivar y se limpiará automáticamente. La frecuencia de recopilación de datos se determina mediante la configuración de las opciones de Ejecutar indicadores a cada paso y Ejecutar indicadores cuando. Para los formatos de Resultados tabulados y Resultados en hoja de cálculo, se registra el estado inicial del sistema después de ejecutar el comando setup (o configuración inicial) pero antes de ejecutar el comando go por primera vez.

Después de seleccionar los formatos de resultados, Espacio-Conductual solicitará el nombre del archivo en el que se desea guardar los resultados. El nombre predeterminado termina en “.csv”. Se puede cambiar por el nombre que se prefiera, pero hay qué asegurarse de no omitir la parte “.csv”, ya que indica que el archivo es un archivo de valores separados por comas (CSV). Este es un formato de datos en texto plano que puede leerse con cualquier editor de texto, así como con la mayoría de los programas populares de hojas de cálculo y bases de datos.

Los cuatro formatos de resultados incluirán una sección de encabezado que contendrá filas para: 1) la versión de NetLogo utilizada, 2) el nombre del archivo del modelo de NetLogo utilizado, 3) el nombre del experimento de Espacio-Conductual utilizado, 4) la fecha y hora de inicio, y 5) las dimensiones iniciales del mundo.

Resultados tabulados

Este formato lista cada paso de medición de cada ejecución en su propia fila, con cada indicador en una columna separada. Las filas de medición aparecerán en el orden en que ocurren en el tiempo real. Con la opción de ejecuciones en paralelo las mediciones pueden aparecer en un orden mixto, ya que varias ejecuciones pueden ocurrir simultáneamente. Para ayudar a identificar a qué ejecución pertenece una fila, hay una columna titulada [run number] junto con una columna titulada [step] que indica el número de medición de esa ejecución. Cada fila también incluye los valores utilizados para las variables durante la configuración inicial de la ejecución; estos valores son los mismos para cada una de las filas de medición de esa ejecución. Los datos de Resultados tabulados se escriben en el archivo a medida que cada ejecución se completa.

El formato de Resultados tabulados es útil si se desea procesar los datos con otra herramienta, como importarlos a una base de datos, un paquete estadístico o una aplicación de hoja de cálculo para su análisis.

En la siguiente imagen de muestra de Resultados tabulados, la sección de encabezado (header) está resaltada en rojo, las columnas de número de ejecución ([run number]]) y paso ([step]) se resaltan en azul, los valores iniciales de las variables para la ejecución se muestran en verde y los datos de indicadores de medición se muestran en morado.

Screenshot

Resultados en hoja de cálculo

Este formato lista los números de paso, así como cada indicador de cada ejecución en una columna separada, con cada fila correspondiente a un paso de medición, aplicable a todas las ejecuciones. Si una ejecución termina antes que otra debido a una condición de finalización, entonces sus números de paso después de ese punto estarán en blanco. En la parte superior del archivo hay una fila [run number] que tendrá el número de ejecución, repetido para cada indicador. Enseguida, se incluyen filas para los valores iniciales dados a cada variable para la ejecución. Los resultados en hoja de cálculo también calculan los valores mínimo, promedio, máximo y final para los números de paso y para cada indicador, y los lista después de los valores iniciales, y antes de las mediciones individuales de cada ejecución. Luego, se indica el número real de pasos completados durante la ejecución, en la fila [total steps].

Los datos de Resultados en hoja de cálculo simplifican la comparación entre las ejecuciones, ya que se alinean verticalmente al importarlos a una aplicación de hoja de cálculo. Además, esta alineación facilita la creación de gráficos comparativos de los resultados, con cambios en las variables iniciales en diferentes ejecuciones.

Es importante destacar que los datos no se escriben en los Resultados en hoja de cálculo hasta que finaliza el experimento. Dado que estos datos se almacenan en la memoria hasta que se completa el experimento, es posible que experimentos muy extensos agoten la memoria disponible. Se recomienda desactivar Resultados en hoja de cálculo a menos que sea absolutamente necesario. Además, si el experimento se interrumpe por cualquier motivo, no se registrará ningún resultado. Las posibles fuentes de interrupciones pueden incluir: errores en tiempo de ejecución en el modelo, agotamiento de recursos de memoria, fallos del sistema o cortes de energía. Para experimentos prolongados, se recomienda habilitar el formato Resultados tabulados como medida de precaución, en caso de que ocurra un problema y no se obtengan Resultados en hoja de cálculo; así al menos se conservarán los datos parciales.

En la siguiente imagen de muestra de Resultados en hoja de cálculo, la sección de encabezado está resaltada en rojo, las columnas de número de ejecución ([run number]) se resaltan en azul, los valores iniciales de las variables se muestran en verde, los indicadores adicionales calculados se muestran en anaranjado, y los datos de medición de indicadores se encuentran en morado.

Screenshot

Resultados estadísticos

(Desde 6.4)

Si se habilita la opción de Resultados estadísticos, los datos obtenidos, ya sea en Resultados tabulados, o bien en Resultados en hoja de cálculo, se utilizan para calcular la media y la desviación estándar de cada indicador numérico a lo largo de las repeticiones de cada paso. Estos cálculos se realizan al final del experimento y los resultados estadísticos se guardan en el archivo especificado. Es importante destacar que los indicadores que pueden generar mediciones no numéricas, como cadenas de texto, no se incluyen en las estadísticas. Si los indicadores generan listas, los cálculos estadísticos se realizan para los elementos con el mismo índice en cada lista. Las estadísticas no se calculan para indicadores que generan listas que contienen elementos no numéricos. Además, el tipo de medición debe mantenerse constante. Por ejemplo, no se calcularán estadísticas si un indicador genera mediciones que pueden ser tanto listas como números. Es importante tener en cuenta que la desviación estándar puede ser “N/A”, lo que significa que se recopilaron dos o menos mediciones para esa combinación de paso y parámetro, lo que produce un resultado no bien definido. El experimento debe utilizar una configuración de repeticiones de 3 o más para obtener valores de desviación estándar.

En la siguiente imagen de muestra de Resultados estadísticos, la sección de encabezado está resaltada en rojo, las combinaciones de parámetros en verde, las columnas de número de paso ([step]) en azul, y los datos estadísticos morado.

Screenshot

Resultados en lista

(Desde 6.4)

Este formato es un complemento de los otros dos formatos principales, en lugar de ser un formato completo de recopilación de datos. Si existen reporteros que retornan una lista, el formato Resultados en lista puede ser empleado para obtener resultados con formato adecuado para esos reporteros. Tanto en los formatos Resultados en hoja de cálculo como en Resultados tabulados, las listas generadas por los reporteros serán comprimidas en una sola celda, en lugar de desplegar sus elementos en celdas separadas con un valor por celda. Si los valores de la lista se requieren en celdas ndividuales, se selecciona el formato Resultados en lista junto con uno o ambos de los otros formatos.

Es importante destacar que el formato Resultados en lista, al igual que el formato Resultados en hoja de cálculo, no contendrá datos hasta que el experimento esté completo. También es importante tener en cuenta que el formato Resultados en lista debe utilizarse en conjunto con otro formato, no puede usarse de manera independiente.

En la siguiente imagen de muestra de Resultados en lista, la sección de encabezado está resaltada en rojo, el nombre del reportero en anaranjado, las columnas de número de ejecución ([run number]) y de número de paso ([step]) en azul, los valores iniciales de las variables en verde, y la lista expandida de datos en morado.

Screenshot

Cambios en archivos de resultados

(Desde 6.4)

Opciones de ejecución: actualizar gráficos y monitores

El cuadro de diálogo “Opciones de ejecución” ofrece la opción de actualizar o no los gráficos y monitores. El rendimiento mejora si se deja en blanco. Es importante destacar que (Desde 6.4), si se comienza el experimento con la casilla en blanco, no se podrá alternar entre activar o desactivar esta casilla de verificación en el cuadro de diálogo “Ejecutando experimento”. Esto proporciona una mejora de rendimiento aún mayor que la obtenida antes de NetLogo 6.4, cuando dicha alternancia era posible. Selecciona la casilla si es necesario exportar datos de gráficos mediante primitivas como: export-interface (guarda la interfaz completa en un archivo PNG), export-plot (guarda datos de gráficos en un archivo), export-all-plots (guarda todos los gráficos en un archivo), y export-world (guarda todo el estado del modelo en un archivo).

Opciones de ejecución: ejecuciones en paralelo

El cuadro de diálogo “Opciones de ejecución” también permite seleccionar si se desean ejecuciones múltiples del modelo en paralelo y, en tal caso, cuántas pueden estar activas simultáneamente. Tanto el número predeterminado como el máximo recomendado de ejecuciones en paralelo se indican debajo del cuadro de texto (Desde 6.4). La elección de la cantidad de ejecuciones en paralelo se mantiene de un experimento a otro (Desde 6.4).

Es importante considerar algunas precauciones con las ejecuciones en paralelo.

Primera: si hay múltiples ejecuciones activas, solo una de ellas estará en el “primer plano” y generará la actualización de la vista y los gráficos. Las demás ejecuciones ocurrirán en segundo plano de manera invisible.

Segunda: las ejecuciones en segundo plano invisibles no pueden utilizar primitivas que solo funcionan en la interfaz gráfica (GUI). Por ejemplo, una ejecución en segundo plano no puede crear una película.

Tercera: dado que las ejecuciones en paralelo avanzan de forma independiente, el formato Resultados tabulados puede contener datos entrelazados y fuera de orden. Al analizar los datos de la tabla, se recomienda ordenarlos por número de ejecución. (El formato Resultados en hoja de cálculo no se ve afectado por esto, puesto que se escribe hasta que el experimento se completa o se interrumpe).

Cuarta: el uso de todos los núcleos del procesador disponibles puede hacer que la computadora sea lenta para otras tareas mientras se ejecuta el experimento, o que las ejecuciones sean lentas ya que se produce una competencia por la memoria entre las propias ejecuciones. Si el modelo utiliza una gran cantidad de memoria, es posible que reducir el número de ejecuciones permita que estas se completen en menos tiempo, ya que el sistema puede mantener disponible la memoria para cada ejecución. Un buen punto de partida podría ser el valor predeterminado que se muestra en “Opciones de ejecución”, y a partir de ahí, ajustar hacia arriba o hacia abajo para encontrar el punto óptimo en términos de tiempo, para completar todas las ejecuciones.

Quinta: realizar ejecuciones en paralelo aumentará significativamente los requerimientos de memoria del experimento. Puede ser necesario ajustar el límite de memoria de NetLogo (consultar this FAQ entry). Por defecto, NetLogo no utilizará más del 50% de la memoria del sistema.

Sexta: cada ejecución en paralelo tiene su propio mundo en el que se ejecuta el modelo. Este mundo no se borra automáticamente por Espacio-Conductual si una ejecución en paralelo se reutiliza para otra repetición, lo que ocurre con bastante frecuencia. Esto significa, por ejemplo, que si se ejecuta ask patches [ set pcolor red ] en una ejecución y no se utiliza clear-all o clear-patches en los comandos de configuración de la siguiente ejecución, entonces las parcelas seguirán siendo rojas. En general, usar clear-all antes de cada ejecución sería una buena práctica, pero hay momentos en los que no es necesario, como cuando se cargan datos desde un archivo que no cambia de ejecución en ejecución. En otras palabras, es importante tener cuidado con los datos que no se borran.

Séptima: hay una posibilidad extremadamente pequeña de que, al iniciar múltiples ejecuciones en paralelo al mismo tiempo, éstas puedan terminar con el mismo estado del generador de números aleatorios. Esto significaría que las ejecuciones producirían resultados idénticos en todas las operaciones aleatorias y, probablemente, resultados iguales en general. Esto podría ocurrir al ejecutar en procesadores muy rápidos y con muchas ejecuciones en paralelo al mismo tiempo. Si se desea garantizar que esto no afecte los resultados, puede agregarse el comando random-seed new-seed a los comandos de configuración para generar una nueva semilla aleatoria única en cada ejecución. De hecho, guardar new-seed como una variable global permitiría volver a ejecutar una ejecución en otro momento, utilizando ese valor para establecer random-seed manualmente.

Observación de ejecuciones

Después de configurar las “Opciones de ejecución”, aparecerá otro cuadro de diálogo llamado “Ejecutando experimento”. En este cuadro, se presenta un informe de progreso que indica cuántas ejecuciones se han completado hasta el momento y el tiempo transcurrido. Si se han definido reporteros para medir las ejecuciones y se ha seleccionado la casilla “Ejecutar indicadores a cada paso”, se mostrará un gráfico que representa la variación de los mismos, a lo largo de cada ejecución.

También es posible observar las ejecuciones en la ventana principal de NetLogo. Si el cuadro de diálogo “Ejecutando experimento” obstaculiza la vista, simplemente se puede mover a otra ubicación en la pantalla. Si no es necesario visualizar las actualizaciones de los gráficos, puede desactivarse esta función utilizando las casillas de verificación en el cuadro de diálogo “Ejecutando experimento”. Esto acelerará el experimento. Sin embargo, si ya ha se desactivado la actualización de gráficos y monitores en el cuadro de diálogo “Opciones de ejecución”, esta casilla permanecerá deshabilitada (Desde 6.4).

Si se quiere detener un experimento antes de que haya finalizado, existen dos opciones. Para detenerlo después de que las ejecuciones actuales hayan concluido y guardar el progreso para más tarde, se presiona el botón “Pausar” (Desde 6.4). Para detener el experimento de inmediato, sin esperar a que las ejecuciones actuales se completen, se presiona el botón “Interrumpir”. Cualquier resultado generado hasta ese momento se guardará, pero ten en cuenta que presionar “Interrumpir” puede generar datos fragmentados, por lo que los experimentos interrumpidos no pueden reanudarse.

Cuando todas las ejecuciones se han completado, el experimento finaliza. En este punto se generarán los formatos de Resultados en hoja de cálculo, en lista y estadísticos.

Experimentos pausados

(Desde 6.4)

Los experimentos pausados en la ventana de Espacio-Conductual, aparecerán con la leyenda “En progreso”. Para reanudar un experimento desde el punto donde se pausó, selecciónalo y presiona el botón “Ejecutar”. Para restablecer un experimento pausado a su estado inicial, selecciónalo y presiona el botón “Interrumpir”.

Si se está utilizando la opción de “Resultados en hoja de cálculo”, se escribirá un archivo que contendrá los datos generados hasta el momento en que el experimento se pausa. Estos datos se utilizarán como parte de la creación de un archivo completo de hoja de cálculo. Es importante tener en cuenta que si el experimento está escribiendo en su propio archivo externo, es posible que se requieran algunos cambios para que la pausa funcione correctamente. Por ejemplo, se debe utilizar file-flush o file-close al final de cada ejecución para asegurarse de que todos los datos se escriban en el archivo. Además, se debe utilizar file-open antes de realizar cualquier escritura durante una ejecución. Al abrir un archivo en modo de escritura, todos los nuevos datos se agregarán al final del archivo original, lo cual probablemente es el comportamiento deseado.

Es importante tener en cuenta que mover o eliminar archivos de resultados antes de reanudar un experimento pausado, provocará un error. Así también, si se generan nuevos datos en un archivo asociado con un experimento pausado, también podría causar un error al reanudar dicho experimento.

Uso avanzado

Ejecutar desde la línea de comando

Es posible ejecutar experimentos de Espacio-Conductual desde la línea de comandos, sin ninguna interfaz gráfica de usuario (“headless”). Esto resulta útil para automatizar ejecuciones en una sola máquina o en un conjunto de máquinas.

No se requiere programación en Java. Las configuraciones de experimentos pueden crearse en la GUI y luego ejecutarse posteriormente desde la línea de comandos, o, si se prefiere, se pueden crear o editar configuraciones de experimentos directamente utilizando XML.

Cómo se usa

Se ejecuta NetLogo usando la aplicación NetLogo_Console con el argumento de línea de comandos --headless Ésta se encuentra en el directorio principal de la instalación de NetLogo. El script NetLogo_Console es compatible con los siguientes argumentos:

--model es obligatorio. Si no se especifica --experiment, se debe especificar --setup-file. Por defecto, no se generan resultados, por lo que generalmente se deberá especificar --table o --spreadsheet, o ambos. Si se especifica alguna de las dimensiones del mundo, se deben proporcionar las cuatro.

Es importante tener en cuenta que antes de NetLogo 6.3.0, las indicaciones recomendaban el uso de netlogo-headless.sh (o netlogo-headless.bat en Windows) junto con una instalación independiente de Java en el sistema para llevar a cabo experimentos de Espacio-Conductual. El script netlogo-headless.sh aún se incluye en NetLogo y puede seguir utilizándose como antes, lo que puede ser preferible en entornos de servidor, donde la versión de Java instalada está estrictamente controlada. Sin embargo, en una computadora personal, el método recomendado es utilizar la aplicación NetLogo_Console --headless. Dado que NetLogo_Console emplea la versión de Java que se incluye con NetLogo, no es necesario realizar una instalación adicional de software ni configuraciones especiales.

Ejemplos

Resulta más conveniente crear previamente la configuración de un experimento en la interfaz gráfica, de modo que quede guardada como parte del modelo. Para ejecutar una configuración de experimento que se haya guardado en un modelo, se presenta un ejemplo de línea de comandos que debe ejecutarse desde la carpeta de instalación de NetLogo 6.4.0, de modo que las rutas a la aplicación NetLogo_Console y al modelo Wolf Sheep Simple 5.nlogo sean correctas.

Las siguientes instrucciones deberían funcionar tal cual en una terminal en macOS y Linux. En Windows, en el símbolo del sistema, puede usarse ^ en lugar de \ para dividir el comando en varias líneas o simplemente colocar el comando en una sola línea.

./NetLogo_Console --headless \
  --model "models/IABM Textbook/chapter 4/Wolf Sheep Simple 5.nlogo" \
  --experiment "Wolf Sheep Simple model analysis" \
  --table -

Después de que el experimento nombrado se haya ejecutado, los resultados se envían tabulados en formato estándar, como CSV. El guión - es la forma de especificar el formato estándar en lugar de un archivo de resultados.

Al ejecutar NetLogo en modo sin interfaz, se establece la propiedad de sistema java.awt.headless como verdadera. Esto indica a Java que funcione en modo sin interfaz gráfica, permitiéndo que NetLogo se ejecute en máquinas donde no se dispone de una pantalla gráfica.

El argumento obligatorio --model se utiliza para especificar el archivo del modelo que se desea abrir.

El argumento --experiment se utiliza para indicar el nombre del experimento que se desea ejecutar. (En el momento en que se crea una configuración de experimento en la GUI, se le asigna un nombre).

A continuación, se presenta otro ejemplo que muestra algunos argumentos adicionales, opcionales:

./NetLogo_Console --headless \
  --model "models/IABM Textbook/chapter 4/Wolf Sheep Simple 5.nlogo" \
  --experiment "Wolf Sheep Simple model analysis" \
  --max-pxcor 5 \
  --min-pxcor -5 \
  --max-pycor 5 \
  --min-pycor -5

Observa el uso de los argumentos opcionales --max-pxcor, --max-pycor, etc., para especificar un tamaño de mundo diferente al que está guardado en el modelo. (También es posible que la configuración del experimento especifique valores para las dimensiones del mundo; si se especifican en la configuración del experimento, no es necesario indicarlos en la línea de comandos).

Ya que no se especifica ni --table ni --spreadsheet, no se generarán resultados. Esto es útil si la configuración del experimento genera todos los resultados necesarios de alguna otra manera, como exportar archivos del mundo o escribir en un archivo de texto.

Otro ejemplo adicional:

./NetLogo_Console --headless \
  --model "models/IABM Textbook/chapter 4/Wolf Sheep Simple 5.nlogo" \
  --experiment "Wolf Sheep Simple model analysis" \
  --table wsp5-table-output.csv \
  --spreadsheet wsp5-spreadsheet-output.csv \
  --lists wsp5-lists-output.csv \
  --stats wsp5-stats-output.csv

El argumento opcional --table <nombre de archivo> indica la geneneración de archivos con formato Resultados tabulados, que se escriben en el archivo especificado como datos CSV. Si se indica - como nombre de archivo, los archivos de resultados se generan con formato estándar. Los datos de la tabla se escriben a medida que se generan, cuando se completa cada ejecución.

El argumento opcional --spreadsheet <nombre de archivo> indica la generación de archivos con formato Resultados en hoja de cálculo, que se escriben en el archivo especificado como datos CSV. Si se indica - como nombre de archivo, los archivos de resultados se generan con formato estándar. Los datos de la hoja de cálculo se escriben una vez que finalizan todas las ejecuciones del experimento.

El argumento opcional --lists <nombre de archivo> indica la generación de archivos con formato Resultados en lista, que se escriben en el archivo especificado como datos CSV. Si se indica - como nombre de archivo, los archivos de resultados se generan con formato estándar. Los datos de la lista se escriben una vez que finalizan todas las ejecuciones del experimento.

El argumento opcional --stats <nombre de archivo> indica la generación de archivos con formato Resultados estadísticos, que se escriben en el archivo especificado como datos CSV. Si se indica - como nombre de archivo, los archivos de resultados se generan con formato estándar. Los datos estadísticos se escriben una vez que finalizan todas las ejecuciones del experimento.

Ten en cuenta que es válido indicar tanto --table como --spreadsheet, y de ser así, se generarán ambos tipos de archivos de resultados. Si se utiliza --lists o --stats, al menos una de las opciones --table o --spreadsheet debe ser utilizada.

Enseguida se muestra un ejemplo que muestra cómo ejecutar una configuración de experimento almacenada en un archivo XML separado, en lugar de en el archivo del modelo (consulta más abajo para obtener información adicional sobre el formato del archivo XML). Esto asume que se ha creado un archivo my-wsp-setups.xml con un experimento “My WSP Exploration” y se ha colocado en el directorio de inicio. La forma más sencilla de crear un archivo de configuración es crear un experimento utilizando Espacio-Conductual en la interfaz gráfica de NetLogo y utilizar la opción “Exportar”.

./NetLogo_Console --headless \
  --model "models/IABM Textbook/chapter 4/Wolf Sheep Simple 5.nlogo" \
  --setup-file ~/my-wsp-setups.xml \
  --experiment "My WSP Exploration"

Si el archivo XML contiene más de una configuración de experimento, es necesario utilizar el argumento --experiment para especificar el nombre de la configuración que se utilizará.

Para ejecutar un experimento NetLogo 3D en modo sin interfaz, utiliza el argumento --3D, por ejemplo:

./NetLogo_Console --headless \
  --3D \
  --model "models/3D/Sample Models/GasLab/GasLab Free Gas 3D.nlogo3d" \
  --experiment "100 runs" \
  --table -

Ten en cuenta que se debe proporcionar un modelo 3D, y también que hay argumentos para modelos 3D. --max-pzcor <número> and --min-pzcor <número>.

La próxima sección contiene información sobre cómo crear archivos de configuración de experimento en modo autónomo, utilizando XML.

Configuración de experimentos en XML

Aún no contamos con documentación detallada sobre cómo crear configuraciones de experimentos en XML. Sin embargo, si se tiene familiaridad con XML, los siguientes consejos pueden ayudar a comenzar.

La estructura de las configuraciones de experimentos de Espacio-Conductual en XML se define mediante un archivo de Definición de Tipo de Documento (DTD). El DTD se encuentra en NetLogo.jar como system/behaviorspace.dtd. (Los archivos JAR son también archivos ZIP, por lo que puede extraerse el DTD del JAR utilizando la utilidad “jar” de Java o cualquier programa que gestione el formato ZIP).

La forma más sencilla de aprender cómo se ven las configuraciones en XML, es crear algunas en la interfaz gráfica de Espacio-Conductual, guardar el modelo, exportarlas (Desde 6.4), y luego examinar el o los archivos .xml resultantes en un editor de texto. También puedes encontrar las configuraciones de experimentos al final del archivo .nlogo, en una sección que comienza y termina con la etiqueta experiments. Por ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE experiments SYSTEM "behaviorspace.dtd">
<experiments>
  <experiment name="My WSP Exploration" repetitions="5" runMetricsEveryStep="false">
    <setup>setup</setup>
    <go>go</go>
    <timeLimit steps="2000"/>
    <metric>count wolves</metric>
    <metric>count sheep</metric>
    <metric>sum [grass-amount] of patches</metric>
    <enumeratedValueSet variable="energy-gain-from-grass">
      <value value="2"/>
    </enumeratedValueSet>
    <steppedValueSet variable="number-of-wolves" first="5" step="1" last="15"/>
    <enumeratedValueSet variable="movement-cost">
      <value value="0.5"/>
    </enumeratedValueSet>
    <enumeratedValueSet variable="energy-gain-from-sheep">
      <value value="5"/>
    </enumeratedValueSet>
    <enumeratedValueSet variable="number-of-sheep">
      <value value="500"/>
    </enumeratedValueSet>
    <enumeratedValueSet variable="grass-regrowth-rate">
      <value value="0.3"/>
    </enumeratedValueSet>
  </experiment>
</experiments>

En este ejemplo, se muestra solo una configuración de experimento, pero pueden incluirse tantas como se deseen entre las etiquetas de inicio y finalización experiments

Al observar la DTD y los ejemplos creados en la interfaz gráfica, esperamos que sea evidente cómo utilizar las etiquetas para especificar diferentes tipos de experimentos. La DTD especifica cuáles etiquetas son obligatorias y cuáles son opcionales, cuáles pueden repetirse y cuáles no, entre otros detalles.

Si se desea crear un archivo de configuración para NetLogo 6.3.0 y versiones anteriores, para las cuales Exportar no está disponible, debe tenerse en cuenta que en un archivo de modelo, el XML para configuraciones de experimentos no comienza con encabezados XML, ya que no todo el archivo es XML, solo una parte. Por lo tanto, si se crea manualmente un archivo separado para las configuraciones de experimentos, la extensión del archivo debe ser .xml y no .nlogo. Además, se debe iniciar el archivo con los encabezados XML adecuados, como se muestra a continuación:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE experiments SYSTEM "behaviorspace.dtd">

La segunda línea debe incluirse tal como se muestra. En la primera línea, puede especificarse una codificación diferente a UTF-8, como ISO-8859-1.

Ajuste de parámetros de la JVM

Al abrir el script de inicio de NetLogo Headless, verás las opciones utilizadas para iniciar Java al ejecutar NetLogo en modo sin interfaz. Pueden ajustarse varios parámetros de la JVM en este script. También pueden pasarse propiedades de Java que comiencen con -D al lanzador.

NetLogo asigna un máximo de la mitad de la memoria total del sistema para ejecutar el modelo, según sea necesario. Si desea establecerse una cantidad máxima de memoria para el uso de Espacio-Conductual, puede utilizarse la configuración -Xmx para especificar el tamaño del heap

Observa el uso de -Dfile.encoding=UTF-8. Esto obliga a todos los archivos de E/S a utilizar la codificación UTF-8. Al hacerlo, se garantiza que NetLogo pueda cargar todos los modelos de manera coherente y que las primitivas de archivo file-* funcionen de manera uniforme en todas las plataformas, incluyendo modelos que contengan caracteres Unicode.

Control API

Si Espacio-Conductual no es suficiente para tus necesidades, una posible alternativa es utilizar nuestra API de Control, que permite escribir código en Java para controlar NetLogo. La API permite ejecutar experimentos de Espacio-Conductual desde el código en Java, o bien escribir código personalizado que controle NetLogo de manera más directa para realizar tareas similares a las de Espacio-Conductual. Consulta la sección Control del Manual del Usuario para obtener más detalles sobre ambas posibilidades.