Proyectos para el curso de doctorado "Simulación de Sistemas Complejos"

Los proyectos se realizarán de forma individual. Es posible realizarlos en grupos de dos siempre que se implemente alguna de las sugerencias optativas. No es posible que dos grupos distintos trabajen en el mismo proyecto. Los proyectos se asignarán por orden de petición (mandar un mail a Juan.Lara@ii.uam.es).
Para todos los proyectos, se debe entregar documentación sobre cómo se modeló el problema, y comentarios sobre los diversos resultados de la simulación, así como el código fuente de los modelos y/o simuladores (si se implementaron). El formato de la documentación debe ser HTML, con links apropriados a los diversos ficheros con el código fuente.

1. Generación de código OOCSMP a partir de un editor de diagramas de bloques.

Para este proyecto, se proporcionará un editor de diagramas de bloques construido en el lenguaje Python. El editor consta de una interfaz gráfica en la que se pueden construir de forma gráfica los modelos de simulación. La siguiente figura muestra dicho editor.


Figura 1: El editor de diagramas de bloques

El editor dispone de opciones para grabar y cargar modelos. Se pide:

a) Extender este editor para que sea capaz de exportar modelos al lenguaje OOCSMP. Se debe tener en cuenta que OOCSMP reordena las ecuaciones de forma automática. Básicamente se debería generar una ecuación por cada bloque del modelo. La información de control de los modelos OOCSMP, tales como el intervalo elemental de tiempo, el tiempo final, el método de integración, etc., se podría añadir manualmente al modelo generado por el editor.

b) Comprobar que la generación de código OOCSMP funciona, modelando "el problema del círculo". Este problema consiste en resolver la ecuación d2x/dt2 = -x.  Con x(0) = 1 y dx/dt (0) = 0. Conviertan esta ecuación en un sistema de dos ecuaciones de primer grado y dibujen su modelo en el editor, generen código OOCSMP y añadan una gráfica de fase de x con respecto a dx/dt. El resultado debe ser un círculo. Discutan el resultado de modificar el intervalo elemental de tiempo.

Parte optativa:

c) Extender los bloques que proporciona el editor para incluir otros, tales como seno, coseno, limitador, etc.

d) Extender el editor para que detecte modelos inválidos, que contengan bucles cerrados. Un modelo es válido si todos sus bucles contienen al menos un bloque con memoria, tal como un integrador.

e) Extender el editor para que se pueda introducir la información de control del modelo, tal como el intervalo elemental de tiempo, el tiempo final, el método de integración, etc.

NOTA: El lenguage Python es un lenguaje  intuitivo, orientado a objetos y de muy alto nivel. Es muy adecuado para la construcción de prototipos, debido a su sencillez para construir interfaces de usuario. Es de libre disposición (se puede descargar aquí) y tiene versiones para Windows, Linux y McIntosh.

2. Validación de modelos usando distintos formalismos: El modelo predador-presa.

Los ecosistemas pueden ser modelados en su forma más simple mediante las ecuaciones de Volterra no lineales, propuestas por Vito Volterra (1860-1940).
Las ecuaciones son:
X' = -mX + nXY
Y' = pY - qXY
Donde X e Y representan las poblaciones del predador (X) y la presa (Y). Las 4 constantes m, n, p y q son positivas. Se supone que las presas tienen una fuente ilimitadad de comida. Esto es, en ausencia de predador su población (Y) aumentaría indefinidamente al paso indicado por la constante p. Esta constante puede ser interpretada como la tasa de nacimientos de las presas. En presencia del predador, la población Y se ve disminuida en función del número de encuentros (constante q).Esta constante puede ser interpretada como la tasa de mortandad de las presas en caso de un encuentro con un predador. En ausencia de presa, el número de predadores (X) disminuye en función de la constante m. Esta constante puede ser interpretada como la tasa de mortandad de los predadores. En presencia de presas, el número de predadores se ve incrementado proporcionalmente al número de encuentros (constante n). Esta constante se puede interpretar como el grado de aprovechamiento de un encuentro con una presa.

Para este ejercicio, se pide:

a) Calcular una situación de equilibrio cuando X = 10, Y = 50, m = 0.1 y p = 0.1

b) Modelar y simular el problema mediante dinámica de sistemas y/o mediante OOCSMP. Para el caso de dinámica de sistemas se puede usar una versión gratuita del programa VenSim.

c) Modelar el problema mediante un sistema de agentes y/o un autómata celular. Para este apartado es posible usar cualquier lenguaje de simulación o de propósito general. Se aconseja usar OOCSMP. Téngase en cuenta que en ambos casos ha de modelarse el movimiento de predadores y de presas. En el caso más sencillo modélese como un movimiento aleatorio. Téngase también en cuenta los parámetros m, n, p y q. Compárense los resultados con los del apartado b).

Parte optativa:

d) Una generalización de las ecuaciones de volterra para un número cualquiera de especies predadores, presas y especies intermedias puede encontrarse aquí (información adicional puede obtenerse también aquí). Extiendan el modelo del apartado c) y modelen situaciones con distinto número de predadores y presas comparando los resultados con las simulaciones de las ecuaciones en OOCSMP.

e) En el apartado c) modélese el problema como un sistema de agentes y un autómata celular. Compárense los resultados.

3. Validación de modelos usando distintos formalismos: El modelo de contagio de enfermedades infecciosas en una población.

En este ejercicio se pretende modelar los efectos de una epidemia de una enfermedad contagiosa en una población. Una persona sana puede contagiarse (pasando al estado Contagiado) la enfermedad con una cierta probabilidad, que depende de la virulencia de la enfermedad y de la probabilidad de contagio (pcontagio) en caso de un encuentro entre una persona sana y una enferma. La probabilidad de un encuentro (pencuentro) es función del número de enfermos y del número de personas sanas presentes en la población. Una persona en estado Contagiado puede desarrollar la enfermedad con una probabilidad pdesarrollo y entra en el estado Enfermo. Por otra parte una persona contagiada puede no desarrollar la enfermedad y pasar al estado Inmune. Una persona enferma o bien muere, con probabilidad pmuerte o bien se recupera y pasa al estado inmune. Una persona inmune no puede contagiarse. Nótese que muchas de estas probabilidades dependerán de la virulencia de la enfermedad. Tengan en cuenta que es necesario modelar también el incremento de personas sanas debido a los nacimientos. Los nacimientos pueden modelarse como proporcionales al número de personas sanas.

Se pide:

a) Modelen el estado por el que puede pasar una personas mediante un autómata.
b) Modelen y simulen el problema mediante dinámica de sistemas, se puede usar una versión gratuita del programa VenSim.
c) Modelen y simulen el problema mediante OOCSMP.
d) Comentar los resultados. Discútase el efecto del grado de virulencia y mortandad de la enfermedad.

Parte optativa:

e) Simulen el efecto de una vacunación en la población. Esto es, en cierto momento, un número de personas pasa del estado sano al estado inmune. Discutan su efecto. Discutan el efecto de vacunas periódicas en la población.

f) Modelen el problema anterior mediante un sistema de agentes y/o un autómata celular. Comparen y discutan los resultados. Para este apartado es posible usar cualquier lenguaje de simulación o de propósito general. Se aconseja usar OOCSMP. Téngase en cuenta que en ambos casos ha de modelarse el movimiento de las personas de la población. En el caso más sencillo modélese como un movimiento aleatorio. Estudiese el efecto de crear un foco de la enfermedad en una cierta zona de la población.

g) Generalizen el modelo para incluir más de un tipo de enfermedad y más de un tipo de vacuna.

4. Modelado de la construcción de Software.

Debido a que la construcción de Software es un proceso complejo, el modelado y la simulación son una herramienta muy útil en el análisis de la forma de mejorar el rendimiento.
En este proyecto se pretende modelar de forma simplificada el proceso de construcción de Software, en particular queremos ver el efecto de añadir nuevo personal a un proyecto. Pueden utilizar dinámica de sistemas (se puede usar una versión gratuita del programa VenSim.) o bien OOCSMP. Para modelar el problema se construirán progresivamente modelos cada vez más complejos, hasta llegar a la solución final. Para los dos modelos, mediremos el tiempo en días y el esfuerzo en personas-día.

Modelo 1)

Supongan que conocemos una medida del "tamaño" de los Requisitos de un proyecto en Puntos de Función. Modelaremos el grado en el que el Software está desarrollado como los Puntos de Función que quedan por implementar. Un equipo de desarrollo construye Software de acuerdo a un determinado ratio, que depende de:
    a) la productividad Nominal: Son los puntos de función que una persona puede implementar en un día de trabajo. Supóngase 0.1 Puntos de Función por persona-día.
    b) la cantidad de gente que hay trabajando. Supóngase que inicialmente hay 10 personas.
    c) la sobrecarga por comunicación que hay entre las personas trabajando. Se supone que entra cada persona hay un canal de comunicación y que esto resta eficiencia al trabajo que hacen. Modélese esta sobrecarga como Coverhead*n2 . Donde n es el número de peronas y Coverhead es una constante que para este caso pondremos como 0.06.
    El ratio de desarrollo de software se puede modelar como:  Productividad Nominal*(1-Sobrecarga_Comunicación/100)*N.
    Si los Puntos de función que hay que implementar son 500, ¿cuánto tiempo tardaremos en terminar el proyecto?. Encuentren el número de personas que hacen este tiempo mínimo. Tengan en cuenta que si el número de personas es muy alto, entonces el coste de comunicación prevalece sobre la productividad nominal.

Modelo 2)

Extiendan el modelo 1 para modelar la contratación de nuevo personal en cierto momento del desarrollo, así como la sobrecarga que produce en el personal experimentado el enseñar a este nuevo personal. Para ello, distinguiremos entre "Personal Experimentado" y "Personal nuevo". El nuevo personal tarda 20 días en obtener la productividad del personal experimentado. Se necesita un 25% del personal experimentado para enseñar a una persona nueva. Supongan que el personal experimentado produce 1.2 veces la productividad nominal, y que el personal nuevo produce a 0.8 la productividad nominal. Tengan en cuenta que para implementar este modelo se debe modificar el ratio de desarrollo de Software adecuadamente.

Supongan que llevamos 90 días de proyecto, y éste va retrasado, y que se está considerando añadir un cierto número de personas en el día 100 del desarrollo. ¿Cuántas personas añadirían?, discutan el efecto del nuevo personal en la productividad.

Parte Optativa)

a) Extiendan el modelo 2 para modelar algunas de las fases por las que pasa el desarrollo de software: Partiendo del tamaño de los requisitos en puntos de función, pasamos a la fase de diseño, y de la de diseño a la de implementación. Supongan además que no podemos empezar la fase implementación antes de tener el 75% de la fase de diseño terminada. Supongan también distintos equipos trabajando en el diseño y la implementación.

b) Extiendan el modelo anterior para reflejar los errores cometidos en la fase de diseño y en la de implementación. Supongan una determinada tasa de errores por punto de función. Modelen también el descubrimiento de errores, supongan una determinada tasa de descubrimiento de errores, de forma que habrá errores que pasen desapercibidos en la fase de diseño, y pasen a la fase de implementación. En la fase de implementación también pueden cometerse errores, y de la misma forma habrá errores que pasen desapercibidos.

5. Modelado de situaciones de emergencia en grupos numerosos de personas.

En este ejercicio se pretende modelar (mediante agentes o autómatas celulares) el comportamiento de un grupo de personas en una situación de emergencia (por ejemplo, una alarma de incendio, etc.) dentro de un edificio. El propósito es medir el tiempo que se tarda en desalojar un edificio, midiendo el número de personas heridas y muertas. El edificio se discretizará en casillas, en las que puede haber cero o más personas, o una pared, o una puerta.
Para ello, se modelará el comportamiento de cada persona en el edificio de la siguiente forma: En el caso más sencillo, modelen el edificio como compuesto de una sola habitación, con una puerta en cada una de las paredes. Creen las personas de forma aleatoria dentro de dicha habitación. Supongan que las puertas de tamaño dos casillas.

    Se pide:

a) Modelen el sistema mediante agentes o autómatas celulares. Para este apartado es posible usar cualquier lenguaje de simulación o de propósito general. Se aconseja usar OOCSMP.
b) Simulen y midan el tiempo medio de evacuación, así como la distribución de la gravedad de los heridos, y el número de muertos.
c) Midan el resultado de cambiar la ubicación de las puertas y su número. ¿Cuál es la situación óptima de 4 puertas en el caso de una habitación cuadrada?.

Parte Optativa:

d) Supongan que la emergencia se produjo debido a un incendio, y que el humo reduce la visión de las personas a un radio de 10 casillas. Comparen los resultados con los de visibilidad total, y experimenten con distintos grados de "espesor de humo".

e) Modelen que el edificio esté formado por varias habitaciones, de tal forma que hay puertas interiores y puertas que son salida del edificio.
 

6. Modelado del movimiento de la rueda trasera de una bicicleta.

Dado el movimiento de la rueda delantera de una bicicleta, simular el movimiento de la rueda trasera sobre un plano bidimensional.

Realizar el modelo en CSMP.