Este tutorial presenta los elementos básicos de modelado y simulación en Vensim con un modelo de dinámica poblacional. Está basado en: Modeling Exercises Joseph Whelan, MIT System Dynamics Education Project 1994 & Business Dynamics, John Sterman, 2000. El propósito del tutorial es construir un modelo a partir de una situación que se plantea e ir diligenciando el Formato de control de experimentos en la medida en que se le indica.
1. Para el desarrollo de este tutorial se requiere de la versión "PLE" (Personal Learning Edition) del software Vensim. Las instrucciones detalladas se encuentran en el Tutorial de Vensim de la semana 1 (Tutorial de Vensim: Realimentación).
2. Descargar el Formato de registro de experimentos disponible aquí (haciendo click derecho en el siguiente enlace): Formato Experimentos. En este formato debe ir registrando los resultados que oarchivobtenga a lo largo de la construcción del modelo. No es necesario que entregue este formato diligenciado, es una herramienta de apoyo para la construcción del modelo y diligenciamiento de resultados.
Cada vez que vamos a crear un nuevo modelo se abre un cuadro de diálogo nuevo para realizar algunos ajustes de configuración antes de comenzar a trabajar; tiene varias pestañas (Time Bounds, Info/Pswd, Sketch, Units Equiv, XLS Files, Ref Modes). Por ahora nos interesa la primera pestaña que se abre por defecto, Time Bounds; esta pestaña nos permite configurar algunos elementos de simulación. Dado que la situación de Pueblito Viejo y Villa Desolación nos plantean dinámicas que ocurren anualmente, vamos a elegir que la unidad de tiempo del modelo sea de años. Para esto en "Units for Time" elegimos la opción de "Year". Para el resto de especificaciones podemos trabajar con los valores por defecto así que hagamos click en "Ok".
Imagen 1. Definición unidad de tiempo.
Un modelo de Dinámica de Sistemas consta de cuatro elementos:
Imagen 2. Tipos de variables en Vensim.
Imagen 3. Nivel.
Nivel: son variables que acumulan material en un "stock", por ejemplo: una población de personas, un inventario de material, empleados de una empresa. Las unidades que pueden tener los niveles son: número de individuos, cantidad de ítems, cantidad de personas, etc. Se representan con un rectángulo que sugiere un contenedor que retiene material.
Existen otros tipos de variables que no acumulan material sino que se calculan en cada instante de tiempo sin tener en cuenta sus valores anteriores, por esto las denominamos "variables instantáneas". Pueden ser flujos o variables auxiliares:
Imagen 4. Flujo.
Flujo: los flujos modifican niveles adicionándoles o restándoles material. Pueden ser de entrada (inflow) o de salida (outflow). Por ejemplo: cantidad de individuos que nacen cada año, cantidad de elementos que se despachan cada día, cantidad de empleados que se contratan al mes. Las unidades que tienen los flujos siempre son: cantidad de ítems / unidad de tiempo. Se representan con una flecha con doble línea y una válvula que representa que tan "abierto" o "cerrado" está el flujo en un momento dado.
Imagen 5. Variable auxiliar.
Variable auxiliar: son constantes o variables que pueden definirse como funciones, calculan relaciones algebraicas, etc. A diferencia de los flujos, las variables auxiliares no modifican directamente ningún nivel. Ejemplos: porcentaje de personas de una población que nacen cada año, valor del salario mínimo. Se representan mediante el nombre con el que se quiere denominar a la variable; por ejemplo, en la Imagen 5 la variable auxiliar se llama "X".
Imagen 6. Conector o enlace de información.
Conector o enlace de información: los conectores transmiten información entre variables con el fin de proveer la información requerida para formular ecuaciones y expresiones matemáticas. Se puede transmitir información a través de un conector desde cualquier variable (incluyendo niveles y flujos) hacia cualquier variable instantánea excepto hacia un nivel, estos últimos se modifican única y directamente con flujos.
Pueblito Viejo es una pequeña aldea localizada en la sabana. Realmente no es una gran metrópoli. El último censo realizado registró una población de 5000 Puebloviejanos. Históricamente se ha creído que cada año nacen 150 bebés en Pueblito Viejo. Igualmente, la registraduría del pueblo calcula en 75 las muertes anuales, siempre el mismo número, la mayoría entre la población anciana. ¿Cómo evolucionará la población de Pueblito Viejo en la próxima década?
Cerca de Pueblito Viejo hay una aldea llamada Villa Desolación. En el mismo año que se hizo el censo mencionado, Villa Desolación contaba también con 5000 habitantes. Sin embargo, en este pueblo los centros de salud están vacíos, los médicos y las enfermeras huyeron hace mucho tiempo y el cementerio está lleno. Sólo nacen, en promedio, 50 bebés al año. Y debido a los descuidos en salud, se calculan 90 muertes anuales. ¿Cómo evolucionará la población de Villa Desolación en los próximos 10 años? ¿Se comportará diferente de Pueblito Viejo? ¿Cuál debería ser la cantidad máxima de muertes para que dentro de 20 años Villa Desolación tenga la misma cantidad de habitantes que Pueblito Viejo? ¿Cómo cambiarían las poblaciones si ampliamos el horizonte de tiempo? ¿Y si los valores de nacimientos y muertes cambiarán a través del tiempo?
La Dinámica de Sistemas nos da la posibilidad de construir modelos que nos ayudan a responder estas preguntas con el fin de proveer lineamientos de acción para apoyar procesos de toma de decisión y de resolución de problemas complejos de ingeniería. En este tutorial vamos a explorar los aspectos básicos del software Vensim para poder construir y simular este tipo de modelos. En lo que sigue del tutorial se presentan instrucciones para que usted vaya construyendo su propio modelo y haciendo las verificaciones correspondientes según se le vaya indicando.
Con los anteriores elementos podemos construir un modelo de población para Pueblito Viejo. Considerando la información suministrada al comienzo entonces inicialmente supondremos que los nacimientos y muertes son constantes. Para representar la población necesitamos crear un nivel de personas en el que se acumulen los nacimientos y se sustraigan las muertes en cada instante de tiempo (e.g. cada año). Este modelo inicial se creará siguiendo tres pasos: 1. Crear el nivel; 2. Crear el flujo de entrada y 3. Especificar ecuaciones y documentar.
Imagen 7. Insertar un nivel.
Imagen 8. Insertar un flujo.
Imagen 9. Mover o eliminar variables.
Ya con esto tenemos un primer modelo de niveles y flujos con dos variables: un flujo de entrada de nacimientos que se acumulan en un nivel de Población:
Imagen 10. Nivel de población y flujo de nacimientos.
Nos falta definir los valores para dichas variables, tanto "Nacimientos" como "Población".
Imagen 11. Definir ecuaciones.
Imagen 12. Especificación de ecuaciones.
Siempre que se van a definir los valores de las variables el botón de ecuaciones debe estar activo. Esto se puede verificar viendo que el botón de ecuaciones en la barra de herramientas superior está oprimido o alternativamente que aparece junto al cursor la expresión "f(x)". Si no es así, hacer click en el ícono de ecuaciones.
Imagen 13. Especificación de ecuaciones del nivel de población.
¿Cómo cree que será el comportamiento del nivel "Población"? (Es decir, los valores que tomará a lo largo del tiempo considerando su valor inicial y la adición de 150 personas cada año) ¿Qué tipo de curva tendrá la población? ¿Constante? ¿Crecimiento? ¿Decrecimiento? ¿Si va a crecer o decrecer, cómo? ¿Linealmente? ¿Aceleradamente? Etc.
Anote o grafique manualmente su estimación en el Formato de control de experimentos en la columna de "Estimación (pre-simulación)" de la simulación 1. Pueblito Viejo, nacimientos constantes.
Dado que ya están especificadas todas las variables podemos hacer una primera simulación; esto significa "correr" el modelo para que el simulador resuelva los valores de todas las variables a lo largo de un horizonte de tiempo. Al correr un modelo, Vensim guarda los datos de la simulación en archivos de datos diferentes del archivo que contiene al modelo. Esto permite tratar estos archivos de datos como "experimentos" que se pueden analizar y utilizar para diferentes propósitos.
Imagen 14. Configuración de simulaciones.
Imagen 15. Simulación.
Imagen 16. Graficar variables.
Se debió abrir una ventana con el comportamiento de la Población denotado con una línea de color azul. Con esto se pueden completar las dos columnas restantes de la primera fila del Formato de control de experimentos (por ejemplo, copiando y pegando la gráfica de la simulación en la casilla correspondiente al "resultado post-simulación" directamente en la tabla; o se podría también describir el comportamiento en palabras, e.g. "crecimiento lineal"). En la columna de observaciones escriba qué diferencias encuentra frente a su estimación inicial y, si las hubo, a qué cree que se debe la diferencia.
Imagen 17. Synthesim.
Dado que no hemos cambiado el nombre del archivo de simulación (se sigue llamando "Base") Vensim despliega una ventana de advertencia que ya existe un archivo de datos de simulación llamado "Base" y pregunta si lo queremos reescribir con esta nueva simulación ("Dataset Base already exists. Do you want to overwrite it?") a lo que podemos confirmar que sí. Debió aparecer entonces una línea azul constante atravesando el nivel "Población" la cual corresponde al comportamiento actual de dicho Nivel.
Imagen 18. Simulación preliminar con Synthesim.
También debió aparecer un deslizador ("slider") abajo del flujo de "Nacimientos" el cual podemos mover con el cursor. Observemos que al moverlo cambia inmediatamente el comportamiento del nivel "Población".
Imagen 19. Simulación de escenarios con Synthesim.
Mientras estamos en "SyntheSim" podemos usar también el botón "Graph" que utilizamos anteriormente para mirar con mayor detalle el comportamiento de cualquier variable. Por ejemplo podemos llevar el deslizador hacia la izquierda hasta cero, luego hacer click en "Población" y luego en "Graph" para generar nueva ventana que desplegará el comportamiento de la Población si los nacimientos son iguales a cero.
Imagen 20. Gráfica de población con nacimientos iguales a cero.
En la barra de configuración de simulaciones aparecen además dos botones para restablecer ("resetear") los cambios que hacemos mientras estamos en "SyntheSim" y trabajar de nuevo con los valores especificados originalmente en el modelo:
Imagen 21. Restablecer valores del modelo.
El botón de la izquierda "Reset Current" restablece los valores del deslizador que estemos cambiando a sus valores originales; el botón de la derecha "Reset all" restablece todas las constantes y funciones gráficas que hayamos modificado a sus valores y configuraciones originales.
Para terminar y salir del modo "SyntheSim" hacer click en "Stop Setup" que también aparece disponible cada vez que estemos utilizando "SyntheSim":
Imagen 22. Finalizar y salir del modo Synthesim.
Ya con los elementos anteriores estamos en capacidad de construir modelos de Dinámica de Sistemas, simularlos, generar archivos de datos de simulación, observar comportamientos de variables y hacer análisis de simulaciones al cambiar valores en parámetros.
Falta modelar las muertes en Pueblito Viejo. Para esto vamos a crear un flujo de salida del nivel "Población" que le sustraiga "material" (en este caso personas).
Imagen 23. Modelo de población con nacimientos y muertes.
¿Cambiará el comportamiento de la población? ¿Seguirá siendo creciente y lineal? ¿En qué se diferenciará de la simulación anterior? Anote o grafique manualmente su estimación en el Formato de control de experimentos en la columna de "Estimación (pre-simulación)" de la simulación 2. Pueblito Viejo, nacimientos y muertes constantes.
Imagen 24. Creación de nuevas simulaciones.
Podemos de nuevo observar los resultados de las simulaciones para el nivel de "Población" en una nueva ventana haciendo click dentro del nivel y luego en el botón "Graph":
Imagen 25. Gráfica comparativa del comportamiento de la población en dos escenarios diferentes.
En la parte inferior aparecen los nombres de las simulaciones las cuales se pueden marcar o desmarcar según lo que queramos observar. Podemos también hacer "zoom" en la gráfica y examinarla con mayor detalle haciendo click dentro de la gráfica y arrastrándolo en diagonal seleccionando así la zona de la gráfica en la que nos quisiéramos concentrar. En el menú "View" de la ventana de la gráfica podemos seleccionar "Reset Scale" para ver de nuevo las simulaciones completamente.
Con esto podemos actualizar el Formato de control de experimentos para la simulación 2, copiando la nueva gráfica en la columna de resultados y diligenciando en la columna de Observaciones: ¿Qué diferencias observa frente a su estimación? ¿A qué se deben estas diferencias?
Vensim cuenta con un panel de control que permite modificar algunas configuraciones que gobiernan la operación de Vensim como por ejemplo los archivos de datos de simulaciones, la creación de gráficas, entre otras cosas:
Imagen 26. Panel de control.
Al hacer click en el panel de control se despliega la ventana correspondiente con cinco pestañas; se puede seleccionar por ejemplo "Datasets" que sirve para definir cuáles archivos de datos de simulaciones están "cargados" y por lo tanto en uso por parte del simulador. Deberían aparecer en la ventana derecha de "Loaded-Info" los archivos "Base con muertes" y "Base":
Imagen 27. Seleccionar datos de simulaciones.
Además de ofrecer la posibilidad de cargar, descargar y eliminar archivos de datos de simulaciones, el panel de control cuenta en sus pestañas superiores con otras opciones, en total son las siguientes:
Con el modelo de simulación actual podemos examinar las dinámicas de Villa Desolación. ¿Cómo será el comportamiento de la "Población" dados los valores que tiene para nacimientos y muertes? ¿Crecerá también como en Pueblito Viejo? ¿Disminuirá? ¿También linealmente?
Anote o grafique su estimación en el formato de control de experimentos en la columna de "Estimación (pre-simulación)" de la simulación 3. Villa Desolación, flujos constantes.
Una opción para examinar el caso de Villa Desolación es modificar las ecuaciones de "Nacimientos" y "Muertes" directamente en la definición de variables del modelo. Otra opción más práctica, dado que la estructura del modelo es la misma de Pueblito Viejo (un nivel de población, un flujo de entrada de nacimientos constante y un flujo de salida de muertes también constante) y lo único que cambia son los valores de los flujos (es decir, los valores de nacimientos y de muertes), consiste en aprovechar "SyntheSim" y utilizarlo para mover los deslizadores de los flujos a los valores 50 y 90 que corresponden respectivamente a los nacimientos y muertes en Villa Desolación:
Imagen 28. Modelo de población con nacimientos y muertes en modo Synthesim.
De nuevo podemos utilizar el botón "Graph" para mirar en detalle y manipular las gráficas de simulación. Igualmente podemos actualizar las columnas de resultados y observaciones del formato de control de experimentos para la simulación 3. Para esta simulación observe qué diferencias se obtienen frente al comportamiento de la población de "Pueblito Viejo", ¿a qué se deben esas diferencias?
En la barra de herramientas de análisis (a la izquierda) varios botones permiten examinar los vínculos causales entre variables. Por ejemplo, ¿cuáles variables afectan al nivel "Población"? En particular hay que pensar cómo es la relación causal entre población y el flujo de muertes pues se podría pensar visualmente que el nivel de "Población" afecta al flujo de salida. ¿Es el nivel el que afecta al flujo de salida? Conceptualmente es importante notar que son las muertes las que sustraen material al nivel y por lo tanto lo afectan causalmente. Podemos utilizar las herramientas de análisis para construir árboles causales; por ejemplo, para examinar las variables que afectan al nivel "Población" hagamos click primero en dicho nivel y luego click en el botón "Causes Tree":
Imagen 29. Árbol de causalidad.
Se puede cerrar la ventana del árbol causal en la "x" de la esquina superior derecha.
Los Nacimientos y las Muertes están definidos hasta ahora como constantes, es decir, sin importar nada de lo que pase, por ejemplo, en Pueblito Viejo, siempre nacen 150 personas y mueren 75, año tras año siempre igual. En efecto, el árbol causal del nivel Población evidencia que en este modelo por ahora la causalidad va en una sola dirección, Muertes y Nacimientos son "causas" de Población. Sin embargo, si pensamos un poco más podemos caer en la cuenta de que seguramente la Población debería afectar también los nacimientos (entre más gente haya más gente nacerá) y las muertes (entre más gente haya seguramente más gente morirá; pensemos en un caso extremo, si Pueblito Viejo llegara a crecer como Bogotá y en algún momento tuviera 9 millones de habitantes seguramente las muertes serán más de 75 personas al año). Vamos entonces a modificar el modelo para que los nacimientos y las muertes sean un porcentaje anual de la población.
Podemos calcular para Pueblito Viejo una fracción anual de nacimientos (e.g. el porcentaje de la población que nace cada año) de 150 / 5000 = 0.03 o 3% anual. La fracción anual de muertes la podemos calcular como 75 / 5000 = 0.015 o 1.5% anual. Similarmente para Villa Desolación la fracción de nacimientos sería de 50 / 5000 = 0.01 o 1% anual; la fracción de muertes será igual a 90 / 5000 = 0.018 o 1.8% anual.
Imagen 30. Agregar variables auxiliares.
Imagen 31. Agregar conectores.
Imagen 32. Modelo de población con realimentación en los nacimientos.
Imagen 33. Modelo de población con realimentación en nacimientos y muertes.
Imagen 34. Simulación de población en diferentes escenarios.
Observemos que la nueva simulación "Base con realimentación" presenta un patrón de comportamiento diferente a las dos anteriores pues no crece linealmente sino aceleradamente (cada vez más rápidamente). ¿A qué cree que se debe que el crecimiento ya no sea lineal sino acelerado? Esta pregunta es importante y apunta a uno de los aspectos esenciales de la Dinámica de Sistemas: la manera cómo la estructura de un sistema determina su comportamiento.
Con estos resultados podemos actualizar el formato de control de experimentos para la simulación 4 y en particular en la última columna diligenciar una posible explicación para esta diferencia en patrones de comportamiento, ¿a qué se deberá?
¿Cuál será el comportamiento de Villa Desolación que cuenta con la misma estructura de relaciones entre variables pero con fracciones anuales de nacimientos y muertes diferentes (1% y 1.8%)? Realice su estimación en el formato de control de experimentos en la columna de "Estimación (pre-simulación)" de la simulación "5. Villa Desolación, nacimientos y muertes varían, realimentación, fracciones constantes".
Podemos ahora utilizar el simulador para verificar si nuestras intuiciones o estimaciones tienen o no sentido; para esto podemos utilizar "SyntheSim"; sin embargo, antes de hacer esto es conveniente acotar los valores que pueden tomar las fracciones de nacimiento y muertes para manipular más fácilmente los deslizadores; para esto, en modo ecuación (click en "Equations" o "f(x) ") hagamos click en cada una de las fracciones para abrir el cuadro de diálogo que define sus ecuaciones y definimos los valores mínimos, máximos y el valor del incremento en las ventanas Min, Max & Incr. Estos valores se deben calcular como resultado de una investigación empírica; por lo pronto podemos suponer razonablemente que las fracciones nunca tendrán un valor inferior a 1% ni superior al 3%; podemos definir entonces los valores mínimos, máximos y de incremento como 0.01, 0.03 y 0.001 respectivamente; definamos esto para ambas fracciones:
Imagen 35. Definición de mínimos, máximos e incrementos.
La definición de rangos de variables será usualmente una práctica conveniente desde el punto de vista conceptual en el desarrollo de modelos de Dinámica de Sistemas. Además con estas acotaciones podemos utilizar más fácilmente "SyntheSim"; creemos entonces un nuevo archivo de simulación para comparar los resultados, lo podemos nombrar "Base con realimentación Villa Desolación" y en modo "SyntheSim" movamos los deslizadores a los valores de las fracciones de nacimientos y muertes de Villa Desolación, es decir a los valores de 1% (0.01) y 1.8% (0.018) respectivamente. Utilicemos además el botón "Graph" para comparar los resultados de acuerdo con las simulaciones que ya tenemos cargadas:
Imagen 36. Simulación de la población en diferentes escenarios.
Pegue esta gráfica en el Formato de control de experimentos en la columna de Resultados. De la simulación "5. Villa Desolación, nacimientos y muertes varían, realimentación, fracciones constantes". ¿Qué diferencias observa frente al caso de los nacimientos y muertes constantes? ¿A qué se deberá ese cambio?
Podemos crear gráficas con características especiales para análisis; para esto utilizaremos el panel de control ("Control Panel") y la pestaña Graph en donde crearemos una gráfica para ampliar las posibilidades de análisis de los resultados de las simulaciones; seleccionemos la opción "New" para abrir el cuadro de diálogo de definición de gráfica. La podemos nombrar por ejemplo "Modelo poblacional", igualmente podemos definir que el título que aparezca en la gráfica sea ese mismo "Modelo poblacional", y en las variables, utilizando "Sel" seleccionemos Población, Nacimientos y Muertes; démosle además un grosor mayor a "Población" (definamos LineW = 2) para que los resultados del nivel sean más visibles que las de los flujos. Hay otras opciones que podemos definir también como por ejemplo los títulos y rangos de los ejes, los intervalos de las divisiones, entre otros:
Imagen 37. Creación de gráficas.
Confirmamos los cambios y cerramos el panel de control. Necesitamos ahora definir esta gráfica como un objeto a desplegar en el espacio de trabajo. Para esto en la barra de herramientas de modelado hacemos click en "IO Object":
Imagen 38. Agregar gráficas a la interfaz.
El cuadro de diálogo que se abre nos permite definir nuevos deslizadores y gráficas que podemos configurar; seleccionemos esta última opción "Output Custom Graph" y en las opciones desplegables en la parte inferior "Custom Graph or Analysis Tool for Output" seleccionamos "Modelo_poblacional" que corresponde a la gráfica que creamos anteriormente, y confirmamos los cambios con "OK":
Imagen 39. Definición del tipo de gráfica.
Podemos proceder a simular (click en "Simulate") para ver los resultados; utilicemos el archivo de simulación "Base con realimentación" pues sigue siendo nuestro modelo "Base" con los ciclos de realimentación de nacimientos y muertes. Como hemos hecho varias simulaciones, debemos definir cuál es la que queremos observar. En el panel de control ("Control Panel") en la pestaña "Datasets" se muestran todas las simulaciones que hemos creado. Como sólo queremos dejar la de "Base con realimentación", entonces vamos a dejar las simulaciones que no queremos utilizar por ahora como disponibles pero no cargarlas. Para esto debemos "enviarlas" hacia la izquierda haciendo click en el nombre de la simulación y luego haciendo click en el botón de dirección a la izquierda "<<". Así, dejamos únicamente los datos de "Base con realimentación" en el cuadro de la derecha.
Imagen 40. Selección de datos de simulación a graficar.
Podemos crear dos deslizadores para las fracciones de nacimiento y muertes; para esto utilicemos de nuevo el control "IO Object" y seleccionemos ahora "Input Slider" y en "Variable name" seleccionemos "Constant" para desplegar la lista de constantes del modelo; seleccionemos la Fracción de nacimientos; hagamos el mismo procedimiento para la Fracción de muertes. Con estos dos deslizadores podemos utilizar "SyntheSim" para examinar cómo la Población, los Nacimientos y las Muertes cambian al variar los valores de las fracciones anuales moviendo los deslizadores que acabamos de crear:
Imagen 41. Interfaz de simulación.
La barra de herramientas de análisis trae otras opciones de las cuales se pueden explorar las siguientes:
Imagen 42. Herramientas de análisis.
Con esto ya cuenta con su primer modelo de niveles y flujos a partir de una situación descrita y conoce las posibilidades de simulación y análisis que tiene Vensim. ¡También ya puede crear sus propios modelos!
Este tutorial estará disponible para que usted lo revise cuántas veces lo necesite.
Versión 1. Mayo 2022
Camilo Olaya | Autor |
Laura Guzmán Abello | Autora |
Daniela Quintero | Autora |
Rocío Héndez | Revisión pedagógica |