pfc modelado dinámico y simulación en java de interacciones...
Post on 09-Apr-2020
7 Views
Preview:
TRANSCRIPT
PROYECTO FIN DE CARRERA
MODELADO DINÁMICO Y
SIMULACIÓN EN JAVA DE
INTERACCIONES DE
SISTEMAS DE ENJAMBRES
DE PARTÍCULAS
AUTOR: D. ROBERTO GARCÍA HABA
TUTOR: DR. D. FEDERICO CUESTA ROJO
FECHA: JUNIO DE 2011
UNIVERSIDAD DE SEVILLA
ESCUELA SUPERIOR DE INGENIEROS
DPTO. DE INGENIERÍA DE SISTEMAS Y AUTOMÁTICA
INGENIERÍA DE TELECOMUNICACIÓN
2
ÍNDICE DE CONTENIDOS
CAPÍTULO 1: INTRODUCCIÓN 4
CAPÍTULO 2: ACERCA DE LA APLICACIÓN DE APOYO EASY JAVA SIMULATIONS 7
2.1. Instalando y arrancando Ejs por vez primera 8
2.2. Estructura de directorios 8
2.3. Ejecutando Ejs 9
2.4. Trabajando con una simulación 11
2.4.1. La introducción 11
2.4.2. El modelo 12
Declaración de variables 13
Inicialización del modelo 14
Evolución del modelo 14
Ligaduras entre variables 16
Métodos propios o a medida 16
Comportamiento del modelo 16
2.4.3. La vista 17
2.4.4. Comportamiento de la simulación 23
2.4.5. Ejecutando una simulación 24
2.4.6. Distribución de las simulaciones 25
CAPÍTULO 3: SISTEMA DE CONTROL DEL NIVEL DE UN DEPÓSITO 27
3.1. Obtención del modelo y la vista de la simulación 30
Esquemas de control y realimentación 34
Vista de la simulación 38
3.2. Diseño de controladores para el sistema 42
3.2.1. Diseño empleando control por realimentación simple 43
Estudio del controlador P 43
Estudio del controlador PI 45
Estudio del controlador PD 48
Estudio del controlador PID 53
3.2.2. Diseño empleando control en cascada 56
3.3. Otras consideraciones 57
Efecto windup 57
Variable de control ilimitada 59
Valoración final 60
CAPÍTULO 4: OPTIMIZACIÓN DE ENJAMBRES DE PARTÍCULAS 62
4.1. Obtención del modelo y la vista de la simulación 66
Vista de la simulación 79
4.2. Análisis del fenómeno bajo estudio 84
Caso 1. Comparativa de las diversas aceleraciones 84
Caso 2. Equilibrio velocidad-ángulo de giro en poblaciones 87
Caso 3. Desequilibrio velocidad-ángulo de giro en poblaciones 89
4.3. Otras consideraciones 91
3
Efecto de la variación de los pesos en las aceleraciones 92
Agrupación de manadas de distinta especie en una única 93
Rangos de detección y separación diferentes según la especie 94
Piezas finitas en depredadores 97
Incluyendo obstáculos y plantas 98
Valoración final 102
CAPÍTULO 5: MOVIMIENTO MIGRATORIO DE HERBÍVOROS 104
5.1. Obtención del modelo y la vista de la simulación 107
Vista de la simulación 110
5.2. Análisis del fenómeno bajo estudio 111
Caso 1. Estudio inicial con Haz Activo e Igual Salida habilitados 112
Caso 2. Aumentando el rango de detección en carnívoros 115
Caso 3. Desequilibrio velocidad-ángulo de giro en poblaciones 118
5.3. Otras consideraciones 121
Efecto de la variación en el ancho de haz de salida en herbívoros 121
Valoración final 126
CAPÍTULO 6: CONCLUSIONES 128
CAPÍTULO 7: BIBLIOGRAFÍA 130
7.1. Apuntes 130
7.2. Manuales 130
7.3. Páginas webs 130
4
CAPÍTULO 1: INTRODUCCIÓN
La finalidad de este proyecto es analizar el modelado y la simulación de sistemas
dinámicos compuestos por múltiples individuos interactuando, ayudándose para ello
de la herramienta Ejs (Easy Java Simulations), elaborada por el profesor -doctorado en
Matemáticas- Francisco Esquembre, el cual desempeña actualmente sus funciones en
la Universidad de Murcia.
En primer lugar, trataremos de dar una vista global al entorno de programación Ejs.
Veremos que es de muy fácil manejo, ya que el aspecto que su interfaz presenta se
antoja muy intuitivo, y aunque no sea quizá la aplicación más potente para el estudio
de procesos complejos, en cuanto a lo que se refiere a sistemas con fines didácticos -lo
que se pretende en este trabajo- cumple sobradamente los requisitos esperados.
Ejs simplifica nuestra tarea a la hora de programar en Java, lo que resulta de agradecer
para los programadores inexpertos, aunque también incluye la posibilidad de añadir
nuestro propio código importado si somos analistas informáticos experimentados.
Dispone además de varios métodos de resolución de ecuaciones diferenciales
ordinarias, según la precisión y el grado de complejidad del sistema a modelar.
Esta herramienta es capaz de generar el código necesario (applets de Java, páginas
HTML) para poder colgar las simulaciones en internet.
Además, presenta la eventualidad de interconectarse con la herramienta Matlab para
así aprovechar su gran potencia de cálculo.
A continuación y como segunda parte del proyecto, procederemos al estudio de un
sistema de control del nivel de agua de un tanque, con objeto de ahondar más en las
características de la herramienta Ejs para adquirir mayor destreza en su manejo.
Modelaremos el sistema de tal forma que se asemeje lo más posible a cualquiera que
nos pudiéramos encontrar en un laboratorio, con parámetros específicos para las
válvulas, los depósitos, la bomba y los controladores PID que dispone.
Consideraremos distintas estructuras de control: control por realimentación simple
usando un PID y control por realimentación en cascada (también conocida como
maestro-esclavo).
Tendremos en cuenta la existencia de saturación en la señal de control de la
servoválvula.
5
Del mismo modo, la bomba podrá ser configurada para que trabaje al cien por cien o,
por el contrario, existan unas pérdidas que no le permitan rendir al máximo,
disminuyendo el caudal máximo admisible de la servoválvula.
Pese a ello, otra opción que estará a nuestro alcance será la de estudiar el efecto ideal
de no saturación de la señal de control ni de la bomba, lo que desembocará en un flujo
ilimitado a la salida de la servoválvula.
Incluso corregiremos, si así lo queremos, el efecto integral del controlador cuando la
variable de control alcanza los límites prefijados del actuador. Cuando esto sucede, el
bucle realimentado permanece en su límite independientemente de la salida del
proceso. Si empleamos un controlador con acción integral, el error continuará siendo
integrado, incrementando aún más su valor. Por lo que el término integral puede
volverse muy grande, produciéndose de esta guisa el efecto denominado windup.
Evitaremos que este fenómeno ocurra mediante el empleo de un condicional en la
estructura de control que deje de integrar el error cuando se rebasen los límites de
saturación de la señal de control, es lo que se llama control anti-windup.
Luego de abordar el capítulo dedicado a la implementación de un laboratorio de
control para familiarizarnos aún más con la herramienta Ejs, estaremos ya capacitados
para adentrarnos en el análisis de la optimización de enjambres (o manadas o
bandadas) de partículas.
Así, veremos cómo actúan dichas bandadas para agruparse o disgregarse según se
encuentren con individuos de la misma o distinta especie, respectivamente.
Básicamente, son tres las reglas que rigen el comportamiento de un enjambre:
- Alineación: cada elemento del grupo intentará llevar la misma velocidad
(ángulo y módulo) que todos los que estén en su radio de detección.
- Cohesión: tratará de dirigirse al centro percibido de la bandada, es decir, al
centroide de todos los individuos que es capaz de detectar en su radio.
- Separación: evitará sitios donde haya mucha congregación de partículas.
Siguiendo estas tres normas, junto con otras como las de evitar predadores y
obstáculos o perseguir a sus presas, analizaremos con detenimiento la conducta de
todas las especies animales implicadas.
Tras la comprensión del problema de optimización de enjambres de partículas,
acometeremos la empresa de evaluar la manera de proceder de los herbívoros en un
caso particular que cualquier amante de la naturaleza habrá tenido la ocasión de
vislumbrar en algún documental de vida salvaje: la migración anual de cebras y ñus
6
desde la reserva del Serengeti (Serengueti en castellano), en Tanzania, hasta su
homóloga en Kenia, la del Masai Mara.
En este viaje de ida y vuelta que emprenden tales sujetos tendrán que enfrentarse a
innumerables vicisitudes.
Nosotros nos centraremos principalmente en dos circunstancias:
- La travesía de la sabana, lugar donde moran grandes carnívoros terrestres
como el león, el leopardo y el guepardo, aunque en primer término sólo
examinaremos el problema con los leones como único predador en potencia de
la sabana.
- El dramático cruce del río Mara, que sirve de frontera entre los territorios de
Tanzania y Kenia, residencia habitual de unos de los más voraces y ancestrales
predadores acuáticos: el cocodrilo.
De esta forma, haremos un estudio de población de las diversas familias que habitan
estas regiones del continente africano, analizaremos sus movimientos y su manera de
actuar frente a la casuística existente sobre este tema.
Finalmente, dedicaremos unas páginas a las conclusiones que se hayan podido sacar
de todas las aplicaciones realizadas, cerrando este proyecto con las citas de los
materiales bibliográficos empleados para su elaboración.
7
CAPÍTULO 2: ACERCA DE LA APLICACIÓN DE
APOYO EASY JAVA SIMULATIONS
Una vez expuestos los motivos fundamentales y la planificación a seguir a lo largo de
esta memoria, iremos paso a paso por los respectivos puntos del índice de contenidos
de la misma.
Para acometer nuestro trabajo -como en toda labor técnica- precisaremos de una
utilidad concreta. Se ha optado por Ejs por su facilidad de uso; no obstante, podría
haberse realizado con la ayuda de cualquier lenguaje de programación actual.
Es el momento de explicar, sin lujo de detalles pero de manera sucinta, la herramienta
usada para la elaboración de las distintas simulaciones de este proyecto.
Fue denominada Ejs (Easy Java Simulations) por el profesor -doctorado en
Matemáticas- Francisco Esquembre, consultar las fuentes [3] y [5] en bibliografía, que
actualmente desempeña su cargo en la Universidad de Murcia.
Esta aplicación presenta enormes ventajas, como la simplificación de la tarea tanto
desde el punto de vista técnico como conceptual.
En cuanto a lo primero, nos facilita la construcción de la parte gráfica de la simulación,
llamada vista en Ejs, basándose para ello en la noción de configuración arbórea o
padre-hijo.
Respecto a lo segundo, porque nos proporciona una estructura simplificada para la
creación del modelo de la simulación, esto es, de la descripción científica del
fenómeno bajo estudio.
Evidentemente, parte de la tarea sigue estando en nuestras manos. Corre a nuestro
cargo diseñar la vista y especificar a Ejs las variables y algoritmos que describen el
modelo de la simulación. Veremos cómo usar debidamente la herramienta para
realizar la vista. En cuanto al modelo, aprenderemos a proporcionar las variables
necesarias que describen su estado y a escribir el pertinente código Java de los
métodos del mismo. En otras palabras, adquiriremos la habilidad necesaria para
programar el computador a que nos ayude a resolver el modelo.
8
2.1. Instalando y arrancando Ejs por vez primera
Ejs funciona en cualquier sistema operativo. Sólo precisa que este tenga instalada una
máquina virtual de Java. Supondremos que estamos bajo el sistema operativo
Windows, al ser el más extendido en la comunidad global, aunque se podría emplear
cualquier otro, existiendo obviamente algunas diferencias en cuanto a lo que se
pretende explicar en este sub-apartado.
Los pasos a seguir para instalar Ejs son los siguientes:
- Copiar los archivos de Ejs (a disposición en el CD del proyecto) al disco duro,
por ejemplo, en C:\Ejs.
- Instalar la herramienta de desarrollo Java (JDK), si es preciso (también
encontramos una en el CD). Consultar [6] en la literatura para más información.
- Indicar a Ejs el lugar donde se halla esta última herramienta.
Mostrarle al ordenador la ruta del JDK dependerá del modo en que vayamos a ejecutar
Ejs.
En caso de hacerlo mediante la consola (archivo EjsConsole.jar), que es el método
recomendado, indicaremos en el correspondiente campo de texto el directorio de
instalación del JDK.
Si por el contrario queremos correr Ejs desde una ventana de comandos, deberemos
editar el correspondiente script (comando) según nuestro sistema operativo, que para
Windows es Ejs.bat. Cambiaremos la línea que dice:
set JAVAROOT=C:\Program files\Java\jdk1.5.0_04sdf
por otra con el directorio actual de nuestro JDK.
Si deseamos obtener una versión gratuita más reciente tanto de Ejs como del kit de
desarrollo Java (JDK), sólo tenemos que visitar las correspondientes páginas webs de
sus autores: www.um.es/fem/Ejs/ para la primera, www.java.com/es/ para la segunda.
2.2. Estructura de directorios
En el lugar donde tenemos instalado Ejs aparecen junto a los archivos para ejecutar
dicha aplicación dos directorios: data y Simulations. El primero de ellos contiene los
archivos de programa de Ejs y por tanto no se debe modificar. El segundo será nuestro
directorio de trabajo por defecto y podremos modificar libremente su contenido con la
9
única excepción del directorio _library, que deberemos dejarlo tal cual, puesto que es
usado como su propio nombre indica a modo de librería por Ejs, y será necesario
incorporarlo en nuestras simulaciones allá donde nos las llevemos si deseamos que
estas funcionen.
2.3. Ejecutando Ejs
Una vez hayamos lanzado la aplicación Ejs por cualquiera de los dos métodos
mencionados, tendremos ante nuestros ojos la interfaz que se muestra a continuación
en la figura 2.1.
Figura 2.1. Interfaz de usuario Easy Java Simulations.
10
Como podemos observar, la interfaz es bastante básica, poco cargada de iconos. Esto
es muy de agradecer, puesto que un usuario novel no sentirá pánico al tener de frente
el programa para experimentarlo por primera vez.
Para crear una nueva página de cada tema, únicamente debemos hacer click con el
ratón en la zona central del panel (panel de trabajo), destinada una vez generada al
desarrollo de cada uno.
En la parte superior, apreciamos el selector de panel de trabajo:
- Introducción: aquí se explicará en qué consiste nuestra simulación. Esto se
traducirá automáticamente a una página (o varias) HTML si tenemos habilitado
Ejs para ello.
- Modelo: contendrá las variables y ecuaciones diferenciales que gobiernan
nuestro proceso, así como los métodos Java necesarios para el mismo.
- Vista: construiremos en esta sección el aspecto gráfico que deseamos tenga
nuestra simulación al ser ejecutada. Para dicho fin se usa una estructura en
forma de árbol jerarquizado.
En la zona inferior se halla el área de mensajes, donde se visualizarán las posibles
anomalías al compilar el programa o cualquier otro evento reseñable.
En el lado derecho tenemos la barra de tareas. Brevemente explicamos ahora las ocho
opciones que dispone:
New: al pulsar sobre ella se limpia la simulación actual (si la hay) y se
devuelve a Ejs a su estado inicial.
Open: si queremos cargar una simulación existente.
Save: para guardar la simulación actual en el mismo archivo desde el que se
cargó.
Save as: para guardar la simulación con un nombre distinto al actual.
Run: para generar y ejecutar la simulación actual.
Font: este icono permite cambiar el tipo y tamaño de la fuente usada en las
áreas de texto de Ejs.
Options: este botón modifica algunas opciones acerca de la apariencia y el
comportamiento de Ejs.
Information: muestra información relativa a Easy Java Simulations.
11
2.4. Trabajando con una simulación
Haremos uso a continuación de una simulación existente para profundizar un poco en
las diferentes partes que la componen.
Para ello, abriremos el fichero Spring.xml que se encuentra dentro del directorio
denominado _examples/Manual/FirstContact en nuestra carpeta de trabajo
(Simulations) donde hemos instalado Ejs.
2.4.1. La introducción
En la figura 2.2 se aprecia una breve descripción de la simulación en cuestión,
consistente en el estudio del movimiento horizontal de una masa situada en el
extremo de un muelle siguiendo la conocida Ley de Hooke.
12
Figura 2.2. Páginas de introducción para la simulación de un resorte.
Estas páginas pueden ser modificadas a nuestro gusto si hacemos click derecho con el
ratón sobre su nombre y escogemos la opción editar, apareciendo un sencillo editor
HTML para este fin.
2.4.2. El modelo
Ahora procedemos a inspeccionar el modelo. Si pinchamos en el botón
correspondiente de la zona superior de la interfaz podremos visualizar la imagen de la
figura 2.3.
13
Figura 2.3. Sub-paneles del modelo. El panel para la definición de las variables es el
mostrado actualmente.
Se observa como arriba aparecen cinco sub-paneles con las distintas partes que
conforman el modelo.
Declaración de variables
El primero de ellos, etiquetado como Variables y mostrado en la figura 2.3, es el
destinado a especificar todas las variables (ya sean parámetros, variables de estado o
de entrada y salida, constantes) presentes en el modelo.
Se deberá elegir un nombre adecuado para las mismas, un valor inicial, el tipo (si es de
valor entero -int-, real -double-, booleano -boolean-, texto -String-, u objeto -Object-), y
su dimensión (en caso de tratarse de un vector, una matriz, etc.).
En nuestro caso, las variables son las siguientes:
m: la masa de la bola en el extremo del resorte.
k: la constante elástica del muelle.
l: la longitud del resorte en equilibrio.
14
x: la coordenada horizontal del extremo del muelle.
y: la coordenada vertical del extremo del resorte, la cual permanecerá
constante.
vx: la velocidad del movimiento horizontal.
t: el tiempo de la simulación.
dt: el incremento de tiempo de cada paso de simulación.
Como podemos observar, algunas variables corresponden a parámetros del sistema
(m, k, l), otras describen su estado (x, y, vx), y otras son requeridas para la simulación
(t, dt).
Además, si nos fijamos en la línea inferior de la figura 2.3, donde aparece la palabra
Comment o Comentario (según el idioma de Ejs), hay un hueco a su derecha para
añadir si lo deseamos una breve descripción de cada variable. Esto es muy útil, puesto
que si algún usuario experimenta por vez primera una simulación le resultará más fácil
de comprender, así como también para el creador de la misma, ya que si transcurre un
largo período de tiempo podrá recordar mejor su funcionamiento.
Inicialización del modelo
Aunque a través del apartado anterior somos capaces de darle un valor inicial a las
variables, hay ocasiones en las que se precisa una inicialización más compleja (por
ejemplo, si necesitamos realizar algunos cálculos preliminares). Para estos casos,
usaremos el segundo sub-panel del modelo.
En nuestra simulación no necesitamos emplear este sub-panel de inicialización, debido
a que hacemos esto en la misma declaración de variables, por lo que dejamos dicho
sub-panel sin editar (vacío).
Evolución del modelo
En este tercer sub-panel especificaremos lo que queremos que la aplicación haga cada
vez que se ejecute un paso de simulación. Pueden coexistir dos tipos de páginas: un
primer tipo donde se escribirá el código Java para implementar el algoritmo deseado, y
un segundo donde el modelo es descrito usando sistemas de ecuaciones diferenciales
ordinarias.
15
Vamos a describir el comportamiento del muelle mediante el segundo tipo de página.
La ecuación diferencial que gobierna nuestro modelo se obtiene de aplicar la Segunda
Ley de Newton, F m a= ⋅ , en conjunción con la Ley de Hooke para el movimiento de un
muelle, F k dx= − ⋅ .
De este modo, obtenemos la ecuación diferencial de segundo orden:
( )k
x x lm
= − −ɺɺ (1.1)
A continuación necesitamos reescribir esta ecuación para introducirla en el editor de
ecuaciones diferenciales de Ejs. Para ello, usaremos la variable xv x= ɺ . De esta forma,
el resultado final es el de la figura 2.4.
Figura 2.4. Panel de evolución con las ecuaciones diferenciales de nuestro resorte.
Se distingue en esta imagen como hemos seleccionado t como variable independiente,
dt como el incremento de tiempo de cada paso de simulación, el Método de Euler-
Richardson como método de cálculo numérico empleado en la resolución de las
ecuaciones, y un valor de veinte fotogramas o imágenes por segundo (FPS o IPS) para
la simulación.
16
Ligaduras entre variables
El panel etiquetado como Constraints o Ligaduras se usa para escribir el código Java
necesario para establecer ciertas relaciones que deben cumplirse siempre entre
algunas variables, es lo que llamamos ligaduras.
Como nuestro modelo no presenta ninguna ligadura, esta página estará en blanco.
Métodos propios o a medida
El quinto sub-panel, denominado Custom o Propio, puede ser usado por el autor para
crear sus propios métodos Java. Al contrario que los otros paneles del modelo, si
queremos hacer uso de estos métodos deberemos invocarlos desde cualquier otra
parte de la simulación.
Nuevamente, en nuestro caso no precisamos ningún método a medida, por lo que no
daremos ningún uso a este panel.
Comportamiento del modelo
Acto seguido, vamos a describir la conducta que sigue el modelo a lo largo de la
simulación.
Cabe mencionar antes que el orden habitual de ejecución del modelo en la simulación
es de izquierda a derecha (primero el sub-panel Variables, luego Inicialización, etc.), y
el mismo orden se aplica si tenemos creadas varias páginas en un sub-panel. La
excepción es el sub-panel Propio, que no será ejecutado nunca, teniendo que ser
llamados los métodos que haya en él mediante el resto de sub-paneles o desde algún
elemento de la vista.
Al arrancar la simulación, Ejs declara las variables y las inicializa, haciendo uso para ello
del valor inicial dado en la tabla de variables y del código que pueda haber escrito en el
panel de inicialización. En este momento, se ejecutan las posibles ligaduras o
restricciones entre variables, ya que estas pueden alterar el valor de las mismas y
deben cumplirse en todo momento.
Entonces, Ejs ejecuta el código pertinente del panel de evolución y, justo después, las
posibles ligaduras. De esta forma, el sistema se encuentra listo para el próximo paso
de la evolución, el cual se repetirá a la velocidad establecida por FPS.
17
2.4.3. La vista
Es el turno de inspeccionar la vista de la simulación.
Al cargar el archivo de nuestro caso podemos apreciar como han aparecido dos nuevas
ventanas en pantalla. Estas ventanas, mostradas en la figura 2.5, corresponden a la
interfaz de la simulación, lo que hemos denominado vista.
Figura 2.5. Visualización del fenómeno (izquierda) y panel para gráficas (derecha) de la
simulación de un resorte.
Si queremos averiguar cómo esta ha sido construida, sólo tenemos que seleccionar en
Ejs el panel correspondiente, apareciendo lo que la figura 2.6 refleja.
18
Figura 2.6. Árbol de elementos de la simulación (izquierda) y conjunto de elementos
gráficos de Ejs (derecha).
En el lado derecho se encuentran los elementos gráficos que la vista dispone para su
construcción, agrupados en tres tipos según su funcionalidad.
Mientras que la parte izquierda nos ilustra con la vista de nuestro programa objeto de
estudio, con estructura en forma de árbol jerarquizado.
Toda vista se diseña siguiendo dos pasos. El primero de ellos es construir el árbol de
elementos de nuestra simulación. El segundo, editar las propiedades de los elementos
(bien sea su color, fuente, tamaño, posición, etc.) para que el programa refleje lo que
nosotros deseamos obtener por pantalla.
Los elementos gráficos se dividen en tres grupos: contenedores (containers),
elementos básicos (basics elements) y elementos de dibujo (drawing elements o
drawables).
Un contenedor es un elemento que aloja a otros elementos dentro de su área de
pantalla. De esta manera, llamamos al contenedor elemento padre, mientras que
cualquier elemento que contenga será su hijo, obteniéndose así la estructura
jerárquica en forma de árbol, cuya raíz, que no es realmente un elemento, es la
llamada vista de la simulación (Simulation View).
19
El primer hijo que creamos para esta raíz es lo que llamamos ventana principal (Main
Window), que es la ventana que aparece primero en pantalla cuando ejecutamos la
simulación como aplicación, o la única que aparece incrustada en la página HTML
cuando ejecutamos la simulación como una applet.
Los elementos que interactúan con el resto de ventanas del sistema operativo son un
tipo de contenedores especiales llamados ventanas (Windows). Hay dos clases de
ventanas: fotogramas (Frames) y diálogos (Dialogs).
Las ventanas de tipo frame se caracterizan porque se comportan como el resto de
ventanas de nuestro sistema operativo, pudiendo ser minimizadas, maximizadas o
cerradas. Toda vista debe tener al menos una ventana de este tipo, que será la
ventana principal.
Por otra parte, las ventanas de tipo dialog son también ventanas independientes, pero
únicamente disponen de la opción de ser escondidas en pantalla.
Existen dos familias de contenedores: los usados para alojar elementos básicos y
otros contenedores, y los contenedores para elementos de dibujo.
Para la materia que nos compete, observamos en la figura 2.6 como nuestra
simulación precisa de los siguientes contenedores: una ventana principal y otra de
diálogo.
Como muestra la figura 2.5, la primera será usada para controlar los parámetros de la
simulación y mostrar cómo el muelle se estira o encoge. En cuanto a la segunda
ventana, la emplearemos para representar en una gráfica el desplazamiento y la
velocidad de la masa del extremo del resorte a lo largo del tiempo.
Además, la ventana principal hace uso de dos nuevos tipos de contenedores: panel y
panel de dibujo (drawing panel). El primero, el más básico de todos los contenedores,
sirve sólo para agrupar otros elementos. El segundo, es un contenedor para dibujos en
dos dimensiones.
Emplearemos para nuestra aplicación los contenedores tipo panel para agrupar los
botones de control de la simulación (Play, Pause, Reset) y para el selector que nos
permite mostrar u ocultar la gráfica de desplazamiento y velocidad (Plot).
El panel de dibujo tendrá la finalidad de representar el movimiento de contracción y
estiramiento del resorte en pantalla.
Por otro lado, la ventana de diálogo también nos ilustra con un nuevo contenedor: el
panel de trazas (Plotting Panel). Este panel incorpora un sistema de ejes cartesianos o
polares, y es comúnmente usado para representar la evolución de las distintas
variables (trazas) en pantalla.
20
Para lo que nos concierne, el panel de trazas servirá para observar la evolución
temporal del desplazamiento y la velocidad de la partícula en el cabo del resorte.
Los elementos básicos de la vista son un conjunto de elementos que se emplean para
adornar la misma, visualizar y editar las variables del modelo, e invocar métodos
propios o predefinidos que actúan sobre el modelo.
En nuestro caso, hacemos uso de los siguientes elementos básicos: botón (Button),
selector (Check Box) y campo numérico (Number Field).
Botón, para invocar métodos. Lo necesitamos para las acciones de control de la
simulación (Play, Pause, Reset).
Selector, un botón que nos permite elegir entre dos posibles estados booleanos
(verdadero o falso). Se precisa para mostrar u ocultar la gráfica del desplazamiento y
velocidad de la bola del muelle en la simulación (Plot).
Campo numérico, para visualizar y modificar un valor numérico usando el teclado. Se
requiere para controlar la masa de la bola (m) y la constante elástica del muelle (k).
Los elementos de dibujo de la vista consisten en un conjunto de elementos que se
destinan a crear animaciones gráficas para visualizar la evolución del modelo de la
simulación. Estos elementos pueden ir desde lo más simple a lo más complejo,
pudiendo ser dibujados en dos o en tres dimensiones.
Nosotros haremos uso para el estudio del muelle de los elementos de dibujo
siguientes: cubo (box 3d), muelle (spring), partícula (particle) y traza (trace).
Los tres primeros estarán contenidos en el panel de dibujo, mientras que el último
quedará alojado dentro del panel de trazas.
Cubo, una caja en tres dimensiones. Lo necesitamos para dibujar la pared (sólo
precisaremos de dos dimensiones) a la que se encuentra unido el resorte en la
simulación (Wall).
Muelle, un muelle interactivo. Lo emplearemos para ubicar en nuestra pantalla un
resorte (Spring).
Partícula, dibuja una elipse o rectángulo interactivo. Servirá para pintar la bola que
está en un extremo del muelle (Ball).
Traza, dibuja una línea poligonal creada por acumulación de puntos sucesivos. Será
usada para representar en una gráfica el movimiento de compresión y estiramiento del
muelle y la celeridad que adquiere la partícula que se encuentra asida a una de sus
puntas, es decir, el desplazamiento (Displacement) y la velocidad (Velocity).
21
Para adquirir destreza con la creación de una vista se requiere principalmente de la
práctica y dedicación habitual. Para ello, animamos al usuario a que sea curioso e
investigue por su cuenta todos los elementos existentes en la vista de nuestra
simulación, así como los que no han sido incorporados al mismo, explorando sus
propiedades y modificándolas para ver cómo se comportan.
Aunque únicamente vamos a comentar a modo de ejemplo en el estudio del resorte
cómo editar el elemento Ball (la bola que se halla en el extremo del muelle), dejamos
el resto de elementos de la vista a disposición de la curiosidad científica del usuario. De
todos modos, a lo largo del proyecto iremos mostrando partes de la implementación
de las respectivas simulaciones que resulten de interés.
Dicho esto y procediendo ya con la bola del resorte, si hacemos click derecho sobre el
elemento Ball en la vista aparecerá un menú emergente como el de la figura 2.7.
Figura 2.7. Menú emergente para la bola de la vista.
Si seleccionamos ahora la opción Properties o Propiedades saldrá una nueva ventana
donde podremos modificar las propiedades del elemento en liza (figura 2.8).
Figura 2.8.Tabla de propiedades para el elemento Ball en la vista.
22
Distinguimos como el aspecto de la bola será el de una elipse (ELLIPSE) de color cian
(cyan, una variedad de azul), de forma o tamaño circular (0.2, 0.2), y que responde a la
interacción del usuario.
Pero lo más relevante de todo esto son las propiedades que hacen uso de variables del
modelo, ya sea directamente o mediante expresiones que las contienen, e incluso
hasta usando métodos propios o predefinidos.
De este modo, la posición de la bola está asociada al punto (x, y), con x e y como
variables del modelo. Esta asociación se da en los dos sentidos. Por un lado, cada vez
que ejecutemos un paso de simulación las variables del modelo serán actualizadas a
sus nuevos valores, siendo avisado de ello el elemento para que sus propiedades sean
convenientemente actualizadas y el movimiento de la bola en pantalla sea el regido
por las ecuaciones del modelo. Por el otro lado, si el usuario interactúa con la bola
para cambiar su posición los valores de las variables del modelo asociadas a las
propiedades del elemento también serán actualizados.
La manera en la que la bola debe reaccionar ante el usuario se determina en la zona de
la tabla de propiedades llamada Actions o Acciones.
Aquí haremos uso de una serie de métodos llamados métodos predefinidos. Estos
métodos se usan para controlar la ejecución de la simulación. Por ejemplo, para
detener o poner en marcha la simulación, modificar su velocidad (FPS), ejecutarla paso
a paso, o devolverla a su estado inicial. Quizás las más sofisticadas sean las que
permiten guardar el estado de una simulación en un archivo y leerlo posteriormente a
través de internet. Puesto que para implementarlos se requiere un conocimiento
específico del funcionamiento interno de Ejs, estos métodos son suministrados por el
sistema para su propio uso, bien sea directamente o a través de otros métodos.
En la página web de Ejs (incluida en la bibliografía) puede obtenerse más información
acerca de estos métodos.
Para nuestro caso, la acción producida cuando el usuario pulsa el botón izquierdo del
ratón (On Press o Al Pulsar) será detener temporalmente o pausar la simulación
mediante el método predefinido _pause(), como podemos ver en la figura 2.8.
También se observa como la acción producida al arrastrar la bola con el ratón (On Drag
o Al Mover) mantiene al muelle en posición horizontal al evaluarse el código y = 0.0;.
Además, la acción al liberar el elemento (On Release o Al Soltar) hace que la velocidad
horizontal valga cero y que se limpie la vista mediante las sentencias vx = 0.0;
_resetView();.
Como ya hemos mencionado, si se desea inspeccionar el resto de los elementos sólo
basta con indagar un poco en sus propiedades para averiguar su funcionamiento.
23
Procedamos ahora a ejecutar la simulación. Pulsando el botón Run de la barra de
tareas, generaremos y ejecutaremos la simulación en curso. Observamos como este
botón adquiere un color rojo para indicarnos que la simulación se ha generado
satisfactoriamente.
Si ahora oprimimos el botón de la ventana Spring denominado Play, podremos
visualizar la simulación del resorte, tal como se muestra en la figura 2.9.
Figura 2.9. Resultado de la ejecución de la simulación del movimiento de contracción y
estiramiento de un resorte y su correspondiente gráfica de evolución temporal.
Se puede apreciar a la izquierda de la figura cómo el muelle se alarga y contrae,
mientras que a la derecha distinguimos las curvas de desplazamiento (negro) y
velocidad (rojo) de la bola del extremo del resorte a lo largo del tiempo.
Además, en el mismo subdirectorio en el que se encuentra el fichero Spring.xml se
hallan otros dos archivos (Spring2D.xml y SpringAdvanced.xml), donde se ahonda un
poco más en los entresijos de la programación con Ejs, haciendo de nuevo hincapié en
el estudio del comportamiento de una bola en el extremo de un muelle, aunque esta
vez permitiendo su movimiento tanto en el eje horizontal como en el vertical (para el
primer fichero), y computando la transmisión de energía cinética y potencial y
mostrando su espacio de fases (para el segundo). Invitamos al usuario a que los
investigue por su cuenta si desea profundizar sobre este fenómeno físico.
2.4.4. Comportamiento de la simulación
Una vez que hemos establecido las relaciones entre el modelo y la vista que
precisamos, la simulación está preparada para ejecutarse. Con esta información, Ejs
genera el código necesario para el comportamiento adecuado de la simulación futura.
Ahora podemos completar la descripción de la ejecución de una simulación generada
24
por Ejs que empezamos en el apartado 2.4.2, cuando únicamente habíamos descrito el
modelo.
Cuando una simulación se ejecuta, esto es lo que ocurre exactamente:
1. Las variables son creadas y sus valores establecidos a los estipulados por la
inicialización (tanto los de la tabla de variables como los del panel de
inicialización).
2. Se evalúan las ligaduras o restricciones, ya que el valor inicial de algunas
variables puede depender del valor inicial de otras.
3. Se crea la vista de la simulación y se muestra en la pantalla del ordenador.
Todas las asociaciones que hayamos realizado son empleadas para ordenar a
los elementos de la vista cómo visualizar apropiadamente el estado del modelo
y cómo responder adecuadamente a la interacción con el usuario.
En este momento, el modelo se encuentra en su estado inicial, la vista refleja su
estado, y la simulación espera a que un nuevo paso de simulación tenga lugar o
a que el usuario interactúe con ella.
4. En el primer caso, se evalúan las ecuaciones de evolución e, inmediatamente
después, las ligaduras. Alcanzamos así un nuevo estado del modelo en un
nuevo instante de tiempo. La vista se actualiza entonces a través de su conexión
con el modelo.
5. En el segundo caso, si el usuario cambia el valor de una variable asociada a
una variable del modelo, esta también es modificada en consecuencia, o, si el
usuario invoca una acción de control, se ejecutará el código pertinente. En
cualquiera de los dos casos, las ligaduras se evalúan inmediatamente después.
Se obtiene de este modo un nuevo estado del modelo en el mismo instante de
tiempo y la vista se actualiza mediante su conexión con el modelo.
2.4.5. Ejecutando una simulación
Easy Java Simulations puede ejecutar una simulación de tres formas diferentes. La
primera de ellas es usando el propio Ejs, de la manera que hemos explicado
anteriormente al final del apartado 2.4.3. La segunda consiste en ejecutar la simulación
en forma de applet usando un navegador web. La tercera forma es mediante una
aplicación Java independiente.
La primera opción presenta una gran ventaja pedagógica: el usuario puede ver cómo
se ha generado la simulación, aprendiendo del conocimiento usado para construir la
25
misma. Esto presenta un gran valor añadido, pero también el inconveniente de que se
debe tener instalado Ejs en el ordenador y que el usuario debe saber cómo se usa
dicho programa, aunque sea de modo rudimentario. Afortunadamente, las
simulaciones creadas con Ejs son, una vez generadas, independientes del mismo. Así, si
el usuario sólo desea ejecutar una simulación sin necesidad de aprender a usar el
entorno de trabajo Ejs para averiguar cómo esta fue construida, se recomienda
ejecutar la simulación en forma de applet de Java.
Un applet de Java es un tipo especial de aplicación que ha sido diseñada para
ejecutarse en un navegador web. El navegador carga un fichero HTML que indica al
mismo que debe ejecutar el applet requerido dentro de su propia ventana. Este fichero
y el applet correspondiente pueden encontrarse en el disco local, o hasta en una
ubicación de internet si se proporcionan a través de la red por un servidor web, un
ordenador que ofrece este servicio especial. Una segunda razón para recomendar esta
opción de ejecución es que las páginas HTML generadas por Ejs para la applet pueden
modificarse para completar la descripción incluida en su momento en la introducción
de la simulación. Esto nos permite generar un conjunto de unidades pedagógicas que
pueden ser empleadas para fines didácticos. También es posible añadir en la
descripción controles de un simple lenguaje de comandos llamado JavaScript que
integran el texto con el control de la simulación de forma sencilla.
El tercer modo de ejecución, como aplicación Java independiente, tampoco requiere
tener instalado Ejs. El usuario sólo necesita tener instalada una máquina virtual de Java
en su ordenador. Las aplicaciones las podemos alojar en el disco duro o en un servidor
web que use la tecnología Java Web Start. Una razón de peso para decantarnos por
esta tercera opción es cuando queramos ejecutar una simulación que almacene los
datos en el disco duro.
2.4.6. Distribución de las simulaciones
Distribuir una simulación generada con Ejs para que otras personas puedan hacer uso
de ella es inmediato: sólo se necesita proveer al usuario del archivo de simulación (el
único con extensión .xml), junto con algunos archivos adicionales que hayamos podido
incluir (imágenes o datos que la simulación pueda necesitar). De esta forma, el usuario
sólo necesitará cargar el archivo de simulación con Ejs y ejecutarlo, aunque deberá
tener cierta idea acerca del funcionamiento del programa. En nuestro caso, este
archivo se llama Spring.xml.
Otros ficheros generados por Ejs al ejecutar una simulación son los de extensión .java.
Son los archivos que contienen el código Java para la simulación y su applet. Recuerda
que Ejs es, después de todo, un generador de código: recoge toda la información que
26
le hemos suministrado a través de los distintos paneles y genera el código Java
necesario. Sin embargo, únicamente si eres un programador Java experto y tienes
cierta necesidad de modificar el código directamente estarás interesado en estos
archivos. Para el caso del resorte, se denominan Spring.java y SpringApplet.java.
Un tipo más de fichero generado es el de extensión .jar. Este es el archivo final
producido por el compilador de Java cuando procesa los archivos anteriores de
extensión .java. Aunque, matizando aún más, la compilación produce muchos ficheros
que Ejs agrupa en un único archivo comprimido con extensión .jar para facilitar su
distribución. En nuestro caso se llama spring.jar. Este es un archivo Java auto-
ejecutable, por lo que si el sistema tiene instalado el entorno de ejecución Java (Java
Runtime Environment), podemos ejecutar la simulación haciendo simplemente doble
click sobre él.
También son creados archivos con extensión .html. En el caso del muelle, se crea el
fichero Spring.html. Este es el archivo principal HTML generado por Ejs para ejecutar la
simulación en forma de applet de Java. Lo llamamos principal porque, según como
tengamos configurado Ejs y el número de páginas de introducción escritas para la
simulación, Ejs generará un conjunto de más o menos páginas HTML que empezarán
todas con el nombre de la simulación (Spring, en nuestro caso).
Un último archivo que se crea es el de extensión .bat. Este es un fichero auxiliar que
puede ser usado para ejecutar la simulación como aplicación si no podemos hacerlo
mediante un click doble sobre el archivo .jar.
Finalmente, también encontraremos en nuestro directorio de trabajo la sub-carpeta
_library, otros sub-directorios con ejemplos y, tal vez, algunos archivos generados de
la ejecución de otras simulaciones. La carpeta _library contiene las librerías o
bibliotecas Java que son necesarias para la ejecución de la simulación y deben ser
incluidas junto con los archivos de la simulación y otros archivos adicionales (como
imágenes que hayamos añadido, por ejemplo) a la hora de la distribución al usuario, ya
sea para que este las aloje directamente en su disco duro o haciéndolo mediante un
servidor web.
27
CAPÍTULO 3: SISTEMA DE CONTROL DEL NIVEL
DE UN DEPÓSITO
Tras haber explicado a grandes rasgos el funcionamiento del entorno de simulación
Ejs, que será la aplicación en la que nos apoyaremos para abordar los diversos
capítulos del proyecto, pasamos ahora a profundizar más en las características de la
herramienta Ejs para adquirir mayor conocimiento sobre ella.
De este modo, procedemos al estudio de un tanque de agua sobre el cual
pretendemos regular el nivel de dicho líquido mediante una servóvalvula o válvula de
control que actúa sobre un caudal de entrada al depósito.
En las figuras 3.1 y 3.2 podemos observar el esquema bajo análisis en sus dos modos
de funcionamiento: realimentación simple usando un control de nivel (LC o Level
Control) o maestro-esclavo mediante control interno de flujo (FC o Flow Control) y
externo de nivel (LC o Level Control).
28
Figura 3.1. Panel de control del nivel del tanque mediante un lazo cerrado simple de
realimentación (control de nivel).
29
Figura 3.2. Panel de control del nivel del tanque mediante realimentación en cascada o
maestro-esclavo (control de lazo interno de flujo y externo de nivel).
Podemos apreciar en la parte superior de cualquiera de estas dos figuras la
representación gráfica del sistema físico. Tenemos una bomba (Pump) para suministrar
a la servoválvula (SV o Servo-Valve) el caudal necesario (según se considere o no el
efecto de la saturación en ambas), una consigna (SP o Set Point) que podemos mover
con el ratón para indicarnos el nivel de líquido deseado, un tanque inferior de recogida
de agua precipitada del tanque superior, una válvula manual (MV1 o Manual-Valve #1)
y una electroválvula (EV1 o Electro-Valve #1).
Por otro lado, en la parte inferior se encuentra el panel de mando de nuestro pequeño
laboratorio de control. Disponemos aquí de botones para actuar sobre el curso de la
simulación (Play, Pause, Step, Initialize, Reset), seleccionar el tipo de control
(realimentación simple o cascada), el modo de funcionamiento (manual o automático),
poner en marcha la bomba e indicar su eficiencia, escoger el grado de apertura, el
30
radio y el coeficiente de descarga de las válvulas, modificar el radio (R) de los tanques,
cambiar el punto de referencia (SP), observar la evolución del tiempo (t) y la señal de
control de la servoválvula (u), alterar el valor del nivel superior del tanque (level, si la
simulación está pausada podremos hacerlo desde aquí, si no, tendremos que hacerlo
desde el gráfico pinchando sobre la superficie de líquido del tanque superior y
arrastrando hacia el valor deseado) y visualizarlo, mostrar un panel adicional para
poder inicializar los parámetros a distintas configuraciones con objeto de estudiar los
diversos fenómenos que cubre este capítulo, escoger el tipo de control a realizar en los
bucles (P o Proporcional, PI o Proporcional-Integral, PD o Proporcional-Derivativo, PID
o Proporcional-Integral-Derivativo), decidir si hay o no saturación en la servoválvula y
la bomba, si hay o no control anti-windup para corregir el error integral en caso de
saturación, seleccionar las gráficas que deseamos ver y si memorizamos la simulación
anterior o no.
3.1. Obtención del modelo y la vista de la simulación
Las ecuaciones que describen el modelo son consecuencia de aplicar la Ecuación de
Continuidad (3.1) y el Teorema de Bernouilli (3.2) de dinámica de fluidos a los
correspondientes puntos (1) y (2) de nuestro tanque superior situados en la superficie
libre del fluido (la que queda en contacto con el aire) y en el centro del orificio de las
válvulas de abajo. Esto es válido para un flujo estacionario, no viscoso e incompresible
y se cumple en dos puntos cualesquiera de una línea de corriente [7].
1 1 2 2v S v S⋅ = ⋅ (3.1)
2 2
1 1 1 2 2 2
1 1.
2 2p g y v p g y v cteρ ρ ρ ρ+ ⋅ ⋅ + ⋅ = + ⋅ ⋅ + ⋅ = (3.2)
Donde:
1v ,
2v : velocidad del fluido en las respectivas secciones
1S y
2S , en m/s.
1S ,
2S : sección o área en los respectivos puntos (1) y (2), en m2.
1p ,
2p : presión en los respectivos puntos (1) y (2), en Pa.
ρ : densidad del fluido, en Kg/m3.
g : aceleración de la gravedad, 9.8 m/s2.
Por otra parte, el elemento de fluido delimitado por las secciones 1S y
2S está en
contacto con el aire a la misma presión. Luego, 1 2 0p p p= = .
31
La diferencia de alturas es 1 2y y h− = .
Si el diámetro del recipiente es grande respecto al diámetro del orificio, la velocidad 1v de descenso de la superficie del líquido se puede considerar nula.
Luego la velocidad teórica de salida del líquido será:
2 2v g h= ⋅ ⋅ (3.3)
El flujo o caudal volumétrico (en adelante flujo o caudal) en el punto (2) será el
volumen de líquido que sale por unidad de tiempo, [8] y [9]:
2 2eQ A v= ⋅ (3.4)
Donde eA es el área de la sección efectiva, expresada como el producto del área A de
la sección transversal del orificio por el llamado coeficiente de descarga de la válvula
dC , que engloba las características inherentes de la válvula y vale aproximadamente
0.62 para un orificio de borde afilado y la unidad para una boquilla de borde
redondeado. Para un tramo muy corto de tubería o una boquilla externa conectada a
un recipiente, este coeficiente es aproximadamente 0.81.
Por tanto, tenemos que para cualquiera de las dos válvulas que tenemos en la parte
inferior del tanque se cumple:
2 2dQ C A g h= ⋅ ⋅ ⋅ ⋅ (3.5)
Considerando ahora la variación de volumen de líquido en el depósito, esta debe ser
igual al caudal de entrada eQ menos el de salida sQ , luego:
e s
dhA Q Qdt
⋅ = − (3.6)
Si tomamos ya los datos específicos de nuestra simulación:
max
,
,100
dSV SV
e SV SVdSV SV
C A u auto
Q Q openVC A u manual
⋅ ⋅ = = ⋅ ⋅ ⋅
(3.7)
1 1s MV EVQ Q Q= + (3.8)
11 1 1 2
100
MVMV dMV MV
openVQ C A g h= ⋅ ⋅ ⋅ ⋅ ⋅ (3.9)
1 1 1 2EV dEV EVQ C A g h= ⋅ ⋅ ⋅ ⋅ (3.10)
32
Donde:
SVQ , 1MVQ , 1EVQ : flujo o caudal en las respectivas válvulas (servoválvula, válvula
manual número uno, electroválvula número uno), en m3/s.
dSVC , 1dMVC , 1dEVC : coeficiente de descarga de las respectivas válvulas (servoválvula,
válvula manual número uno, electroválvula número uno), adimensional.
SVA , 1MVA , 1EVA : área de la sección transversal del orificio de las respectivas válvulas
(servoválvula, válvula manual número uno, electroválvula número uno), en m2.
Consideraremos circulares tanto a los orificios de las válvulas como a la sección
transversal del depósito, por lo que nos bastará conocer el radio para hallar el área.
u : señal de control de la servoválvula, cuyos límites de saturación estarán
comprendidos entre 0 (valor mínimo) y 8 (valor máximo, maxu ).
SVopenV , 1MVopenV : apertura de 0 a 100 de la servoválvula y válvula manual,
respectivamente, para el caso de trabajo en modo manual.
La ecuación 3.7 representa el flujo de la servoválvula (nuestro caudal de entrada al
sistema), que se comportará de forma diferente si el sistema está funcionando en
modo automático (Auto) o manual. En el primero, la señal de control variará en
función del tipo de actuador aplicado para generar el caudal adecuado de la
servoválvula. Respecto al segundo, seremos nosotros los que tendremos que “abrir la
llave de la servoválvula” indicándole su porcentaje de apertura hasta lograr el nivel de
líquido deseado. Cabe mencionar que esto será cierto si la bomba se encuentra
encendida, si no, el flujo de la servoválvula será cero, obviamente. Además, la bomba
puede ajustarse de manera de no trabaje al 100%, por lo que si su eficiencia se limita a
un valor menor el flujo máximo de la servoválvula estará supeditado a dicha cifra.
En (3.8) se expresa el caudal de salida como la suma de los dos distintos flujos que
podemos tener, ya que disponemos de dos válvulas (válvula manual y electroválvula).
Para la válvula manual (3.9), podemos regular la salida de líquido con el grado de
apertura de la misma.
En cuanto a la electroválvula (3.10), su caudal guarda una relación todo-nada: o se
encuentra completamente abierta o completamente cerrada.
Todas estas ecuaciones han sido incluidas en la evolución del modelo mediante la
creación de una página de ecuaciones diferenciales ordinarias (abreviado en inglés
como ODE) de nombre Dynamics, tal como se muestra en la figura 3.3.
33
Figura 3.3. Página ODE para la variación del nivel de líquido en el tanque superior.
Se puede ver que hemos llamado level a la altura de líquido en el tanque (h en la
ecuación 3.3), y que le pasamos su valor a un método propio denominado ode, que
será el que gestione el comportamiento de nuestro modelo, aplicando el término
adecuado a la ecuación según los diversos casos disponibles (modo automático o
manual, bomba en funcionamiento, eficiencia de la misma, apertura de las válvulas,
etc.). Este se apoyará para sus cálculos en otro método propio, flowEquation, que
llevará debida cuenta de los flujos de cada una de las tres válvulas de nuestro
esquema. En la figura 3.4 aparece el sub-panel de métodos propios de nuestro
programa.
34
Figura 3.4. Panel de implementación de métodos propios.
Distinguimos aquí dos páginas, una primera, de nombre Equations, que es la que
aparece en imagen y donde se desarrolla el método ode para la gestión de los caudales
de las válvulas. La segunda página, Flows, se usa para escribir el código del método
flowEquation, para que ode realice de forma óptima sus cálculos mediante llamadas a
dicho método.
Esquemas de control y realimentación
Como hemos citado anteriormente, emplearemos dos tipos de realimentación (simple
y cascada) para actuar sobre el nivel del depósito. En la figura 3.5 podemos apreciar
ambos.
35
Figura 3.5. Esquema de control por realimentación simple (arriba) y en cascada (abajo).
En esta imagen se observa como tenemos en la parte superior el caso de un control
con un bucle de realimentación simple. Emplearemos una señal de referencia o
consigna (r), un error (e) que valdrá la diferencia entre la señal de salida (y) de nuestro
proceso G(s) y la referencia, y una señal de control (u) como salida del controlador C(s),
que será de tipo PID.
Por otro lado, en la parte inferior se distingue un control en cascada o maestro-esclavo
[10].
En el lazo interno o secundario (llamado esclavo o slave en inglés) se controlará con el
actuador CS(s) una variable interna (y2) de la planta G(s), que quedará descompuesta
como el producto de dos sub-plantas, G1(s) y G2(s).
El actuador CM(s) del lazo externo o primario (llamado maestro o master en inglés) será
el que fije la consigna del secundario.
Reseñamos en el control simple que emplearemos en nuestra simulación que el
actuador fija el flujo de la servoválvula deseado para alcanzar el punto de referencia en
el nivel del tanque (normalmente lo fija el operador del proceso).
En cuanto al control en cascada, se dispone de dos actuadores: el maestro y el esclavo.
El punto de referencia del maestro se fija externamente (por el operador del proceso,
habitualmente). Sin embargo, la consigna del esclavo es fijada por el controlador
maestro. Es decir, la salida o resultado que produce el controlador maestro es
simplemente el punto de referencia al que debe operar el controlador esclavo.
Tomaremos al flujo de la servoválvula ( SVQ ) como variable interna (y2) para el
esquema maestro-esclavo.
Este esquema es aconsejable usarlo cuando el bucle de control simple no da una
respuesta satisfactoria (proceso de dinámica lenta, tiempo muerto grande en relación
36
a la constante de tiempo, sometido a perturbaciones significativas, etc.). Además,
debe existir una variable secundaria, medible a costo razonable, que satisfaga las
siguientes condiciones:
- Debe indicar la existencia de una perturbación importante.
- Debe existir una relación causal entre la variable manipulada y la secundaria.
- La dinámica de la variable secundaria debe ser más rápida que la de la variable
primaria. De esta forma, el bucle interno controla la variable secundaria antes
de que el efecto de la perturbación se propague a la variable primaria (variable
controlada) de forma significativa.
Así, para que el control en cascada presente ventajas sobre el simple precisamos que la
respuesta dinámica de la sub-planta G2(s) sea más rápida que la de G1(s). Si este
requisito se cumple entonces es muy probable mejorar el desempeño del esquema de
control a lazo cerrado usando el concepto de control en cascada. Por esta razón, se
acostumbra emplear un controlador puramente proporcional (P) para el control de la
sub-planta G2(s); este controlador se sintoniza de tal manera que la respuesta obtenida
de la sub-planta G2(s) sea lo más rápida posible, sujeta a las restricciones de estabilidad
sobre los valores de la ganancia del controlador. Para el control de la sub-planta G1(s)
podría emplearse un controlador PI o PID.
Mencionar también que si nos atenemos a minimizar los costos haciendo uso del
menor número de dispositivos, habrá ocasiones en las que bastará con un esquema de
control simple para actuar adecuadamente sobre el proceso, y, además, podría ser
suficiente un control simple tipo PI a uno PID. Si esto sucede, siempre optaremos por
el de menor costo.
A continuación, presentamos la formulación matemática de un actuador PID, que será
el elegido para ambos esquemas de control [11]:
0
( )( ) ( ) ( )
t
p i d
de tu t K e t K e d K
dtτ τ= ⋅ + ⋅ ⋅ + ⋅∫ (3.11)
Pasando esta ecuación al dominio de Laplace para hallar la función de transferencia del
controlador:
( ) 1( ) (1 )
( )
iPID p d p d
i
KU sC s K K s K T s
E s s T s= = + + ⋅ = ⋅ + + ⋅
⋅ (3.12)
Donde:
p
i
i
KT
K= (3.13)
37
dd
p
KT
K= (3.14)
Las constantes empleadas en un controlador proporcional-integral-derivativo son,
respectivamente, pK , iK , dK ; aunque las dos últimas pueden ser renombradas, como
se muestra tanto en (3.13) como en (3.14), para expresar la acción de control
mediante el uso de las constantes denominadas tiempo integral y derivativo.
Todo esto se ha tenido en mente para la implementación del actuador en nuestro
sistema, considerando además la existencia de saturación en el mismo (configurable),
corrigiendo si queremos el efecto windup [12] mediante una sentencia condicional que
suma el término integral únicamente cuando la señal de control no ha rebasado los
límites establecidos, y según los diferentes modos de funcionamiento (manual y
automático) y control (simple o cascada). En la figura 3.6 podemos apreciar el código
Java inicial donde hemos desarrollado nuestra ley de control en la evolución del
modelo.
Figura 3.6. Página de código Java para la el controlador PID.
Vemos en dicha imagen como el nombre de la página para la implementación del
código Java del controlador PID es Control. Aquí tenemos las primeras líneas de código,
donde apreciamos como se empieza con un condicional para determinar si el modo de
trabajo es manual o automático. En caso de ser manual, no se aplicarán las leyes de
38
control PID, sino que será el operador el que deba encargarse personalmente de
regular el nivel de líquido en el tanque mediante la graduación, apertura y cierre de las
distintas “llaves de paso de las válvulas”.
Vista de la simulación
El árbol de elementos de la vista de nuestro programa es el que podemos visualizar en
la figura 3.7.
Figura 3.7. Vista de la simulación de nuestro laboratorio de control.
Vemos como esta se compone de una ventana principal (llamada Window), donde
tendremos representado gráficamente nuestro laboratorio mediante el panel de
dibujo Plot. Además, el elemento PanelDown será el panel que contendrá los mandos
necesarios para el control de nuestro sistema.
Por otro lado, precisamos de una serie de ventanas de diálogo que procedemos ahora
a comentar:
- DialogLevelSP: ventana de diálogo para la gráfica que mide la evolución
temporal del nivel del tanque y la señal de referencia.
39
- DialogControlError: ventana de diálogo para la gráfica que representa el
cambio a lo largo del tiempo de la variable de control y el error.
- DialogFlows: ventana de diálogo para la gráfica que evalúa el flujo o caudal de
las distintas válvulas (servoválvula, válvula manual y electroválvula) en el
tiempo.
- DialogFlowslh: ídem que el anterior, sólo que los caudales vienen expresados
en litros por hora (l/h).
- DialogPhaseSpace: ventana de diálogo para la gráfica que calcula el espacio de
fases del nivel y el flujo de la servoválvula.
- DialogPhaseSpacelh: ídem que el anterior, sólo que la servoválvula expresa su
caudal en litros por hora (l/h).
- DialogOption: ventana de diálogo a modo de panel de opciones adicional para
la inicialización de ciertos parámetros de la simulación, con el fin de estudiar las
diversas configuraciones que presenta la misma.
Ahora vamos a comentar algunos elementos de la vista. Concretamente, veremos
algunos de los que están contenidos en el panel de dibujo Plot, cuyos hijos se
muestran en la figura 3.8.
Figura 3.8. Árbol de elementos del panel de dibujo Plot en la vista.
40
En la imagen aparecen los elementos iniciales que conforman el panel de dibujo Plot.
Se distinguen los elementos de dibujo de tipo Control, tales como tanques (TankDown,
TankUp), tuberías (PipeTankDownToPump, PipePumpToValve, PipeValveToTankUp,
PipeInputFlow, PipeTankUpToMV1), válvulas (Valve, ValveMV1) e incluso una bomba
(Pump).
Si abrimos las propiedades del elemento TankDown obtendremos lo que indica la
figura 3.9.
Figura 3.9. Propiedades del elemento TankDown en la vista.
Podemos observar en dichas propiedades que el nivel (Level) del depósito inferior está
asociado a la variable leveldown. Como nuestro proceso se compone de un circuito
cerrado formado por dos tanques y un sistema de tuberías, se debe cumplir
(despreciando el líquido que pueda quedar en las tuberías) que el nivel en el depósito
inferior debe ser la diferencia entre el nivel de líquido total (totalcapacity) y el nivel en
el depósito superior (level). Ya que esto debe cumplirse en todo momento, incluso si
modificamos en la ejecución de la simulación el valor del nivel del tanque superior
pinchando con el ratón sobre la superficie del líquido, incluiremos esta condición
dentro de una página de ligaduras en nuestro modelo (ver figura 3.10). El resto de
propiedades de este elemento son menos relevantes, limitándose a describir las
dimensiones del depósito, su ubicación en pantalla, si responde a la interacción con el
usuario, etc.
41
Figura 3.10. Ligaduras del modelo de la simulación.
Observamos en las líneas de la página de ligaduras llamada Tank capacities como el
nivel en el tanque superior no puede rebasar la capacidad de líquido total ni tomar un
valor negativo (ya que no tendría sentido), y como el nivel en el tanque inferior queda
establecido por la restricción entre la capacidad de líquido total y el nivel en el tanque
superior.
Otro elemento que cabe reseñar es el elemento tubería (Pipe). Vamos a escoger para
ello el tramo de tubería que va desde la salida de la servoválvula hasta justo encima
del tanque superior, compuesto por dos tubos o brazos y un codo que los une,
denominado en la vista PipeValveToTankUp.
Las propiedades de esta sección de tubería pueden visualizarse a continuación en la
figura 3.11.
42
Figura 3.11. Propiedades del elemento tubería de nombre PipeValveToTankUp.
Podemos apreciar como el número de vértices de la tubería es tres (número de tubos
o brazos más uno). Mediante llaves damos las coordenadas de dichos vértices tanto en
X como en Y. Implantamos en la tubería que el usuario no pueda interactuar con ella.
Consideramos un ancho fijo para todas las tuberías, asociado a la variable dInput. Por
último, establecemos la siguiente condición para que la tubería se muestre llena con
líquido o no, según sea el caso (en la figura 3.11 sólo aparece la parte inicial de código):
pumpActive&(leveldown>1.0e-4)&
(((u>0)&automaticMode)|((openSV>0)&(!automaticMode)))
Esta condición viene a decirnos que debemos tener en cuenta si el motor de la bomba
está en marcha (pumpActive), si hay suficiente nivel de líquido en el tanque inferior
(leveldown) para poder bombearlo al superior (consideramos que hay suficiente
cuando leveldown es mayor que cierta tolerancia de valor 0.0001), si la señal de
control (u) es positiva para un modo de trabajo automático, y si la apertura de la
servoválvula (openSV) es positiva para un modo de trabajo manual.
3.2. Diseño de controladores para el sistema
Procedemos a continuación a la sintonización de controladores para alcanzar de forma
óptima el nivel de líquido deseado en el tanque superior. Para ello estudiaremos los
dos esquemas de control propuestos (realimentación simple y cascada) y haremos una
comparativa de ambos al final.
43
3.2.1. Diseño empleando control por realimentación simple
A partir de ahora y siempre que no digamos lo contrario los parámetros del sistema
serán los establecidos por defecto en la inicialización de la simulación.
Además, consideraremos como válvula de salida exclusivamente a la válvula manual
(mantendremos cerrada la electroválvula porque lo que hace únicamente es añadir
otra pérdida de líquido al tanque superior, por lo que a efectos pedagógicos no
presenta mayor interés).
Por otra parte, en esta simulación se pretende que el usuario se sienta como si
estuviera físicamente en un laboratorio real y tuviese que sintonizar manualmente un
controlador PID [13].
Dicho esto, arrancamos esta sección con el control más básico de todos: el
proporcional.
Estudio del controlador P
Para un ajuste manual del controlador proporcional empezaremos con una ganancia
baja e iremos aumentando su valor hasta conseguir las especificaciones deseadas.
Teniendo en cuenta que el controlador proporcional no es capaz de anular el error
estacionario o de régimen permanente, ajustaremos su valor de tal manera que la
respuesta sea lo más rápida posible y sin hacer inestable al sistema.
De este modo, aumentando la ganancia poco a poco, se obtiene el mejor resultado
para el valor máximo permitido de la constante proporcional ( 1000pK = ).
Los parámetros experimentales medidos en la gráfica son:
Tiempo de establecimiento ( et ): tiempo que tarda la curva de respuesta en alcanzar y
mantenerse dentro de determinado rango alrededor del valor final, especificado en
porcentaje absoluto del valor final (se usa generalmente el 5% o el 2%). En nuestro
caso, considerando un nivel inicial de líquido en el tanque superior 0.25level m= y una
consigna 0.20SP m= , y usando el criterio del 2%, obtenemos 41.060et s= . Mientras
que si usamos 0.15level m= nos resulta 13.002et s= .
Error en régimen permanente (rpe ): diferencia entre el valor final deseado y el valor
alcanzado, expresado en porcentaje absoluto. En nuestro caso vale lo mismo para
ambos valores iniciales de nivel de líquido en el tanque superior:
44
0.2 0.198 0.1981 1 0.99 0.01 1%
0.2 0.2rpe
−= = − = − = =
En las figuras 3.12 y 3.13 vislumbramos la evolución de nuestro sistema frente a dos
condiciones iniciales diferentes.
Figura 3.12. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.25m usando un controlador P.
45
Figura 3.13. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un controlador P.
Comparando ambas figuras vemos que la respuesta frente a un nivel de 0.25m es más
lenta que la de 0.15m, ya que al estar por encima de la consigna hay que esperar a que
se descargue el tanque para que la señal de control actúe. Sin embargo, el error en
régimen permanente sigue siendo el mismo.
Estudio del controlador PI
Si añadimos ahora una acción integral, lograremos anular el error en estado
estacionario si ajustamos adecuadamente los parámetros.
Empezaremos con el tiempo integral ajustado a su máximo valor ( 100iT s= ) y una
ganancia baja, la cual iremos aumentando hasta conseguir las características de
respuesta deseadas. Haciendo esto, vemos que se consigue mayor velocidad de
respuesta con 1000pK = , sin que esto repercuta negativamente en la estabilidad del
46
sistema. A continuación, disminuimos el tiempo integral hasta anular el error en
estado estacionario, aunque la oscilación sea excesiva. Entonces, disminuimos
ligeramente la ganancia. Repetimos esto hasta obtener las características de respuesta
deseadas. En nuestro caso, disminuimos el tiempo integral hasta lograr la respuesta
óptima, ya que si seguimos disminuyendo su valor comienza a haber sobreoscilación, y
aunque hagamos posteriormente más pequeña la ganancia y el tiempo integral, no se
consigue en este caso mejorar la respuesta sino que en principio se mantiene
aproximadamente igual y luego empeora.
Usamos idénticos criterios y valores iniciales (criterio del 2% para el tiempo de
establecimiento, mismos dos tipos de nivel inicial y consigna) que para el control
proporcional.
Para 0.25level m= , obtenemos la respuesta óptima con los valores de 1000pK =
(aunque se puede disminuir en cien unidades su valor sin que ello empeore la
respuesta) y 2.8iT s= , siendo 39.115et s= y 0%rpe = .
Mientras que para 0.15level m= necesitamos 1000pK = y 6.3iT s= , con una
respuesta de 13.566et s= y 0%rpe = .
En las figuras 3.14 y 3.15 podemos visualizar la evolución del sistema según sea el caso.
47
Figura 3.14. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.25m usando un controlador PI.
48
Figura 3.15. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un controlador PI.
Podemos ver que el sistema se comporta mejor con un control PI que sólo con la
acción proporcional, ya que, aunque el tiempo de establecimiento es prácticamente el
mismo, se consigue anular el error en régimen permanente.
Estudio del controlador PD
Veamos el caso de incluir una acción derivativa al control proporcional. Añadiendo la
acción derivativa, logramos que la respuesta mejore, pero no conseguimos eliminar el
error en régimen permanente.
Comenzamos con el tiempo derivativo a su mínimo valor ( 0.001dT s= ) y una ganancia
baja, la cual iremos aumentando hasta obtener los valores de respuesta deseados. A
continuación, aumentaremos el tiempo derivativo hasta obtener características
49
similares pero con la respuesta más rápida. Luego, aumentaremos ligeramente la
ganancia si fuera necesario.
Con los mismas condiciones que para los controles P y PI, tenemos que para
0.25level m= , obtenemos la respuesta óptima con los valores de 1000pK = y un
tiempo derivativo entre el valor mínimo 0.001dT s= y 1.7dT s= , estando comprendido
el tiempo de establecimiento entre 40.531et s= y 41.382et s= , respectivamente, y
siempre con un error en estado estacionario 1%rpe = . Cabe resaltar que a partir de
1.7dT s= la señal de control comienza a comportarse como si fuera un control de tipo
on-off, cambiando su valor muy rápidamente y llegando a ofrecernos
aproximadamente 39.299et s= y 0%rpe = para 3.6dT s= . Pero este comportamiento
de cambios tan bruscos para conseguir nuestros objetivos sería el comportamiento
ideal, por lo que no lo tenemos en cuenta, aunque sí merecía la pena comentarlo. Las
figuras 3.16 y 3.17 muestran estos casos.
Por otro lado, para 0.15level m= requerimos 1000pK = y un tiempo derivativo entre
0.001dT s= y 1.7dT s= , con un tiempo de establecimiento entre 12.792et s= y
13.742et s= , respectivamente, y 1%rpe = en ambos casos. El comportamiento on-off
comienza a vislumbrarse también a partir de 1.7dT s= , con valores de respuesta
aproximados para 3.2dT s= de 18.831et s= y 0%rpe = . En las figuras 3.18 y 3.19
podemos ver todo esto.
50
Figura 3.16. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.25m usando un controlador PD para Td = 1.7s.
51
Figura 3.17. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.25m usando un controlador PD para Td = 3.6s.
52
Figura 3.18. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un controlador PD para Td = 1.7s.
53
Figura 3.19. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un controlador PD para Td = 3.2s.
Comparando resultados, se aprecia que el control derivativo añade cierta velocidad al
sistema frente al proporcional, pero tampoco consigue anular el error en régimen
permanente (consideramos irrealizable el drástico comportamiento on-off de la señal
de control en el actuador PD que es capaz de anular dicho error estacionario). Por
tanto, el control PI supera a ambos, ya que es capaz de anular este error manteniendo
una rápida respuesta si está adecuadamente ajustado.
Estudio del controlador PID
A continuación estudiaremos el asunto de aplicar la triple acción a un controlador
(proporcional-integral-derivativa).
Para realizar un correcto ajuste partiremos con el tiempo integral ajustado a su
máximo valor ( 100iT s= ) y el tiempo derivativo al mínimo ( 0.001dT s= ), e iremos
54
aumentando la ganancia hasta obtener las características de respuesta deseadas.
Haciendo esto (consideramos primero el caso 0.25level m= ), vemos que obtenemos la
mejor respuesta con el valor máximo de la ganancia ( 1000pK = ). A continuación,
reducimos el tiempo integral hasta anular el error en estado estacionario, aunque la
oscilación sea excesiva; disminuimos ligeramente la ganancia; y repetimos esto hasta
obtener la respuesta deseada. Así, logramos la mejor respuesta reduciendo el tiempo
integral hasta justo antes de inestabilizar al sistema ( 0.009iT s= ). Además, vemos que
no es necesario disminuir la ganancia. Finalmente, aumentamos el tiempo derivativo
hasta obtener características similares pero con una respuesta más rápida, y
aumentamos ligeramente la ganancia si fuese necesario. Entonces, conseguimos la
mejor acción PID aumentando el tiempo derivativo hasta justo antes de hacer
inestable al proceso ( 0.004dT s= ), observando que no es necesario modificar la
ganancia. El tiempo de establecimiento calculado es 39.042et s= y el error en régimen
permanente 0%rpe = . El resultado se refleja en la figura 3.20.
Figura 3.20. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.25m usando un controlador PID.
55
Para 0.15level m= procedemos de la misma manera, obteniéndose la mejor respuesta
para 1000pK = , 6.1iT s= y 0.008dT s= . Con estos ajustes logramos un tiempo de
establecimiento 13.437et s= y un error en régimen permanente 0%rpe = , tal como
muestra la figura 3.21.
Figura 3.21. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un controlador PID.
Con todos estos resultados, concluimos que el controlador que presenta mejor
respuesta es el controlador PID, seguido por el PI, PD y P, en este orden.
Sólo el PID y PI consiguen anular el error en régimen permanente. Si queremos reducir
el costo, bastaría con usar un control PI, ya que anula el error en estado estacionario y
el tiempo de establecimiento no presenta prácticamente mucha diferencia.
56
3.2.2. Diseño empleando control en cascada
Abordamos ahora el estudio del esquema de control maestro-esclavo o cascada.
Para ello haremos una comparativa entre usar un PI con realimentación simple y el
empleo de un control en cascada con un controlador PI en el lazo primario que
presente los mismos parámetros que el de realimentación simple, mientras que para el
lazo secundario emplearemos únicamente una acción proporcional P.
Consideraremos un nivel inicial de líquido en el tanque superior 0.25level m= y una
consigna 0.20SP m= , y usaremos el criterio del 2% para el tiempo de establecimiento
(mismas condiciones de antes).
De este modo, para realimentación simple con 20pK = y 10.8iT s= , se obtiene un
sistema muy lento, con 337.179et s= y 0%rpe = , tal como refleja la figura 3.22, donde
mostramos además el espacio de fases resultante.
Figura 3.22. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un control simple con PI.
Respecto al control en cascada, empleando los mismos valores del control simple para
el lazo primario ( 20pK = y 10.8iT s= ), y con una ganancia proporcional para el lazo
secundario 25pK = , logramos un 39.931et s= y 0%rpe = (ver figura 3.23).
57
Figura 3.23. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un control cascada con lazo primario PI y secundario P.
Podemos visualizar como el control en cascada presenta mejores prestaciones que el
simple en este caso, pero en general, al no contemplar nuestro sistema el efecto de los
retardos y las perturbaciones (ya que pretendemos ir complicando más la
programación y las conclusiones obtenidas a medida que avanza el proyecto), y
ateniéndonos también a las consideraciones de reducción de costos, nos bastaría para
este laboratorio de control con el empleo de realimentación simple usando un
actuador PID, incluso pudiendo prescindir si es preciso de la acción derivativa por el
mismo motivo.
3.3. Otras consideraciones
Antes de finalizar este capítulo, vamos a mostrar algunos casos particulares.
Efecto windup
Estudiando el controlador PI en la sección anterior resultó que para un nivel inicial de
líquido en el tanque superior 0.15level m= se conseguía la mejor respuesta con
1000pK = y 6.3iT s= , obteniéndose 13.566et s= y 0%rpe = (ver figura 3.15).
58
Si consideramos ahora que sigue existiendo saturación en la señal de control, pero no
hay corrección del efecto windup en el término integral del PI, la figura 3.24 nos
muestra lo que ocurre en estas condiciones.
Figura 3.24. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un controlador PI sin corrección del efecto windup.
Vemos que la respuesta del sistema presenta un tiempo de establecimiento mucho
mayor ( 73.858et s= ) que hace demorar al mismo en anular el error en régimen
permanente ( 0%rpe = ).
Esto se debe a que al llegar la señal de control a su valor máximo de saturación
continuamos sumando el término integral del error, de ahí que el proceso tarde más
en evolucionar a su estado óptimo.
59
Variable de control ilimitada
Si para el mismo caso del PI que estamos abordando en esta sección ( 1000pK = y
6.3iT s= ) consideramos ahora que la señal de control puede alcanzar cualquier valor
(lo que implica un flujo ilimitado, o limitado sólo a la cantidad de líquido total
disponible en el tanque inferior, y la no existencia de saturación en la bomba),
obtenemos una respuesta de 10.845et s= y 0%rpe = . La figura 3.25 refleja esto.
Figura 3.25. Evolución del sistema frente a un nivel inicial de líquido en el tanque
superior de 0.15m usando un controlador PI sin saturación en la señal de control.
De esta manera, al no existir saturación es posible mejorar la respuesta suministrando
un mayor caudal del que nos limitaría dicha situación.
60
Valoración final
Hemos abordado los principios fundamentales que rigen el control del nivel de líquido
de un depósito en sus diversas facetas, detallando de este modo los aspectos más
significativos de la simulación, los que verdaderamente merecen ser estudiados con
más profundidad y detenimiento.
Todas estas simulaciones más relevantes quedan recogidas en la ventana de diálogo
DialogOption, que emerge si pinchamos sobre el selector Options, en el panel de
mando de nuestro laboratorio de control, tal como muestra la figura 3.26.
Figura 3.26. Panel de opciones para configurar los casos más significativos de control.
De este modo, sólo con pulsar cualquier botón de este panel de opciones quedarán
cargados los parámetros del esquema de control deseado, presentando así tanto
situaciones óptimas de control como casos de especial interés. Todas estas
configuraciones son las que hemos ido mostrando a lo largo de esta sección.
Por otro lado, ni que decir tiene que si nos fijamos un poco en las ecuaciones del
modelo podríamos preguntarnos por lo que sucedería con la modificación de los
parámetros del sistema. Resultará lo que dicte el comportamiento del modelo.
Así, por ejemplo, un mayor coeficiente de descarga en la válvula manual o un mayor
radio desembocará en un mayor caudal de salida, por lo que el sistema tardará más
tiempo en alcanzar el estado de equilibrio. Lo mismo sucederá si la bomba trabaja con
una eficiencia menor al 100%, ya que la servoválvula suministrará al depósito superior
un caudal más bajo.
Por tanto, invitamos al lector a modificar los parámetros del sistema a su gusto si
desea “curiosear” sobre el comportamiento del mismo, que obviamente será el
esperado si tiene en mente las ecuaciones que gobiernan el modelo.
Concluimos este capítulo diciendo que la aplicación Ejs aquí realizada para simular el
control del nivel de líquido de un par de tanques (superior e inferior) podría servirnos
para actuar verdaderamente sobre un hipotético proceso físico real de idénticas
características situado en un laboratorio remoto, accediendo a él mediante el empleo
61
de una conexión a internet. Para más información sobre esto, os remitimos a la
solución adoptada por la UNED (Universidad Nacional de Educación a Distancia) para la
creación de un laboratorio virtual y remoto con la finalidad de ser objeto de estudio en
determinadas asignaturas [14].
62
CAPÍTULO 4: OPTIMIZACIÓN DE ENJAMBRES
DE PARTÍCULAS
Tras abordar el estudio del comportamiento de un laboratorio de control, hemos
adquirido la destreza suficiente para realizar empresas que requieran una mayor
complejidad en cuanto a programación del modelo y la vista de una simulación, por lo
que ya nos encontramos en condiciones de afrontar el análisis de sistemas dinámicos
formados por múltiples individuos interactuando.
Por tanto, procedemos ahora a investigar la conducta como manada de conjuntos de
partículas de distinta especie, considerando diversas formas de actuación según se
trate de especies carnívoras (depredadoras) o herbívoras (presas).
El comportamiento en bandada (flock en inglés) es el exhibido por un conjunto de
pájaros en vuelo [15]. Hay paralelismos con el comportamiento de los bancos de
peces, enjambres de insectos y rebaños o manadas de animales terrestres. Por tanto, a
partir de ahora llamaremos indistintamente a una agrupación de individuos por
cualquiera de estos nombres.
Las simulaciones por ordenador y los modelos matemáticos que se han desarrollado
para emular el comportamiento en bandada de los pájaros pueden aplicarse también a
la conducta en “bandada” de otras especies. Como resultado de esto, el término
“bandada” se aplica algunas veces en la informática a especies diferentes de las aves.
Desde el punto de vista del diseño matemático, una “bandada” es el movimiento
colectivo de un gran número de entidades auto-propulsadas y un comportamiento
animal colectivo que se manifiesta en seres vivos como pájaros, peces, bacterias e
insectos. Se considera un comportamiento emergente que surge a partir de reglas
simples seguidas por los individuos y que no implica ningún tipo de coordinación
central.
Los modelos básicos de conducta en bandada son controlados por tres reglas simples,
las cuales se aplican localmente a cada individuo dentro de una pequeña vecindad
circular establecida por su radio de alcance o detección:
- Alineación: cada elemento de la misma especie intentará llevar la misma
velocidad (ángulo y módulo) que todos los que estén en su área de detección.
- Cohesión: asimismo, tratará de dirigirse al centro percibido de la bandada, es
decir, al centroide de todos los individuos que es capaz de detectar en su radio.
63
- Separación: evitará sitios donde haya mucha conglomeración de congéneres.
Para ello se usará un radio de separación (obviamente, de menor valor que el
de detección), indicando así la distancia a la que deseamos permanezcan
separadas las partículas.
Siguiendo estas tres normas, junto con otras como las de evitar predadores y
obstáculos o perseguir a sus presas para obtener alimento, ya sea este de origen
animal o vegetal, analizaremos con detenimiento la conducta de todas las especies
animales implicadas.
En la figura 4.1 podemos visualizar cómo se aplica la primera regla: alineación. En ella
se aprecia como el elemento de la parte superior-izquierda se acaba de encontrar con
una bandada de cuatro congéneres, por lo que tratará de llevar la dirección general de
la misma, señalada en la imagen con una flecha grande de color azul. Los círculos rojos
representan el área de detección de cada ejemplar, mientras que los de color naranja
indican la región de separación.
Figura 4.1. Aplicación de la ley de alineación en manadas.
Para la regla de cohesión, vemos en la figura 4.2 que el elemento de la parte superior-
izquierda se ha topado con cuatro individuos de su misma especie, por lo que intentará
ir hacia el centro de la bandada, indicado con un punto azul, siguiendo la dirección
marcada por la flecha de color negro.
64
Figura 4.2. Aplicación de la ley de cohesión en manadas.
Para explicar la regla de separación, fijémonos en la imagen de la figura 4.3. Aquí se
distingue como el individuo verde se acaba de encontrar con otro de distinta especie
(color rojo) y un obstáculo (círculo relleno en marrón). Por tanto, se aplicará una fuerza
opuesta a la posición media de la partícula roja y el obstáculo, indicada con un punto
de color azul. Dicha fuerza tratará de llevar al ejemplar verde en la dirección indicada
por la flecha negra, alejándolo de esta forma del “inminente peligro”. Cabe mencionar
que esta fuerza también tiene lugar con los elementos de una misma especie, con la
salvedad de que sólo aparecerá cuando se encuentren muy juntos unos de otros, a una
distancia menor que el radio de separación (circunferencia de color naranja en la
imagen).
Figura 4.3. Aplicación de la ley de separación en manadas.
65
Una vez expuestas estas tres normas esenciales para la generación de una bandada,
pasamos a visualizar la pantalla de simulación de la aplicación (figura 4.4).
Figura 4.4. Panel de control de la simulación.
En la parte superior aparece el mapa por donde se mueven los especímenes de cada
tipo, mientras que en la inferior se encuentra el panel de mando del programa, que
procedemos a comentar en este instante de izquierda a derecha.
En la primera columna tenemos los botones que controlan la simulación (Play, Pause,
Step, Reset, Init), un indicador del tiempo transcurrido (t), y cinco selectores para
mostrarnos las distintas gráficas y modificar los pesos empleados a la hora de
configurar las interacciones ejercidas entre los individuos.
Las cuatro siguientes nos indican, para cada especie (herbívoros: H1 y H2, carnívoros:
C1 y C2), el número de elementos que quedan con vida en el mapa, la posibilidad de
añadir o quitar ejemplares, el valor de su velocidad y aceleraciones medias, y si
queremos que dichos parámetros se muestren en las gráficas pertinentes.
La sexta columna nos da la opción de que aparezcan en pantalla los radios de
detección (DR) y separación (SR) de cada especie.
La columna siguiente se usa para ver los identificadores de los elementos (Ver Ids),
mostrar el espacio de fases (Ver Caminos), si pueden comer los carnívoros un número
ilimitado de piezas (Sinfín Piezas), el número de piezas a ingerir si la cifra es limitada
66
(piezas), modificar el número de vegetales (VEG) u obstáculos (OBST), indicar si los
herbívoros y carnívoros pueden consumir o no vegetales, si los individuos evitan los
obstáculos o no (Ev Obst), y el número máximo de puntos de cada traza en las gráficas
(TRAZA).
La octava columna se emplea para la establecer la manera en la que interactúan las
diversas especies existentes entre sí. De este modo, podemos decidir si deseamos que
los dos tipos de herbívoros se agrupen en una gran manada o no (situación que
también se produce para las dos clases de carnívoros), si los herbívoros huyen de los
carnívoros o no, y qué animales forman parte de la dieta de cada predador.
Las dos próximas columnas sirven para configurar, para cada especie, el rango de
velocidad, el máximo ángulo de giro, y las áreas de detección y separación.
Finalmente, la última columna hace acopio del tipo y la cantidad de comida ingerida
por cada especie.
4.1. Obtención del modelo y la vista de la simulación
Luego de haber presentado la simulación, es el turno de exponer las ecuaciones y los
procedimientos de programación empleados.
Las ecuaciones responden a la aplicación de la definición de posición, velocidad y
aceleración de una partícula a lo largo del tiempo.
Así, si definimos la posición, velocidad y aceleración de un elemento, respectivamente,
en un plano de coordenadas ( , )x y como:
( , )r x y=� (4.1)
( , )x yv v v=� (4.2)
( , )x ya a a=� (4.3)
Entonces, podemos expresar la evolución del mismo en el transcurso de un instante de
tiempo (dt) como:
antr r v dt= + ⋅� � � (4.4)
antv v a dt= + ⋅� � � (4.5)
Donde:
67
( , )ant ant antr x y=� (4.6)
, ,( , )ant x ant y antv v v=� (4.7)
Siendo antr�
y antv�
la posición y velocidad de la partícula en el instante de tiempo
anterior.
De esta forma, si el individuo se encuentra aislado no actuará ninguna fuerza sobre él,
por lo que 0a = y .v cte= , resultando un movimiento rectilíneo uniforme.
Pero si, por el contrario, este localiza algo dentro de su área de detección o separación
(siempre que hayamos configurado en el panel de mando si responde o ignora este
evento) podrán producirse fuerzas que hagan que el cuerpo se acelere.
A continuación, comentamos las diversas fuerzas que pueden generarse cuando una
partícula interactúa con su entorno. Para ello, las hemos separado creando una
aceleración para cada tipo de acción, con sus respectivas componentes en x e y :
al coh sep ev seg aproa a a a a a a= + + + + +� � � � � � � (4.8)
Expliquémoslas una a una, pues:
ala�
, aceleración de alineación: empleada para hacer cumplir la primera regla para la
formación de una manada (ver figura 4.1).
Se expresa de la forma:
,( )al al al fact al anta w w v v= ⋅ ⋅ −� � � (4.9)
Donde alw y ,al factw son dos pesos (un par de valores numéricos) que se ajustarán
convenientemente para que la fuerza de alineación actúe en su correcta medida.
Mientras que alv�
representa la velocidad media del número total de partículas, N , (las
de la misma especie, e incluso añadiendo también las de otra especie si así hemos
configurado la opción de agrupar manadas de clase diferente) que encuentra nuestro
individuo dentro de su área de detección:
1
1 N
al i
i
v vN =
= ⋅∑� �
(4.10)
De este modo, nuestro ejemplar tenderá poco a poco, con los valores de los pesos
correctamente establecidos, a la velocidad media del grupo gracias a esta aceleración
que mide la diferencia entre la celeridad promedio de la manada y la de la partícula en
cuestión, tomando dicha fuerza valor nulo cuando se igualen ambos guarismos.
68
coha�
, aceleración de cohesión: usada en la segunda norma de generación de una
bandada (figura 4.2).
Su ecuación es:
( )coh coh centr centr anta w w r r= ⋅ ⋅ −� � � (4.11)
Donde cohw y centrw son dos pesos (un par de valores numéricos) que se ajustarán
convenientemente para que la fuerza de cohesión actúe en su correcta medida.
Mientras que centrr�
representa la posición media o centroide del número total de
partículas, N , (las de la misma especie, e incluso añadiendo también las de otra
especie si así hemos configurado la opción de agrupar manadas de clase diferente) que
encuentra nuestro individuo dentro de su área de detección:
1
1 N
centr i
i
r rN =
= ⋅∑� �
(4.12)
De esta guisa, nuestro espécimen tenderá poco a poco, con los valores de los pesos
correctamente establecidos, a la posición media del grupo gracias a esta aceleración
que mide la diferencia entre el centroide del enjambre y la ubicación de la partícula en
cuestión, tomando dicha fuerza valor nulo cuando se igualen ambas cifras.
sepa�
, aceleración de separación: tiene su función para la tercera regla de creación de
una manada. Se sigue lo indicado en la figura 4.3, con la salvedad de que esta
aceleración es aplicable únicamente a los elementos de la misma especie (e incluso
distintas si se selecciona la opción agrupar manadas en el panel de control), además de
que la región para la cual existe dicha fuerza es la de separación y no la de detección.
Se rige por la ley:
( )sep sep alej sep anta w w r r= ⋅ ⋅ −� � � (4.13)
Donde sepw y
alejw son dos pesos (un par de cantidades numéricas) que se sintonizarán
adecuadamente para que la fuerza de separación actúe en su justa medida. Mientras
que sepr�
representa la posición espejo, imagen, reflejada o de separación media del
número total de partículas, N , (las de la misma especie, e incluso añadiendo también
las de otra especie si así hemos configurado la opción de agrupar manadas de distinta
clase) que encuentra nuestro individuo dentro de su área de separación, ya que sólo
aplicaremos esta acción cuando los ejemplares se hallen muy pegados unos de otros:
2sep ant centrr r r= ⋅ −� � � (4.14)
69
Así, siendo centrr�
el mismo centroide de (4.12), la posición imagen o de separación
media corresponderá a aquella diametralmente opuesta al centroide respecto a la
ubicación de nuestra partícula.
En definitiva, nuestro elemento tenderá poco a poco, con los valores de los pesos
convenientemente configurados, a la posición imagen o de separación media del grupo
gracias a esta aceleración que mide la diferencia entre la posición reflejada de la
bandada y la ubicación de la partícula en cuestión (pero considerando ahora sólo los
congéneres que se encuentren dentro del radio de separación), tomando dicha fuerza
valor nulo cuando se igualen ambas cifras.
eva�
, aceleración de evasión: se aplica como regla adicional a las de mantenimiento de
una bandada, para el caso en el que un individuo del grupo se encuentre con otros de
distinta especie o con obstáculos dentro de su rango de detección e intente evitarlos.
En este caso, se sigue exactamente lo que muestra la figura 4.3.
Se basa en la ley:
,( )ev ev ev fact sep anta w w r r= ⋅ ⋅ −� � � (4.15)
Donde evw y ,ev factw son dos pesos (un par de valores numéricos) que se ajustarán
convenientemente para que la fuerza de evasión actúe en su correcta medida.
Mientras que sepr�
tiene el mismo significado que para la aceleración de separación
(4.14), por lo que de ahí se deriva que (4.12) también funciona aquí de igual forma,
siempre teniendo en cuenta ahora que estamos refiriéndonos al radio de detección y
para cuando se tope nuestro ejemplar con un “grupo conflictivo”, formado por
partículas de clase diferente y obstáculos.
De este modo, nuestro elemento tenderá poco a poco, con los valores de los pesos
correctamente establecidos, a la posición reflejada o de separación media del “grupo
conflictivo” gracias a esta aceleración que mide la diferencia entre la posición reflejada
de la “bandada conflictiva” y la ubicación de la partícula en cuestión, tomando dicha
fuerza valor nulo cuando se igualen ambas cifras.
sega�
, aceleración de seguimiento: se aplica como regla complementaria a las de
gestión de una manada, para el caso en el que un individuo del grupo se encuentre con
otros de distinta especie o con alimentos de origen vegetal dentro de su rango de
detección y pretenda atraparlos. Así, nuestro ejemplar tomará como objetivo la presa
que tenga a una menor distancia, si dispone de varias donde elegir, tal como se aprecia
en la figura 4.5.
70
Figura 4.5. Aplicación de la fuerza de seguimiento en manadas.
Podemos ver como el espécimen verde tiene dentro de su radio de detección a una
potencial presa de color azul y una planta (círculo rosado), y que se decanta a la postre
por esta última al encontrarse a una distancia menor (segmento azul de la imagen más
pequeño), por lo que se ejerce sobre nuestro elemento una acción de seguimiento
hacia el vegetal (flecha negra).
La ecuación que gobierna esta fuerza es:
,( )seg seg seg fact seg anta w w r r= ⋅ ⋅ −� � � (4.16)
Donde segw y
,seg factw son dos pesos (un par de cantidades numéricas) que se
configurarán adecuadamente para que la fuerza de seguimiento actúe en su justa
medida. Mientras que segr�
representa la posición objetivo o de seguimiento, es decir,
las coordenadas de la presa (de origen animal o vegetal) más cercana a nuestra
partícula:
( , )seg seg segr x y=� (4.17)
Por tanto, nuestro ejemplar tenderá poco a poco, con los valores de los pesos
correctamente establecidos, a la posición objetivo gracias a esta aceleración que mide
la diferencia entre la posición de seguimiento y la ubicación de la partícula en cuestión,
tomando dicha fuerza valor nulo cuando se igualen ambas cifras.
aproa�
, aceleración de aproximación: se aplica como norma complementaria a las de
control de una bandada, para el caso en el que un elemento del grupo se tope con
otros de distinta clase o con viandas de origen vegetal dentro de su área de detección
y pretenda capturarlos. De esta manera, nuestro individuo tomará como objetivo la
71
presa que tenga a una menor distancia, si dispone de varias donde elegir, tal como
ilustra la figura 4.5.
La expresión de esta fuerza es:
,( )apro apro apro fact apro anta w w v v= ⋅ ⋅ −� � � (4.18)
Donde aprow y
,apro factw son dos pesos (un par de valores numéricos) que se
sintonizarán convenientemente para que la acción de aproximación se ejerza en su
correcta medida. Mientras que aprov�
representa la velocidad de aproximación al
objetivo, siendo igual a la diferencia entre la posición del objetivo (4.17) y la de nuestro
elemento (4.6):
apro seg antv r r= −� � � (4.19)
Entonces, nuestro individuo tenderá poco a poco, con los valores de los pesos
correctamente fijados, a la velocidad de aproximación gracias a esta aceleración que
mide la diferencia entre la celeridad de aproximación y la velocidad de la partícula en
cuestión, tomando dicha fuerza valor nulo cuando se igualen ambos guarismos.
Finalmente, mencionar que para las ecuaciones de este capítulo hemos tenido en
cuenta que los individuos pueden salirse del mapa y aparecer por la zona opuesta,
aplicando las líneas de código necesarias para que un elemento pueda detectar a otro
que se halla dentro de su radio de acción pero por el extremo contrario, como refleja
la figura 4.6.
72
Figura 4.6. Desborde de mapa en manadas.
Vemos como los dos ejemplares de la parte superior de la imagen, que aún no han
desbordado el mapa, continúan siguiendo a sus congéneres de la parte inferior, que sí
lo han hecho.
Este es el comportamiento básico seguido en el modelo de la simulación, cuya página
de evolución mostramos ahora:
73
Figura 4.7. Panel de evolución de la simulación.
Precisamos de una única página de evolución (nombrada Evolucion), la cual contiene
exclusivamente código Java y está compuesta por diversas llamadas a métodos propios
con el fin de conseguir el comportamiento deseado. Básicamente, esta página consta
de cuatro bucles (uno para cada especie animal), donde se van actualizando mediante
los métodos pertinentes todas las interacciones que se producen a lo largo de la
simulación, tanto entre ellos como con los obstáculos y plantas, para poder luego
emplearlas con el propósito de estudiar la conducta y estadísticas de cada elemento,
ya sea gráficamente o viendo cómo cambian ciertos parámetros con el curso del
tiempo.
Vamos a mostrar en este momento la distribución de variables de nuestra aplicación
(figura 4.8).
74
Figura 4.8. Panel de variables de la simulación.
Las variables se encuentran estructuradas en nueve páginas, con nombres que indican
claramente su contenido:
VariablesGenericasYDeMenus: tabla de variables de ámbito general, empleadas en el
modelo en los diversos cálculos o en la vista para actualizar su contenido.
IndicesMatrices: tabla de variables con los índices de las matrices donde irán
almacenados los datos de las cuatro especies animales, los vegetales y los obstáculos.
VariablesHerb1, VariablesHerb2, VariablesCarn1, VariablesCarn2,
VariablesObstaculos, VariablesVegetales: estas tablas contienen, respectivamente, las
variables empleadas para hacer acopio del estado en el que se encuentran las
poblaciones de herbívoros números uno y dos, carnívoros números uno y dos,
obstáculos y vegetales.
VectorDeParametros: tabla de variables con los índices de los vectores de parámetros
empleados en los cálculos de las diversas aceleraciones.
A continuación pasamos a enseñar el panel de métodos propios (figura 4.9).
75
Figura 4.9. Panel de métodos propios de la simulación.
Se observa como requerimos siete páginas, con nombres también concluyentes acerca
de su contenido, que pasamos a detallar de inmediato página a página.
Calculos: página que contiene métodos básicos de cálculo que son empleados por
otros métodos y en distintas partes de la simulación, tanto en el modelo como en la
vista. Dichos métodos son los siguientes:
- coseno: devuelve el coseno de un ángulo en grados pasado como parámetro.
- seno: devuelve el seno de un ángulo en grados pasado como parámetro.
- modulovector: devuelve la norma o módulo de un vector cuyas componentes
se pasan como parámetros.
- angulovector: devuelve el ángulo (entre 0 y 360 grados) de un vector cuyas
componentes se pasan como parámetros.
- limitarmodulo: acota la velocidad de los individuos de cada especie entre un
valor mínimo y otro máximo, especificados ambos como parámetros.
- calculanewvectdouble: crea (reserva memoria para) un vector de tipo double.
76
- calculanewvectint: crea (reserva memoria para) un vector de tipo int. En
desuso, por el momento.
- corregirangulo: para determinar si a un individuo, al ejercerse cierta acción
sobre él, le viene mejor girar a la derecha o a la izquierda para alcanzar el
ángulo deseado, que podrá verse limitado si supera el máximo ángulo de giro,
especificado como parámetro.
Inicializa: página que contiene métodos que son empleados por otros métodos y en
distintas partes de la simulación para establecer el estado inicial de los elementos (en
el panel de inicialización del modelo, ver figura 4.10) y modificar interactivamente su
población con los botones pertinentes (en la vista). Estos métodos son los siguientes:
- creanuevoelementomatriz: genera nuevos individuos en la matriz donde se
almacena toda la población de su especie, aplicable también para obstáculos y
vegetales.
- actualizamatrizindividuos: genera la matriz de elementos, teniendo presente
los correspondientes descensos o aumentos de población, siendo aplicable
también a obstáculos y plantas.
- inicializaindividuos: genera y da a la matriz de elementos un estado inicial,
apoyándose para ello de los dos métodos anteriores, siendo aplicable también
a obstáculos y plantas.
77
Figura 4.10. Panel de inicialización de la simulación.
Podemos observar en la imagen como dicho panel se compone de una única página,
de nombre Inicializacion, donde empleamos el método inicializaindividuos, entre
otros, para establecer el estado inicial de las cuatros especies animales, los obstáculos
y los vegetales.
Actualizar: página que incluye métodos para preparar al sistema para su siguiente
paso de simulación, que a su vez son empleados por otros métodos y en distintas
partes del programa, tanto en el modelo como en la vista. Estos métodos son los
siguientes:
- actualizaestadoindividuos: asigna a la posición, velocidad y ángulo de las
partículas en el instante anterior su valor en el instante actual, de cara a
preparar al sistema para el siguiente paso de simulación.
- actualizanuevoestadoindividuos: asigna un valor a la posición, velocidad,
ángulo y aceleración de las partículas en el instante actual a partir de los datos
en el instante anterior y las interacciones (aceleraciones o fuerzas) producidas
en el instante actual.
- actualizavectoresvista: modifica si procede los vectores de la vista a partir de
la matriz del elemento correspondiente (animal, obstáculo o vegetal), ya que
78
los parámetros que hacemos uso en la vista deben ser especificados como
vectores y no como matrices.
DibujaRangos: página con un único método (calcularangos), implementado para hallar
los cuatro posibles centros de los círculos de detección y separación, ya que puede
haber desbordamiento en los lados del mapa. Se emplea tanto en el modelo como en
la vista.
CalculosAceleraciones: página que incluye métodos con el fin de hallar las fuerzas o
aceleraciones que se producen en los diversos animales, ya sea entre ellos o frente a
obstáculos y plantas. Se utilizan exclusivamente en los bucles de las cuatro especies
animales dentro del panel de evolución del modelo. Los métodos son:
- inicializaacerovectdouble: establece a valor cero todas las componentes de un
vector. Se emplea con los vectores de parámetros del tipo agrupar manadas
(denominado vectparamagr) y separar manadas y obstáculos (vectparamsep)
para reutilizarlos en los cuatro bucles.
- inicializaacerosalvounovectdouble: asigna valor cero todas las componentes
de un vector, a excepción de la del índice especificado como parámetro, cuyo
valor también se pasa por ahí. Se emplea con el vector de parámetros del tipo
seguir individuos y vegetales (vectparamseg) para reutilizarlos en los cuatro
bucles. El índice que no se inicializa a cero (sino a un valor correspondiente a
tres veces su radio de detección, esto es, un valor fuera del alcance de visión de
nuestro animal) es el que indica la distancia de nuestro espécimen con el
elemento objetivo, ya que así podremos llevar debida cuenta de si es necesario
aplicar la fuerza de seguimiento y a quién perseguir (si hay más de un elemento
implicado).
- preparaacel: evalúa las posibles aceleraciones a aplicar en los ejemplares de
las cuatro especies animales existentes. Hace uso para ello de los vectores de
parámetros.
- calculaacel: determina, apoyándose en el método anterior y en los vectores
de parámetros, las posibles aceleraciones surgidas en los individuos, ya sea
para agruparse en manada, perseguir presas, o evitar obstáculos y partículas de
otra especie.
LimpiarRestos: página que incluye tres métodos, uno de los cuales da nombre a la
misma. Estos son:
- limpiezarestos: borra del mapa y de la matriz correspondiente a los animales y
vegetales fallecidos.
79
- cambiarpiezas: modifica el número de víctimas (tanto animales como
vegetales, si procede) que un predador puede cazar antes de ser retirado del
mapa y de su matriz de congéneres. Únicamente los carnívoros podrán ser
apartados de esta forma.
- cambiarnumpiezas: efectúa la variación de la cantidad de seres vivos que
puede atrapar un carnívoro antes de ser depuesto del mapa y de su matriz de
congéneres, haciendo uso para ello del método anterior.
RetoquesFinales: última página del panel Propio compuesta por cuatro métodos con
diversos fines, que procedemos ahora de explicar:
- ponenovivoyceroindis: coloca en estado de reposo perpetuo al herbívoro o
carnívoro fallecido, manteniéndose su posición y ángulo mientras no sea
eliminado de la matriz y, por consiguiente, del mapa.
- numerovivos: hace recuento de la cantidad de animales de cada tipo que
siguen aún con vida.
- recuentanovivos: hace acopio del número de presas devoradas por los
animales de cada especie.
- asignaids: para identificar a los animales en el mapa con un número.
Tras haber explicado los distintos paneles del modelo (no se ha requerido panel de
ligaduras), procedemos ahora con la parte gráfica de la simulación.
Vista de la simulación
El árbol de elementos de la vista de nuestra aplicación es el que se visualiza en la figura
4.11.
80
Figura 4.11. Vista de la simulación de nuestro programa.
Vemos como se compone de una ventana principal (llamada Main), donde
representaremos gráficamente los seis tipos de elementos (cuatro especies animales,
obstáculos y plantas) que pueden poblar el mapa mediante el panel de dibujo con el
recurrente nombre PanelDibujo. Además, el elemento Panel será el que contendrá los
mandos necesarios para controlar la simulación.
Por otro lado, precisamos de un conjunto de ventanas de diálogo que comentamos a
continuación:
- DialogPoblacion: ventana de diálogo para la gráfica que mide la evolución
temporal del número de elementos de cada tipo en el mapa.
- DialogVelAcel: ventana de diálogo para la gráfica que representa para cada
ejemplar animal el cambio a lo largo del tiempo de la velocidad y aceleraciones
de menor peso o valor.
- DialogAcel: ventana de diálogo para la gráfica que evalúa para cada animal las
aceleraciones de mayor peso o valor en el tiempo.
- DialogRecorrido: ventana de diálogo para la gráfica que calcula el espacio de
fases de la posición en x y la posición en y para cada elemento.
81
- DialogPesosH1H2: ventana de diálogo a modo de panel de opciones adicional
para modificar si se desea los pesos empleados para calcular las aceleraciones
de los herbívoros.
- DialogPesosC1C2: ventana de diálogo cuyo propósito es el de alterar los pesos
utilizados para determinar las aceleraciones de los carnívoros.
Ahora vamos a detallar algunos elementos de la vista. En concreto, veremos algunos
de los que están incluidos en el panel de dibujo, cuyos hijos se muestran en la figura
4.12.
Figura 4.12. Árbol de elementos del panel de dibujo en la vista.
En la imagen aparecen los elementos iniciales que conforman el panel de dibujo. Se
distinguen los elementos de dibujo de tipo Básico, tales como conjuntos de vectores o
flechas (FlechasHerb1, FlechasHerb2, etc.), conjuntos de partículas (DetRangHerb1,
SepRangHerb1, etc.), y conjuntos de textos (TextHerb1Id, TextHerb2Id, etc.).
Si abrimos las propiedades del elemento FlechasHerb1 (el cual se emplea para ubicar a
los herbívoros de tipo uno en el mapa) resultará lo que muestra la figura 4.13.
82
Figura 4.13. Propiedades del elemento FlechasHerb1 en la vista.
Podemos observar en las propiedades como el número de elementos del conjunto está
asociado a NHERB1, que es una variable disponible en el panel de mando de la
simulación con objeto de ser modificada a nuestro gusto. Además, para indicar la
posición de los ejemplares en el mapa se utilizan los vectores herb1x y herb1y, los
cuales obtienen las coordenadas en x y en y , respectivamente, de la matriz de
herbívoros de este primer tipo, ya que este elemento no acepta que se le pase
directamente una parte de la matriz como parámetro. Asimismo, para el tamaño de los
individuos (de sus flechas) se usan los vectores tamherb1x y tamherb1y, indicando el
tamaño en x y en y de estos según su orientación en el mapa, manteniendo siempre
dichos vectores igual módulo. También indicamos la visibilidad de los elementos
mediante la variable VISIBLEHERB1, e impedimos que puedan ser movidos
interactivamente por el usuario. Por último, establecemos el color azul para las flechas
de los elementos.
Otro elemento que merece la pena mencionar es el conjunto de textos. Para ello,
escogemos el elemento TextHerb1Id, cuyas propiedades se visualizan a continuación
en la figura 4.14.
83
Figura 4.14. Propiedades del elemento TextHerb1Id en la vista.
Se observa aquí como no hay cambios con respecto a las propiedades de la imagen
anterior en cuanto al número de elementos, la posición de los mismos, la interacción
con el usuario y el color.
Sin embargo, para la visibilidad tenemos la siguiente línea de código (función lógica
AND de dos valores booleanos):
VISIBLEHERB1&&verids
Esta sentencia nos da la opción de poder mostrar y ocultar interactivamente los
identificadores de los individuos, ya que la variable verids sí es accesible desde el panel
de la simulación, mientras que la primera actúa de manera automática, tomando valor
false cuando el número de herbívoros tipo uno sea cero (ya que por defecto se creará
en esta situación un individuo que no será usado, con el propósito de no dejar vacía la
matriz).
En cuanto al aspecto gráfico, resaltar que el texto a mostrar será el que contenga la
variable de tipo String denominada Herb1Id, que aparece entre % para indicar que se
trata de una variable y no del texto en sí. Esta variable contendrá el identificador de
cada ejemplar del grupo, resultando en pantalla sobre cada partícula un texto de la
forma H1.X, donde X será el número del herbívoro de tipo uno dentro de la matriz de
congéneres, que irá desde cero hasta el número total de individuos de esa especie
menos uno. También se especifica la fuente del texto, es decir, el tipo de letra, su
estilo (si es normal, como es el caso, o si es negrita, cursiva, negrita-cursiva) y su
tamaño.
84
4.2. Análisis del fenómeno bajo estudio
Después de presentar los aspectos más significativos del modelo y la vista del control
de una manada y las interacciones con su entorno, proseguimos ahora cotejando las
diversas posibilidades que el programa nos ofrece.
Decir primero que se ha optado por hablar de unidades de tiempo (udt) y cuadros (□ )
para expresar las magnitudes del tiempo y la distancia, respectivamente. Por lo tanto,
la velocidad estará expresada en /udt□ y la aceleración en 2/ udt□ . También hemos
limitado a diez el número máximo de elementos de cada tipo para evitar que la
simulación se ralentice si incluimos una cifra mucho mayor (esto dependerá
obviamente de la memoria del ordenador de cada usuario). Además, todas las gráficas
de este capítulo han sido elaboradas empleando el máximo valor de la variable TRAZA,
esto es, doscientos, con objeto de mostrar en pantalla y en la memoria del proyecto el
comportamiento del sistema durante un mayor intervalo de simulación. Es por ello que
en ocasiones algunas figuras de este capítulo podrían parecer difíciles de interpretar al
haber muchas trazas en tan poco espacio de pantalla. Pero ello no supone ningún
problema si sabemos que para una visualización con mayor detalle de las gráficas (una
especie de zoom) únicamente hay que disminuir el valor de dicha variable TRAZA en el
panel de mando. Incluso nos podría bastar con activar solamente el selector que hace
que se muestren o no las trazas de los individuos de cada especie (Ver H1, Ver H2, Ver
C1, Ver C2, según el caso), ya que en las figuras de este capítulo se han mostrado a la
vez los parámetros de todas las especies implicadas en lugar de visualizar sólo las de
una especie en concreto, ofreciendo así una mayor visión de conjunto. También
podríamos estirar las ventanas de diálogo de las gráficas correspondientes para ver
mejor la evolución. O, finalmente, efectuar cualquier combinación de todas estas
técnicas mencionadas. Por último, señalar que todos los valores límites de los
guarismos anteriores pueden ser alterados si el usuario dispone de la herramienta Ejs y
del archivo .xml de esta aplicación.
Caso 1. Comparativa de las diversas aceleraciones
Para analizar las fuerzas ejercidas entre los distintos elementos vamos a partir del
sencillo caso de la figura 4.15.
85
Figura 4.15. Mapa actual del sistema.
En la imagen podemos ver la configuración de los diferentes parámetros, donde se
aprecia como el individuo rojo puede alimentarse de los verdes y por ello se dispone a
seguir al que tiene más cerca (etiquetado como C1.1). Mientras que los ejemplares
verdes, que se encuentran persiguiendo a uno negro con el fin de capturarlo, se hallan
ahora con el dilema de continuar con la captura o comenzar la evasión para evitar
convertirse en “cazadores cazados”. Se aprecia también en el panel de mando el valor
promedio de las velocidades y aceleraciones de cada especie.
A continuación mostramos estos valores para los carnívoros de tipo dos (figura 4.16).
86
Figura 4.16. Gráficas del sistema.
Se observa en la gráfica de población que no ha habido ninguna baja. Por otro lado, en
el espacio de fases vemos que los ejemplares verdes comenzaron a acercarse con
objeto de formar una pequeña manada de dos, pero que el individuo C1.1 ha
empezado a desvincularse de la bandada debido a que el carnívoro rojo C2.0 pretende
darle caza. Además, en las gráficas de velocidades y aceleraciones se distingue como la
celeridad de ambas partículas (en color azul) tiende a emparejarse permaneciendo en
manada, al igual que las aceleraciones de alineación (negro), cohesión (verde) y
separación (rojo). Se aprecia como en torno a las 2.3udt el elemento verde C1.0 avista
al negro H2.0, por lo que se producen las aceleraciones de seguimiento (marrón) y
aproximación (naranja). Sobre las 2.5udt , C2.0 pone su objetivo en C1.1, por lo que
este último inicia una acción evasiva (rosa), cosa que también realiza C1.0 cuando se
percata de la situación a las 3.0udt .
Vemos también que el orden de magnitud de las velocidades y aceleraciones de
cohesión y separación gira en torno a las decenas, mientras que para las aceleraciones
de alineación, evasión, seguimiento y aproximación está rondando las centenas. Esto
indica varias cosas.
Primero, que de las tres reglas de agrupación de una manada, la predominante es la de
alineación, debiendo estar las otras dos en el mismo orden de magnitud para
mantener a los individuos del grupo a la distancia adecuada, ni demasiado juntos ni
tan dispersos.
87
Por otra parte, para las otras tres fuerzas complementarias a las de formación de una
manada, vemos que la de mayor valor es la que rige el comportamiento animal, al grito
de “sálvese quien pueda”, esto es, la aceleración de evasión. Las otras dos
(seguimiento y aproximación), inferiores a la de alineación pero con actuación
conjunta a la hora de capturar presas, tienen el valor justo para que, en la medida de
lo posible, hagan compatible la cacería con el mantenimiento unido de la manada, sin
que se disgregue tan fácilmente la misma. Es por ello que hemos escogido los pesos
que vienen por defecto en los paneles adicionales que emergen si pinchamos sobre
Pesos H y Pesos C en la simulación.
Caso 2. Equilibrio velocidad-ángulo de giro en poblaciones
Haremos ahora otro estudio donde pondremos en liza al máximo número de
ejemplares de las cuatro especies animales, viendo su evolución a lo largo del tiempo.
Consideraremos, para balancear las tornas, que si una especie tiene la facultad de
adquirir mayor velocidad punta, su capacidad de giro se verá reducida en
consecuencia.
En la figura 4.17 se aprecia el estado de la simulación 0.5udt después de haber
arrasado los carnívoros toda la población herbívora.
88
Figura 4.17. Mapa actual del sistema.
En la zona derecha de la imagen se ve que los carnívoros del primer tipo (C1) han
capturado cuatro presas de herbívoros tipo uno (H1) y cinco de la clase H2. Mientras
que los carnívoros tipo dos (C2) han hecho lo propio con seis H1 y cinco H2. Debido al
carácter aleatorio de la simulación, cada vez que realicemos una ejecución de la misma
con diez ejemplares de cada especie animal siempre habrá alguna variación. Pero se
puede sacar como resultado que, por lo general, el número de presas H1 y H2 de cada
carnívoro será en principio parecido, debido a que hemos considerado que el carnívoro
C2 tendrá la ventaja de adquirir una velocidad punta ligeramente mayor que C1,
aunque ello implicará una capacidad de maniobra algo menor (menor ángulo de giro),
tal como se aprecia en el panel de mando de la figura. Esta situación también se ha
tenido en mente para configurar la velocidad y el ángulo de giro de los herbívoros,
teniendo H1 menor velocidad pero mayor capacidad de giro que H2, ligeramente, por
lo que tampoco debería haber, en principio, mucha diferencia en el estudio
demográfico de ambos a lo largo de varias ejecuciones. No obstante, habrá que tener
en cuenta siempre el azar en estos casos.
A continuación, se muestra la evolución de la población de individuos en el tiempo
(figura 4.18).
89
Figura 4.18. Gráficas del sistema.
Como se puede ver en la parte superior izquierda, las capturas afloran rápidamente al
haber de inicio tantos elementos en el mapa, haciendo disminuir el número de
herbívoros tipo uno y dos en el intervalo 4.0 6.0udt− de manera calcada. Tras un
parón de 2.0udt la población H1 empiezan a descender en picado a las 8.0udt hasta
tomar valor cero alrededor de las 13.0udt . En cuanto a H2, las defunciones vuelven a
aparecer a las 13.0udt , dejando únicamente un superviviente, que será devorado a las
21.0udt , aproximadamente. En las dos gráficas de la parte derecha de la figura se
observa como aparecen picos de aceleración para C1 y C2 (seguimiento y
aproximación, sobre todo) cuando se producen las capturas. Mientras que en la parte
inferior izquierda tenemos las trayectorias seguidas por C1 y C2 a lo largo de la
simulación, distinguiéndose cómo se han ido formando las manadas y los saltos
debidos a desbordamientos en los lados del mapa (líneas horizontales y verticales).
Caso 3. Desequilibrio velocidad-ángulo de giro en poblaciones
En esta ocasión, modificaremos la regla que tenemos configurada por defecto en
nuestro programa, haciendo que se incumpla la ley de “a mayor velocidad, menor
ángulo de giro” para ver qué resulta.
90
La figura 4.19 ilustra el aspecto de la simulación tras haber quedado únicamente las
especies carnívoras sobre la superficie.
Figura 4.19. Mapa actual del sistema.
Podemos observar en el panel de mando que H2 tiene mayor velocidad y ángulo de
giro que H1, y que lo mismo sucede para C2 y C1. Esto dará como resultado en
términos generales (no olvidemos la aleatoriedad de la simulación) que la especie C2
capturará mayor número de presas que C1, mientras que la especie H2 será más difícil
de capturar que H1.
A continuación, se muestra la evolución temporal de los elementos implicados (figura
4.20).
91
Figura 4.20. Gráficas del sistema.
Podemos ver nuevamente los picos producidos por las aceleraciones cuando se
producen las capturas, pero lo más interesante es que la traza de población de H2
aparece desplazada más a la derecha que la de H1, lo que indica que es más difícil
atrapar a un ejemplar herbívoro tipo dos.
De igual modo, la parte derecha del panel de control de la figura 4.19 nos confirma que
los carnívoros del segundo tipo han cazado un total de quince presas (siete H1 y ocho
H2), por las cinco del primer tipo (tres H1 y dos H2), demostrando así que la especie C2
es la mejor cazadora.
4.3. Otras consideraciones
Antes de concluir el estudio del comportamiento de las manadas, nos disponemos a
mostrar algunos casos singulares.
92
Efecto de la variación de los pesos en las aceleraciones
Procedemos a valorar lo que sucede si alteramos la configuración por defecto de los
parámetros que gobiernan las distintas fuerzas que se ejercen en nuestra simulación.
De este modo, un aumento excesivo en los pesos de cohesión hará que los individuos
se congreguen en torno al centro del grupo, ya que la acción de separación no será lo
suficientemente grande para contrarrestar este efecto (figura 4.21).
Figura 4.21. Aumento de la fuerza de cohesión en la bandada.
Vemos que al subir el parámetro cohw de 0.5 a 8.0412 los diez ejemplares verdes
tienden hacia el centro del enjambre.
Por el contrario, si incrementamos los pesos de separación, esto hará que el sistema se
vuelva más “oscilante”, al alejarse bruscamente las partículas que se encuentran más
juntas.
Mientras que si disminuimos la aceleración de alineación, los elementos del sistema
irán “a la deriva”, moviéndose de un lado a otro, manteniendo unida la bandada
únicamente por la actuación de la fuerza de cohesión.
93
En cuanto a las acciones conjuntas de seguimiento y aproximación, y también a la
acción de evasión, un aumento en ellas provocará una mejor respuesta a la
persecución de presas y evitación de obstáculos y predadores, respectivamente.
Agrupación de manadas de distinta especie en una única
Hay veces en la naturaleza en las que dos clases animales conviven en armonía,
pudiéndose desplazar conjuntamente a lo largo del terreno. Para tener en cuenta este
asunto, precisamos en el panel de mando de la simulación de los selectores Agr H1/H2
y Agr C1/C2, si lo que deseamos es reunir a los herbívoros o a los carnívoros,
correspondientemente. Para que esto pueda llevarse a cabo adecuadamente, ambas
especies deben tener intervalos de velocidades y capacidades de giro similares, ya que
si no habría complicaciones para reflejar el comportamiento de las mismas como “gran
manada”. Las dos figuras siguientes ilustran esta conducta para unas velocidades
dispares, primero, y para celeridades semejantes, después.
Figura 4.22. Única gran manada irrealizable debido al desajuste de velocidades en
ambas especies.
94
Figura 4.23. Formación de la gran manada gracias a la adecuada sintonización de las
velocidades de ambas especies.
Se aprecia en la parte derecha del panel de mando de ambas imágenes que una
correcta elección de velocidades y ángulos de giro en los carnívoros C1 y C2 hace
posible que se origine la manada conjunta.
Rangos de detección y separación diferentes según la especie
Analizaremos ahora la cuestión de que una clase animal tenga distinta área de visión
que otra. Veremos en concreto el caso de que los herbívoros dupliquen el rango de
detección de los carnívoros, es decir, que adquiera dicho rango el valor 200 , por 100
de sus predadores.
Ejecutando la simulación con el resto de parámetros por defecto y con el máximo
número de elementos de las cuatro especies animales implicadas (10 ), pudo verse que
al principio los herbívoros seguían cayendo rápidamente debido a la que la dispersión
inicial de los carnívoros en el mapa y la gran cantidad de individuos sobre este hacían
que la ventaja de visión de los vegetarianos se viera contrarrestada por el
acorralamiento al que se veían sometidos. Pero a medida que iban quedando menos
ejemplares de H1 y H2, junto con que C1 y C2 iban constituyéndose en manadas, los
95
primeros eran capaces de anticiparse a los movimientos de sus predadores, evitando
con gran éxito ser detectados por los mismos y aumentando así considerablemente el
tiempo transcurrido hasta que la población de herbívoros se hiciera cero.
Las figuras 4.24 y 4.25 muestran este estudio particular.
Figura 4.24. Mapa actual del sistema.
96
Figura 4.25. Gráficas del sistema.
Como se aprecia en la primera figura, los dos ejemplares negros gozan de mayor radio
de observación que los carnívoros verdes y rojos, haciendo esto que esquiven
eficazmente a los predadores sin ser detectados por los mismos, como indica la
segunda figura, donde distinguimos los picos de aceleración de evasión (en rosa) y los
cambios de trayectorias en el espacio de fases al toparse con C1 y C2, manteniéndose a
la vez unidos merced a las fuerzas de alineación (negro), cohesión (verde) y separación
(rojo).
Por último, comentar que, aunque no se ha considerado en la ejecución de esta
simulación, un aumento del radio de separación conllevaría a una mayor facilidad de
segregación de la manada en sí, lo que sería bueno o no en función del apetito
(número de piezas finito o infinito) y el número de carnívoros implicados. En definitiva,
el poder de la manada en la naturaleza es indispensable para muchas especies. No
obstante, siempre encontramos otras que han evolucionado para adaptarse a la vida
en solitario.
97
Piezas finitas en depredadores
A continuación vamos a investigar lo que sucede cuando el número de presas que
puede capturar un carnívoro es limitado. Veremos particularmente esta situación para
un número de piezas igual a la unidad, lo que implica que un predador será retirado
del mapa al atrapar un elemento.
Las figuras 4.26 y 4.27 representan este caso.
Figura 4.26. Mapa actual del sistema.
98
Figura 4.27. Gráficas del sistema.
Se aprecia que al limitar el apetito de los carnívoros puede simularse el hecho de la
protección que conlleva convivir en manada, ya que así algunos individuos del rebaño
se “sacrificarán” por la subsistencia de este, dando lugar a que sobrevivan más
congéneres ante los ataques predadores. Todo esto se traduce en un aumento del
tiempo transcurrido hasta que las poblaciones de los herbívoros desaparezcan, como
se distingue en ambas imágenes, acrecentado también por la reducción paulatina de la
población de carnívoros a medida que van retirándose del mapa.
Incluyendo obstáculos y plantas
Otra cuestión a citar es el análisis del comportamiento de la manada en presencia de
obstáculos y vegetales en la simulación.
Veremos la influencia de la velocidad y el ángulo de giro en cuanto a la destreza para
esquivar obstáculos. Para ello nos apoyaremos en los vegetales, haciendo que el
enjambre se dirija en dirección perpendicular a una línea o hilera de obstáculos para
ver su reacción, siendo retirados dichos alimentos antes de llegar a la hilera para que
no influyan en los resultados obtenidos.
99
De esta guisa, las figuras 4.28 y 4.29 muestran la pericia de los individuos rojos
sorteando obstáculos o baches para un ángulo de giro máximo de 30º .
Figura 4.28. Mapa actual del sistema para un ángulo máximo de giro de 30º .
100
Figura 4.29. Gráficas del sistema para un ángulo máximo de giro de 30º .
Se distingue que la bandada ha conseguido salvar la columna de baches cambiando la
dirección del grupo. En la parte inferior derecha de la segunda imagen se visualizan las
aceleraciones iniciales debidas al seguimiento y aproximación hacia un vegetal usado a
modo de guía, siendo este retirado unas 2udt antes de llegar a los obstáculos para no
intervenir en los resultados.
Si ahora disminuimos el ángulo de giro a un valor de 5º , vemos que se presenta la
situación de las figuras 4.30 y 4.31.
101
Figura 4.30. Mapa del sistema en el instante de colisión con obstáculos para un ángulo
máximo de giro de 5º .
Figura 4.31. Gráficas del sistema para un ángulo máximo de giro de 5º .
102
Vemos que al ser la capacidad de giro tan pequeña (aparte de tener ya una velocidad
grande), a la manada no le da tiempo de reaccionar de la forma vista anteriormente e
incluso algunos ejemplares “atraviesan” literalmente los obstáculos.
Por tanto, el ángulo de giro y la velocidad, junto con el valor de los pesos en la
aceleración de evasión, como vimos previamente, serán determinantes a la hora de
salvar los posibles baches que puedan encontrarse las partículas por el camino.
Únicamente mencionar que ocurrirá lo mismo (cambiando, obviamente, la aceleración
de evasión por la actuación conjunta de las aceleraciones de seguimiento y
aproximación) si en lugar de una fila de obstáculos consideramos una disposición de
plantas en zigzag preparadas para ser ingeridas por los individuos: la persecución será
tanto mejor cuanto mayor sea el ángulo de giro y menor sea la velocidad de las
partículas, además de que los pesos de ambas aceleraciones sean lo suficientemente
significativos.
Valoración final
Hemos estudiado las principales normas que gobiernan la formación de una bandada y
las interacciones con su entorno, abordando con más profundidad las situaciones más
relevantes que pueden darse y haciéndolo del modo más fiel posible a la realidad
(considerando que una mayor velocidad implica un menor ángulo de giro), aunque, al
tratarse de una simulación, también se ha podido analizar el caso extremo de máxima
ventaja, obteniéndose resultados satisfactorios.
Por otra parte, al disponer de tantos parámetros esperando ser modificados se pueden
realizar infinidad de simulaciones, dejando al usuario que pueda investigar lo que
pasaría con la variación de cualquiera de ellos, que obviamente será lo que dictaminen
las ecuaciones del modelo.
De este modo, podríamos hacer uso de vegetales u obstáculos para guiar o impedir el
paso a los elementos de una especie, agrupar las dos clases de herbívoros en una única
manada (ídem para los carnívoros), que cada carnívoro se alimentase de sólo un tipo
de herbívoro en lugar de dos (configuración por defecto), ampliar el rango de
detección de los carnívoros con el fin de localizar a sus presas antes de que estas
emprendan la huida (o hacer lo propio con los herbívoros para que huyan antes de ser
descubiertos por sus predadores), limitar el número de piezas que puede ingerir un
predador (por defecto infinito), hacer que las cuatro especies animales se ignoren
entre ellas con el fin de estudiar el comportamiento de cada tipo por separado, etc.
103
Por consiguiente, finalizamos la sección ratificando los datos obtenidos en las distintas
simulaciones de este capítulo, invitando al lector a que se familiarice con el uso del
programa e indague por su cuenta las diversas posibilidades que este ofrece.
104
CAPÍTULO 5: MOVIMIENTO MIGRATORIO DE
HERBÍVOROS
Luego de estudiar en profundidad el comportamiento de un enjambre o manada de
partículas, desde su formación hasta las interacciones con su entorno, pasamos ahora,
apoyándonos en lo que ya sabemos sobre este tema, a analizar una situación que los
que son amantes de la naturaleza habrán podido ver alguna vez en algún documental
de la vida salvaje: la migración anual de herbívoros entre las reservas del Serengeti (en
Tanzania) y Masai Mara (Kenia) en busca de mejores pastos.
Este fenómeno comprende los trayectos de ida y vuelta a cada reserva, por lo que
también tendremos esto en mente a la hora de obtener datos estadísticos de las
poblaciones herbívoras involucradas.
Consideraremos que los herbívoros implicados en la migración son las cebras y los ñus.
Estos deberán atravesar regiones donde moran diversos tipos de predadores, de los
cuales sólo dos serán incluidos en nuestra aplicación: leones y cocodrilos. Los primeros
estarán esperando a sus potenciales víctimas en las llanuras del Serengeti (Serengueti
en castellano), mientras que los segundos harán lo propio en el curso del río Mara, que
sirve de frontera entre ambos países y reservas.
En la figura 5.1 se muestra el recorrido de la gran migración [16], indicando en qué
lugar se encuentran los herbívoros a lo largo de las diversas fases que lo conforman.
105
Figura 5.1. Movimiento migratorio anual de los herbívoros.
En nuestro caso, intentaremos reproducir lo más fielmente posible la conducta
migratoria de los herbívoros, teniendo en cuenta el movimiento aleatorio de estos en
manada.
El aspecto gráfico de nuestro programa será el que indica la figura 5.2.
106
Figura 5.2. Panel de control de la simulación.
Se observa que el mapa ha sido dividido en varias partes:
Reserva Serengeti: zona donde se hallan inicialmente los herbívoros (cebras y ñus). Se
ha considerado que en esta región los individuos vegetarianos se encuentran a salvo
de los ataques predadores, con el fin de hacer un estudio estadístico de las distancias
recorridas en los trayectos de ida y vuelta de la migración.
Llanuras Serengeti: parte del mapa donde habitan los leones. Tales carnívoros no
podrán salir de este recinto, debiendo realizar sus capturas en dicha planicie.
Río Mara: morada de los cocodrilos. Al igual que sucede con los leones en las sabanas,
estos reptiles tampoco abandonarán nunca el río, debiendo atrapar aquí a sus presas.
Reserva Masai Mara: primer destino de los herbívoros (cebras y ñus). En este territorio
tampoco podrán ser atacados por los carnívoros, como en la otra reserva.
Línea Destino de la Reserva: trazo dentro de las respectivas reservas a modo de “línea
de meta” para analizar los resultados de los distintos viajes de la migración.
Por otra parte, también podemos distinguir en la figura 5.2 el enorme parecido del
panel de mando con el de la aplicación de control de manadas (figura 4.4). Únicamente
se han suprimido los botones que no son necesarios ahora debido a que los carnívoros
se encuentran cada uno en zonas diferentes del mapa y sin poder salir de ahí. Sin
107
embargo, se ha añadido un botón (el selector Ver Migr) que mostrará una ventana de
diálogo adicional con los datos estadísticos de los herbívoros (figura 5.3).
Figura 5.3. Ventana de diálogo de la migración.
En este panel complementario veremos los resultados de los herbívoros tipo uno
(azules, ñus) y tipo dos (negros, cebras) en los caminos de marcha y regreso de su
éxodo, mostrando los mejores y peores tiempos, velocidades y distancias, tanto
parciales como totales, así como el número de los que han llegado a su destino según
su especie.
Incluso dispondremos de botones adicionales para el control de la migración:
Sere>Mara: usado para cambiar el trayecto de ida a vuelta y viceversa. Sólo podrá
activarse cuando no haya ningún ejemplar vegetariano en camino, esto es, todos se
encuentren en su lugar de destino o no haya ninguno en el mapa.
Haz Activo: si queremos que los herbívoros partan con un ángulo dentro de un haz
determinado orientado hacia la reserva destino.
Ver Mapas: para indicar el nombre de cada territorio del plano.
Igual Salida: si deseamos que todos los herbívoros emprendan su marcha hacia la línea
destino de la reserva opuesta desde la línea destino de la reserva donde se hallan, o si
por el contrario queremos que lo hagan desde cualquier parte de la misma.
Init Estad: para inicializar a cero los datos de los tiempos, velocidades y distancias de
los herbívoros. Habrá que esperar a que estos se encuentren todos en su destino o no
haya ninguno en el mapa para hacerlo.
5.1. Obtención del modelo y la vista de la simulación
Las ecuaciones que gobiernan el modelo de la simulación son las empleadas en el
capítulo anterior para la optimización de enjambres de partículas, con ciertas
salvedades que procedemos a detallar a continuación. La misma situación ocurre para
la vista del programa.
108
De este modo, hemos impedido los desbordamientos a los lados del mapa,
estableciendo así un recinto cerrado, para imitar el comportamiento que pudiera darse
en la realidad, ya que los parques nacionales están por lo general cercados. Al hacer
esto, un individuo que esté en un lado del mapa no podrá ya influir en las
aceleraciones de otro que se encuentre en el lado opuesto, por lo que se hemos tenido
que modificar esto en el modelo, concretamente, en el método preparaacel de la
página CalculosAceleraciones. Por el mismo motivo, prescindiremos del método
calcularangos de la página DibujaRangos, puesto que al no haber desbordamiento no
necesitamos pintar las cuatro posibles circunferencias de detección y separación.
Además, hemos añadido a las matrices de individuos cuatro nuevos registros (que
serán usados en principio exclusivamente por los herbívoros): dos para llevar el tiempo
empleado por los vegetarianos en sus respectivos trayectos de ida y vuelta, y otros
tantos para almacenar la distancia recorrida en esos tramos.
Por otro lado, para realizar el resto de cambios a la aplicación anterior con objeto de
desembocar en la que ahora se trata, hemos añadido una nueva página de variables
llamada VariablesMigracion (figura 5.4).
Figura 5.4. Página adicional de variables usada en la migración.
Estas variables serán usadas tanto en el modelo como en la vista para poder simular
convenientemente el fenómeno de éxodo de los herbívoros.
109
De la misma forma, incluimos otra página de métodos propios, de nombre
MetodosMigracion, cuya imagen se muestra en la figura 5.5.
Figura 5.5. Página adicional de métodos propios usada en la migración.
Los métodos que incluye esta página son:
- acotarmapa: para mantener a los animales dentro de las diferentes regiones
del mapa sin que se produzca desbordamiento. Tendrá en cuenta que los
carnívoros (leones y cocodrilos) no podrán salir bajo ningún concepto de sus
respectivos territorios, y que los herbívoros irán pasando por las diversas zonas
del mapa a lo largo de ambas etapas migratorias sin permitírseles dar marcha
atrás.
- controlfronterasmapas: para decidir si un individuo puede o no atravesar el
límite de una zona del mapa con otra, en función de si este es herbívoro o
carnívoro, y de si se trata del trayecto de ida o vuelta (sólo en caso herbívoro).
- numerodestino: hace acopio de la cantidad de herbívoros de cada especie que
han llegado a su destino.
- anguloentrehaz: devuelve un ángulo entre un conjunto de valores y según el
tipo de destino. Usado por los herbívoros para emprender la partida migratoria
orientados hacia la meta.
110
- activarindividuo: para alentar a los herbívoros cuando se hallen todos en
destino a que pongan rumbo hacia su nueva etapa migratoria.
- reactivarmigracion: para dar comienzo a un nuevo curso de la migración.
- estadisticasmigracion: lleva la cuenta de las distancias, tiempos y velocidades
de los herbívoros en los caminos de ida, vuelta y total.
- inicializaestadmigr: evalúa a valor cero las distancias y tiempos (ida y vuelta)
únicamente de los herbívoros que ya están en destino.
Luego de haber comentado las modificaciones e inclusiones realizadas en los distintos
paneles del modelo (no se ha requerido panel de ligaduras), procedemos ahora con la
parte gráfica de la simulación.
Vista de la simulación
El árbol de elementos de la vista del programa es el que se visualiza en la figura 5.6.
Figura 5.6. Vista de la simulación de nuestra aplicación.
Vemos que la diferencia que presenta con respecto al árbol de elementos de la
aplicación anterior (figura 4.11) es que se ha incluido una nueva ventana de diálogo de
111
nombre DialogMigracion, cuyo contenido explicamos en la introducción de esta
sección (ver figura 5.3). Como mencionamos antes, se han deshabilitado los botones
del panel de control de manadas que no tienen uso ahora en la migración. Como no
hay ningún elemento novedoso que mostrar en la vista, pasamos directamente a
analizar la conducta de los herbívoros en el siguiente apartado, invitando como
siempre al lector “curioso” a que investigue cómo ha sido construida la simulación.
5.2. Análisis del fenómeno bajo estudio
Tras presentar los aspectos más relevantes del modelo y la vista de la gran migración y
las alteraciones realizadas con respecto a la aplicación del capítulo anterior, nos
disponemos a continuación a cotejar las diversas situaciones que este programa nos
brinda, sabiendo además que los análisis cosechados en el estudio de las interacciones
entre individuos de diversas bandadas del episodio previo siguen siendo igualmente
válidos ahora.
Antes de comenzar con las distintas pruebas, comentar que, exactamente de la misma
forma que para el caso de la optimización de enjambres de partículas, se ha optado
por hablar de unidades de tiempo (udt) y cuadros (□ ) para expresar las magnitudes del
tiempo y la distancia, correspondientemente. Así, la velocidad estará expresada en
/udt□ y la aceleración en 2/ udt□ . También hemos limitado a diez la cifra máxima de
elementos de cada clase para impedir que la simulación se ralentice si incluimos un
número mucho mayor (esto dependerá obviamente de la memoria del ordenador de
cada usuario). Además, todas las gráficas de este capítulo han sido elaboradas (de igual
modo que para el capítulo anterior) empleando el máximo valor de la variable TRAZA,
esto es, doscientos, con objeto de mostrar en pantalla y en la memoria del proyecto el
comportamiento del sistema durante un mayor intervalo de simulación. Es por ello que
en ocasiones algunas figuras de este capítulo podrían parecer difíciles de interpretar al
haber muchas trazas en tan poco espacio de pantalla. Pero ello no supone ningún
problema si sabemos que para una visualización con mayor detalle de las gráficas (una
especie de zoom) únicamente hay que disminuir el valor de dicha variable TRAZA en el
panel de mando. Incluso nos podría bastar con activar solamente el selector que hace
que se muestren o no las trazas de los individuos de cada especie (Ver H1, Ver H2, Ver
C1, Ver C2, según el caso), ya que en las figuras de este capítulo se han mostrado a la
vez los parámetros de todas las especies implicadas en lugar de visualizar sólo las de
una especie en concreto, ofreciendo así una mayor visión de conjunto. También
podríamos estirar las ventanas de diálogo de las gráficas correspondientes para ver
mejor la evolución. O, finalmente, efectuar cualquier combinación de todas estas
técnicas mencionadas. Por último, señalar que todos los valores límites de los
112
guarismos anteriores pueden ser alterados si el usuario dispone de la herramienta Ejs y
del archivo .xml de esta aplicación.
Caso 1. Estudio inicial con Haz Activo e Igual Salida habilitados
Poniendo en liza al máximo número de ejemplares de las cuatro especies animales,
veremos su evolución a lo largo del tiempo para analizar los resultados obtenidos. Con
los parámetros establecidos por defecto (salvo Igual Salida, el cual lo activamos para
que los herbívoros partan de la misma línea), tenemos en cuenta que si una especie
tiene la facultad de adquirir mayor velocidad punta, su capacidad de giro se verá
reducida en consecuencia. Además, hemos reducido a la mitad el rango de detección
de los carnívoros para dar mayor opción a sus presas de escapar (en el capítulo
anterior dejábamos por defecto igual todos los rangos, pero al estar el mapa acotado
ahora queremos compensar esta desventaja).
En las figuras 5.7 y 5.8 apreciamos el estado de la simulación después de haber llegado
los herbívoros a su primer destino.
Figura 5.7. Mapa actual del sistema tras el trayecto de ida de la migración.
113
Figura 5.8. Gráficas del sistema tras el trayecto de ida de la migración.
Vemos como de los diez ñus (H1) que partieron del Serengeti sólo cuatro han llegado
al Masai Mara, mientras que han hecho lo propio tres de las diez cebras iniciales (H2).
Este número tan bajo se debe a que al encontrarse los carnívoros tan dispersos al
principio, tienen más opciones de capturar a sus presas rodeándolas. Esto explica
también el incremento de la distancia recorrida por ambas especies, triplicando casi el
valor óptimo entre las líneas de destino de ambas reservas (900□ ).
Para comenzar recorrido de vuelta pinchamos sobre el selector Sere>Mara,
obteniendo a la postre lo reflejado por las figuras 5.9 y 5.10.
114
Figura 5.9. Mapa actual del sistema tras el trayecto de vuelta de la migración.
Figura 5.10. Gráficas del sistema tras el trayecto de vuelta de la migración.
115
Observamos como de los cuatro ñus (H1) que partieron del Masai Mara sólo dos han
llegado al Serengeti, mientras que las tres cebras (H2) que marcharon del Masai Mara
consiguieron llegar ilesas hasta su nuevo objetivo. Debemos el rotundo éxito de los
herbívoros en esta segunda etapa migratoria principalmente a que los carnívoros se
encuentran ya agrupados en manada, por lo que son más fácilmente detectables por
sus potenciales presas. De este modo, observamos que gracias a este hecho la
distancia recorrida por ambas clases vegetarianas se ha visto drásticamente reducida
(aumentando por ende la velocidad y disminuyendo el tiempo empleado respecto al
tramo de ida).
Caso 2. Aumentando el rango de detección en carnívoros
Nos disponemos a estudiar a continuación lo que sucede si aumentamos el radio de
alcance de los predadores. Concretamente, veremos el caso de que los carnívoros
posean el mismo rango de detección, el cual estaba en el primer caso reducido a la
mitad (como dicta la configuración por defecto).
En las figuras 5.11 y 5.12 apreciamos el estado de la simulación después de haber
llegado los herbívoros a su primer objetivo: el Masai Mara.
Figura 5.11. Mapa actual del sistema tras el trayecto de ida de la migración.
116
Figura 5.12. Gráficas del sistema tras el trayecto de ida de la migración.
En la ejecución de la simulación pudimos observar como las cebras (H2) fueron
detectadas por los leones (C2) antes de salir de la reserva del Serengeti, debido al
aumento del rango de detección en los carnívoros, por lo que no abandonaron la
reserva hasta estar fuera de peligro, habiéndose ya constituido las mismas en rebaño.
Vimos también como los leones acabaron con la práctica totalidad de ñus al entrar en
las sabanas del Serengeti, hecho que sirvió a las cebras para emprender exitosamente
la marcha hacia su destino.
Para el trayecto de regreso, obtuvimos lo que muestran las figuras 5.13 y 5.14.
117
Figura 5.13. Mapa actual del sistema tras el trayecto de vuelta de la migración.
Figura 5.14. Gráficas del sistema tras el trayecto de vuelta de la migración.
118
Distinguimos como el único ñu (H1) que partió del Masai Mara ha perecido en el
camino, mientras que de las nueve cebras (H2) que salieron del Masai Mara sólo dos
lograron llegar hasta el Serengeti. Esto se debe principalmente al aumento del radio de
alcance de los carnívoros, consiguiendo así detectar a sus presas con más facilidad que
en el caso anterior. Otra consecuencia de ello es el empeoramiento de las estadísticas
de los herbívoros en la trayectoria de vuelta con respecto al primer caso, viéndose
incrementados los tiempos y las distancias, con la consiguiente disminución de la
velocidad en este tramo.
Caso 3. Desequilibrio velocidad-ángulo de giro en poblaciones
Tras haber estudiados los dos primeros casos en los que las poblaciones cumplían la
ley de “a mayor velocidad, menor ángulo de giro”, establecida por defecto en la
simulación, vamos a analizar lo que sucede si hacemos caso omiso a esta norma.
De esta manera, con el panel de mando configurado de la misma forma que se
procedió en la sección previa de control de manadas (ver figura 4.19), salvo el rango de
detección para carnívoros que se ve reducido ahora como se comentó para compensar
la desventaja de recinto cerrado, vemos que H2 tiene mayor velocidad y ángulo de giro
que H1, y que lo mismo sucede para C2 y C1. Esto dará como resultado en términos
generales (sin olvidar la aleatoriedad de la simulación) que la especie C2 atrapará
mayor número de presas que C1, mientras que la especie H2 será más difícil de cazar
que H1.
Las figuras 5.15 y 5.16 ilustran el aspecto del sistema después de haber alcanzado los
herbívoros su destino.
119
Figura 5.15. Mapa actual del sistema tras el trayecto de ida de la migración.
Figura 5.16. Gráficas del sistema tras el trayecto de ida de la migración.
120
Luego de simularse la primera etapa migratoria, vimos que los carnívoros C2
capturaron a todos los H1 (diez) y a tres H2, mientras que los C1 atraparon otros tres
H2.
Para el recorrido de vuelta se obtuvo lo que indican las figuras 5.17 y 5.18.
Figura 5.17. Mapa actual del sistema tras el trayecto de vuelta de la migración.
121
Figura 5.18. Gráficas del sistema tras el trayecto de vuelta de la migración.
Se aprecia como los cuatro H2 que iniciaron su viaje hacia la reserva del Serengeti han
alcanzado su destino, y en tiempo récord, además.
Por tanto, concluimos que los carnívoros C2 resultaron ser, como anticipábamos,
mejores predadores que los C1, y que los herbívoros H2 son más difíciles de atrapar
que los H1.
5.3. Otras consideraciones
Antes de finalizar el estudio de la conducta migratoria en los herbívoros africanos, nos
disponemos a mostrar algunos casos particulares de la simulación.
Efecto de la variación en el ancho de haz de salida en herbívoros
Procedemos a valorar lo que sucede si alteramos el valor del ancho del haz de partida
de los herbívoros en la migración. Para que esto se aprecie y nada influya en los
resultados obtenidos, consideraremos que la población herbívora no es la máxima sino
la mitad, y no incluiremos predadores en la simulación.
122
Las figuras 5.19, 5.20, 5.21 y 5.22 muestran el comportamiento de los herbívoros
mediante un ancho de haz de salida de 180º , mientras que las figuras 5.23, 5.24, 5.25 y
5.26 hacen lo propio para un haz de salida ideal de 0º .
Figura 5.19. Mapa actual del sistema tras el trayecto de ida de la migración.
123
Figura 5.20. Gráficas del sistema tras el trayecto de ida de la migración.
Figura 5.21. Mapa actual del sistema tras el trayecto de vuelta de la migración.
124
Figura 5.22. Gráficas del sistema tras el trayecto de vuelta de la migración.
Figura 5.23. Mapa actual del sistema tras el trayecto de ida de la migración.
125
Figura 5.24. Gráficas del sistema tras el trayecto de ida de la migración.
Figura 5.25. Mapa actual del sistema tras el trayecto de vuelta de la migración.
126
Figura 5.26. Gráficas del sistema tras el trayecto de vuelta de la migración.
Comparando ambas ejecuciones del programa resulta que en principio un ancho de
haz menor implicará una orientación inicial más adecuada hacia el objetivo, por lo que
las distancias totales disminuirán. Aunque, debido al comportamiento altamente
aleatorio de la simulación (ya que siguen influyendo las aceleraciones debidas a la
agrupación de la propia manada y las de separación con la manada vecina), vemos que
es difícil predecir a priori lo que sucederá en sucesivas pruebas. Así, por ejemplo, se
observa que la distancia total (ida y vuelta) es inferior para el caso ideal de 0º , pero
también podemos apreciar que en algunos tramos de la migración la distancia en una
etapa ha sido menor para el caso de ancho de 180º , debido algunas veces a las
aceleraciones de agrupación de la manada, y en otras ocasiones al encuentro por el
camino con la manada vecina.
Valoración final
Mencionar primero que todo lo visto para la formación de un enjambre en el capítulo
anterior sigue siendo igualmente válido ahora, siendo siempre conscientes de las
modificaciones e inclusiones realizadas en el fenómeno migratorio.
127
Hemos analizado con detenimiento las situaciones más significativas de este episodio,
considerando los diversos casos que pueden darse (o dicho de otro modo, alterando
los parámetros de una especie como si de un salto evolutivo se tratase), obteniéndose
resultados satisfactorios.
Por otro lado, al disponer de tantas variables en el panel de mando se pueden realizar
infinidad de simulaciones, dejando al lector que pueda indagar lo que pasaría con el
cambio de cualquiera de ellas, que obviamente será lo que dictaminen las ecuaciones
que gobiernan el modelo.
Así, podríamos hacer uso de vegetales u obstáculos para guiar o impedir el paso a los
elementos de una especie, agrupar las dos clases de herbívoros en una única manada
para realizar a la par la migración (como ocurre en realidad), que cada carnívoro se
alimentase de sólo un tipo de herbívoro en lugar de dos (configuración por defecto),
limitar el número de piezas que puede ingerir un predador (por defecto infinito), hacer
que las cuatro clases animales se ignoren entre sí con el objetivo de examinar la
conducta de cada una por separado, etc.
Finalmente, acabamos este capítulo corroborando los resultados alcanzados en las
diversas simulaciones de la misma, invitando al usuario a que se familiarice con el uso
de la aplicación e investigue por su cuenta las diferentes alternativas que esta ofrece.
128
CAPÍTULO 6: CONCLUSIONES
Luego de trabajar durante largo tiempo con la herramienta Easy Java Simulations y
haber buscado diversos sistemas a implementar, hemos llegado a la conclusión de que
puede desarrollarse casi cualquier proceso físico que se nos ocurra, dentro de la
complejidad admisible para un entorno de programación, claro está.
Una vez que nos habituamos a la aplicación realizando primero simulaciones sencillas
para probar los distintos aspectos de la misma, sentimos que estábamos capacitados
para desarrollar sistemas más complejos. De este modo, fuimos aumentando poco a
poco la dificultad en la programación para hacer sistemas más elaborados,
apoyándonos para ello en el empleo de métodos propios a fin de evitar la redundancia
de código y estructurar mejor las tareas. Asimismo, se organizó debidamente el
programa agrupando variables y métodos en páginas según su uso, comentando
además las líneas de código más significativas para que el lector e incluso el propio
autor de la aplicación comprendieran su función más fácilmente.
Quizás Ejs no sea tan versátil como otros entornos de programación que incluyen
muchas funciones optimizadas, pero la cuestión es que la herramienta Easy Java
Simulations no ha sido desarrollada en principio para programadores expertos, sino
para usuarios con nociones básicas de programación que pretendan simular cualquier
sistema físico y estudiar su comportamiento, sin detenerse a analizar la eficiencia del
mismo en cuanto a tiempo de ejecución se refiere. A pesar de todo, dispone de la
opción de importar librerías Java para aquel analista que desee emplear sus propias
clases Java sin tener que implementarlas nuevamente en Ejs.
Además, presenta la ventaja de ahorrarnos en gran medida el diseño de la parte
gráfica de la simulación, hecho que es de agradecer para los programadores poco
duchos en estas lides.
Por otro lado, el gestor de ecuaciones diferenciales es bastante potente,
ofreciéndonos la posibilidad de poder configurarlo de distinta forma si se requieren
soluciones más precisas, según la complejidad del proceso.
Igualmente resulta muy útil que la propia herramienta genere, si así lo indicamos,
ejecutables de nuestra simulación, bien sea en modo applet de Java para cargarla
desde el navegador o mediante una aplicación Java independiente. De este modo, será
muy factible utilizar estos ejecutables con fines didácticos, dando a conocer nuestras
simulaciones colgándolas por internet o distribuyéndolas por sí mismas, sin la
necesidad de que el usuario final necesite conocer el funcionamiento de Ejs para poder
lanzar una simulación y observar sus resultados.
129
Otra característica ventajosa que presenta Ejs es que puede usarse conjuntamente con
Matlab y Simulink mediante una serie de interconexiones con el fin de beneficiarse de
lo mejor de cada una de estas herramientas. De esta manera, aprovechamos la
potencia de Matlab con la facilidad de uso de Ejs y su intuitiva forma de interacción
con el usuario. Para más información sobre ello, sólo tenemos que visitar la página
web del profesor Francisco Esquembre, autor del programa, mencionada en la
bibliografía en las últimas páginas de la memoria.
Decir también que lo que hemos visto en este proyecto acerca de Easy Java
Simulations no es el techo del programa, ya que incorpora por ejemplo la opción de
generar simulaciones en 3D, por lo que una inmediata mejora del proyecto sería la de
añadir un eje a nuestro plano y convertirlo en espacio, con objeto de visualizar
nuestros tres programas (laboratorio de control, gestión de manadas, migración de
herbívoros) en tres dimensiones.
Señalar que otras posibles incorporaciones adicionales al proyecto serían las de añadir
retardos y perturbaciones al sistema de depósitos del primer capítulo para que el
control en cascada sea rentable frente al simple; “implantar” una cámara 3D a cada
ejemplar en las últimas dos aplicaciones con el fin de estudiar su comportamiento
individual al verse reducida su área de visión de círculo a sector circular; poder hacer
un “zoom” sobre una determinada zona del mapa para contemplar con más detalle las
interacciones de las bandadas; animar con imágenes (aves, peces, insectos, cebras,
ñus, leones, cocodrilos, etc.) los individuos de los enjambres de partículas; considerar
que para la agrupación de dos especies en una única gran manada una tiende a
situarse en los extremos mientras que la otra lo hace en la zona central de la misma,
como sucede en la gran migración de cebras y ñus, donde las primeras son las que
dirigen el movimiento migratorio desde el exterior de la manada, aprovechando
además esta situación para huir rápidamente ante cualquier eventualidad, dejando a
los segundos -los cuales son mucho más numerosos- solos ante el inminente peligro;
incluir un tiempo de reposo en los carnívoros tras realizar una captura, ya que estos
necesitan un lapso para recuperarse de la persecución e ingerir su alimento; o
implementar la típica formación en V de las bandadas de pájaros.
Finalmente, reseñar que este proyecto podría resultar de especial interés como ayuda
en la docencia de asignaturas que impliquen sistemas de control de depósitos (capítulo
del sistema de control del nivel de un depósito) o múltiples sistemas interactuando
(capítulos de la optimización de enjambres de partículas y del movimiento migratorio
de herbívoros).
130
CAPÍTULO 7: BIBLIOGRAFÍA
7.1. Apuntes
[1] Gordillo Álvarez, F. y Gil Ortega Linares, M. (2001-2002). Teoría del control
automático. Tercer Curso Ingeniero de Telecomunicación. Sevilla: Escuela
Superior de Ingenieros. Universidad de Sevilla.
[2] Gordillo Álvarez, F. y López Martínez, M. (2003-2004). Control por
computador. Cuarto Curso Ingeniero de Telecomunicación. Sevilla: Escuela
Superior de Ingenieros. Universidad de Sevilla.
7.2. Manuales
[3] Esquembre, F. (2004). Creación de simulaciones interactivas en Java.
Madrid: Pearson Educación.
[4] Naughton, P. y Schildt, H. (1997). Java: manual de referencia. Madrid:
McGraw-Hill.
7.3. Páginas webs
[5] Esquembre, F. Easy Java Simulations. (www.um.es/fem/Ejs/).
[6] Oracle Corporation. Java. (www.java.com/es/).
[7] Franco, A. Física con ordenador. (www.sc.ehu.es/sbweb/fisica/default.htm).
[8] Pérez Cisneros, M.A. y Laubwald, E. Depósitos acoplados. México: Área de
Electrónica y Computación. Universidad de Guadalajara. (www.control-
systems-principles.co.uk/whitepapers/spanishwp/03CoupledTanksSP.pdf).
[9] Mejía, L.A., Monroy, M., Díaz, A., y Henao, E. Modelado y simulación del
control de velocidad de un motor hidráulico. Colombia: Universidad Tecnológica
de Pereira. (www.scribd.com/doc/6374356/hidraulica-simulacion).
[10] Marcos, M., Artaza, F., e Iriondo, N. Control cascada. Bilbao: Dpto. de
Ingeniería de Sistemas y Automática. ESI. Universidad del País Vasco.
131
(www.disa.bi.ehu.es/spanish/asignaturas/17212/T7%20Estructuras%20Avanza
das%20Cascada.pdf).
[11] Wikipedia. Control proporcional integral derivativo por realimentación.
(http://es.wikipedia.org/wiki/Proporcional_integral_derivativo).
[12] Wikipedia. Windup effect. (http://en.wikipedia.org/wiki/Integral_windup).
[13] Morilla García, F. Fundamentos de los controladores PID. Madrid:
Departamento de Informática y Automática. ETSI de Informática, UNED.
(http://www.dia.uned.es/~fmorilla/MaterialDidactico/El%20controlador%20PI
D.pdf).
[14] UNED. Laboratorio remoto. (http://lab.dia.uned.es/rlab/index.html).
[15] Wikipedia. Flocking. (http://en.wikipedia.org/wiki/Flocking_(behavior)).
[16] Wikipedia. The Great Migration. (www.wildwatch.com/great_migration).
132
top related