NetLogo: Interfaz Gráfica
Además de un lenguaje de programación natural y fácil, una de las grandes diferencias (y ventajas) de NetLogo sobre otros sistemas de modelado similares radica en su facilidad para generar interfaces que permiten una interacción natural con los modelos desarrollados de una forma sencilla y que motiva la exploración de conceptos.
Añadir elementos
En la pestaña del interfaz hay más opciones además del mundo y la consola del Centro de Comandos. Entre otras cosas, disponemos de una barra de herramientas que ofrece un conjunto de controles con los que adaptar el interfaz a las necesidades del modelo.

Comenzaremos viendo cómo añadir controles al interfaz, después haremos un recorrido por las funcionalidades particulares que ofrece cada uno de ellos y veremos cómo relacionarlos con los procedimientos que se pueden definir en la pestaña de código.
Esencialmente, hay dos formas de manipular (añadir, modificar o eliminar) los controles para el interfaz:
Para añadir un control basta seleccionar el tipo de control que deseamos añadir del menú desplegable (observa que al seleccionar un control del menú desplegable el botón Add se pone automáticamente activo) y, a continuación, pulsar en la parte del interfaz en donde queremos situarlo (la situación será aproximada, después puedes ajustarlo con más precisión). Si se desea añadir otro control del mismo tipo, basta pulsar en el botón Add y después en la parte donde se quiera situar.
También existe la opción de pulsar con el botón derecho sobre alguna parte del interfaz en la que no haya controles y seleccionar el control que se desea añadir de la lista emergente. Tras añadirlo, aparece una ventana de diálogo para rellenar los parámetros correspondientes al control. Cuando analicemos los controles de forma individualizada, detallaremos estas ventanas de diálogo, ya que depende del tipode control.Para modificar un control hay que seleccionarlo, bien por medio del arrastre del ratón (como se haría para seleccionar una sección de texto en un editor tradicional), o con el botón derecho sobre el control y pulsando en select del menú emergente. Una vez seleccionado podremos cambiar sus dimensiones por medio de los puntos de control que lo rodean y cambiarlo de posición arrastrándolo. Por el método del arrastre se pueden seleccionar varios controles simultáneamente con el fin de moverlos juntos.
- Para de-seleccionar el/los controles seleccionados, pulsa sobre cualquier área vacía del interfaz.
- Para editar las características del control, se puede seleccionar y después pulsar sobre el botón Edit de la barra de herramientas, o bien pulsar con el botón derecho sobre el control y seleccionar Edit... del menú emergente.
- Para eliminar un control basta seleccionarlo y pulsar en el botón Delete de la barra de herramientas, o bien pulsar con el botón derecho sobre el control y seleccionar Delete del menú emergente.
- Observa que el propio mundo reacciona de forma similar a como se ha indicado en los puntos anteriores, con la salvedad de que no se puede crear ni eliminar, y dispone de algunas opciones más en su menú emergente.
Finalidad y Parámetros
Expliquemos con detalle cómo funciona y qué objetivo tiene cada uno de los controles que podemos usar en el interfaz.

Los controles disponibles son:
- Button / Botón: Su funcionalidad es sencilla, al ser pulsado se ejecuta el código que se proporciona por medio de su ventana de diálogo. Es uno de los más usados en los modelos, ya que es el único que permite asociar ejecución de código y, por tanto, evita el uso del Centro de Comandos.
Además, tiene funcionalidades añadidas que lo hacen aún más interesante:- Permite seleccionar el contexto en el que se debe ejecutar el código (y mostrará un pequeño icono para que el usuario sepa en cuál se ejecuta).
- Si está marcada la opción Forever, al pulsar el botón una vez, éste se quedará pulsado y ejecutará el código asociado en un bucle sin fin. Para detener su ejecución hay que volver a pulsar el botón, pero se debe tener en cuenta que no la detendrá inmediatamente, sino cuando se haya completado el ciclo de ejecución en marcha.
- Permite asignar una tecla de acción de manera que su ejecución/parada puede ser controlada con el teclado (el teclado sólo está activo si el interfaz es el que tiene el foco de atención; para que sea así pulsa con el ratón sobre un área vacía del interfaz). La tecla (o combinación) asignada se mostrará en la esquina superior derecha del botón.
- Si “Disable until ticks start” está seleccionado, el botón no estará disponible hasta que comience la ejecución de ticks. Esta opción sólo tiene sentido si el modelo funciona por ticks, y no de forma continua, y en este caso permite diferenciar acciones “previas” a la ejecución de otras que puedan accionarse “durante” la ejecución del modelo. Un botón que no está disponible se reconoce porque, además de no reaccionar cuando se pulsa, presenta un color gris.
- En la caja de commands es donde se escribe el código a ejecutar. Muchas veces será simplemente el nombre de un procedimiento definido en la pestaña de código.
- Define la etiqueta del botón en Display name, por defecto es el contenido de la caja de commands..
- Slider / Barra de deslizamiento: Define una variable global numérica que es ajustable desde el control. Los parámetros de los que depende son:
- Global variable: especifica el nombre de la variable global asociada. Importante: no se debe definir esta variable en la pestaña de código.
- Los posibles valores que tomará esta variable irán desde Minimum hasta Maximum, considerando un incremento de Increment. Estos valores pueden ser reportes, de manera que se adapten automáticamente a otras condiciones del modelo.
- Value: es el valor actual de la variable asociada.
- Units: Permite añadir un texto que indique (solo a título informativo) las unidades en que se expresa esta variable.
- Si la opción vertical? está marcada, el slider tendrá dirección vertical, y no horizontal que es la representación por defecto.
- Switch: Define una variable global booleana (con valores verdadero/falso, true/false) y proporciona una forma sencilla y visual de asignarle su valor. Al igual que en el caso anterior, no debe ser definida con la pestaña de código. Su único parámetro es el nombre de la variable global asociada.
- Chooser / Selector desplegable: Define también una variable global, pero cuyo valor se puede seleccionar por medio de una lista desplegable. Los valores que puede contener pueden ser de tipo cadena, números, booleanos o listas. Los parámetros de los que depende son:
- El nombre de la variable global asociada.
- El conjunto de opciones que se le ofrece al usuario para seleccionar. Debe ir una opción en cada línea, y se debe tener en cuenta que han de ser valores estáticos, no calculables a partir de reportes ni variables del modelo.
- Input / Caja de entrada: Define una variable global como en los casos anteriores, pero proporciona interfaces adecuadas para poder contener números, cadenas y colores (que en NetLogo realmente se pueden representar linealmente por medio de un código, pero por medio de esta caja se puede seleccionar de forma visual). Además del nombre, permite seleccionar qué tipo de dato contendrá la caja. Una vez en funcionamiento, esta caja proporciona por medio de un menú emergente opciones de copiar,cortar y pegar.
- Si es de tipo numérico, no tiene las restricciones del control slider, ya que puede introducirse cualquier número válido en NetLogo, y admite introducir también constantes numéricas como pi, blue, etc.
- Si es de tipo cadena (String) se puede decidir si se quiere una caja de texto multilínea, en cuyo caso añade un botón al control que se muestra en el interfaz para cambiar su contenido por medio de un mini editor de texto (muy básico, pero que admite el retorno de carro).
- Si es de tipo Color, el control muestra el valor del color seleccionado de forma visual, y usa la herramienta de Color Swatches como entorno amigable de selección de colores.
- Monitor: Permiten mostrar el valor de un reporte (en particular, de variables globales, pero no locales) en tiempo real. En Reporter se puede poner directamente el nombre de una variable, una “fórmula” que devuelva un valor, o el nombre de un reporte que se haya definido en la pestaña de código. Además, se puede mostrar un nombre descriptivo para que sea reconocible, seleccionar la precisión en caso de que el resultado sea numérico y definir el tamaño de fuente que se usará para su representación.
- Plot / Gráfica: Permite mostrar gráficas de diversos tipos que se actualizan en tiempo real o a petición del código. Debido a su importancia y mayor complejidad de uso, dedicaremos una entrada específica a su funcionamiento.
- Output / Salida: Este control proporciona un área (con barras deslizantes) para la salida de texto. Su función es mostrar, por ejemplo, información mientras se va ejecutando el modelo. El único parámetro personalizable es el tamaño de fuente que se usará para mostrar la salida. Una vez en ejecución por medio del menú emergente podemos seleccionar texto, copiar el texto seleccionado, borrar su contenido, y exportar el contenido a un fichero de texto. Es importante hacer notar que se admite únicamente un control de este tipo en el interfaz. NetLogo proporciona funciones específicas para mostrar información (imprimir) en este control.
- Note / Nota: Permite añadir etiquetas de texto al interfaz para hacerlo más amigable. Su contenido no puede ser modificado por medio de código, sino únicamente por medio de su diálogo de edición.
Obsérvese que NetLogo colorea los controles según su funcionalidad:
- Los de ejecución (solo los botones) son de color gris.
- Los de introducción de datos son de color verde.
- Los de muestra de información son de color beige.