| Docencia | Autor |
Simulación
0. Bibliografía
1. Conceptos básicos de simulación
a. Definición de simulación
b. Tipos de simulación
c. Ventajas y desventajas
2. Simulación gráfica
http://phet.colorado.edu/web-pages/simulations-base_es.html
http://www.falstad.com/mathphysics.html
http://www.ambromley.co.uk/fizz.html
http://www.myphysicslab.com/
http://antwrp.gsfc.nasa.gov/htmltest/rjn_bht.html
http://www.homowebensis.com/bichos.html
http://www.ruf.rice.edu/~lane/stat_sim/ (distribuciones)
http://www.shodor.org/interactivate/activities/RabbitsAndWolves/?version=unknown&browser=Opera&vendor=unknown
http://www.sodaplay.com/
http://www.sc.ehu.es/sbweb/fisica/default.htm
3. Números aleatorios
a. Generación de números aleatorios (Java y generadores libres/comerciales)
b. Números aleatorios: pieza clave en la simulación (Generadores) *
c. Técnicas para generar números aleatorios *
d. Generación de números aleatorios (Problemas y RANDU) * .
e. Probando Generadores
f. Pruebas de uniformidad * . Test Chi Cuadrado
g. Prueba de uniformidad de Kolmogorov-Smirnov *
h. Pruebas de independencia (Poker y Corrida) *
i. Generador Mersenne Twister (Visual C++)
j. Pruebas automatizadas (en Excel) de números aleatorios
4. Variables aleatorias
Variable aleatoria (introducción)
Distribuciones continuas
a. Transformada inversa (Ejercicio en clase)
b. Distribución Normal
c. Distribución Triangular
d. Distribución Exponencial
e. Distribución Uniforme
f. Distribución Beta y Weibull
Actividad 1: En Excel cree varias hojas. En cada hoja irá una distribución distinta (normal, triangular, exponencial, uniforme, geométrica). Genere en la columna A una serie de números aleatorios utilizando la función Aleatorio() de Excel, en la columna B estará el resultado dado por la variable aleatoria. Use algunas casillas para poder modificar los parámetros de las variables aleatorias y genere un gráfico representativo de cada distribución (Nota: use como valores X los números aleatorios y como valores Y los generados por la variable aleatoria, observe la forma en que se comporta la gráfica). Genere la línea de tendencia que mas se acerque a ese comportamiento.
Distribuciones discretas
a. Transformada inversa
b. Distribución de Bernoulli
c. Distribución Poisson
Actividad 2: En Excel desarrolle el ejemplo planteado en este documento sobre Distribución empírica (Una distribución discreta) Mas distribuciones en: http://en.wikipedia.org/wiki/Probability_distribution
5. Método de Monte Carlo y las Vegas
a. Exposición http://en.wikipedia.org/wiki/Monte_Carlo_method
b. Definición e Historia
c. Cálculo de áreas bajo una curva *
d. Consultas diarias
e. Cálculo de PI
f. Problema del viajero
g. Decisión sobre proyectos
h. Transporte de mercancía
6. Simulación de colas o Filas de Espera (9-10)
a. Simulación de colas, ejemplo en java
b. Ejemplo de simulación de colas
c. Ejemplo en Excel (automático)
d. Ejemplo de modelación (semáforos), ejemplo en java
e. Uso de hilos en Java como una manera de simular eventos.
7. Simulación de Inventarios (10-11)
a. Definiciones y terminología usada, Ejemplo
b. Ejercicio de inventarios y que tener en cuenta en el desarrollo de una simulación de inventarios.
8. Como simular (10-13)
9. Algoritmos Genéticos en líneas de tendencia (14-16)
a. Correlaciones. Parte 1, Parte 2
b. Ejemplo: PPT, PPTX, PDF, Lectura, Excel
c. Simulación: Fuentes y Manual
d. Autómatas celulares (comportamiento emergente)
Anexos
1. Descargar ejemplo de girar figuras (gire la figura en 360 grados y chequee cuando se sale del marco)
2. Descargar algoritmo de hacer líneas de Bresenham
Ejercicio 1 (Valor 30%). En Parejas. (el día de la presentación del examen parcial, su grupo expone la aplicación).
Punto 1 (2 puntos): Implemente su propio generador de números aleatorios en un lenguaje de programación (sea Java, PHP, Visual Basic .NET o C#, no en Excel o paquetes de simulación o paquetes matemáticos con lenguaje inmerso o componentes que ya traen APIs de simulación), realice las pruebas de promedio, varianza, prueba de uniformidad (10 rangos), prueba de uniformidad de Kolmogorov-Smirnov (10 rangos), prueba de independencia póker (use 3 decimales) y corrida. Su software debe concluir que tan bueno es su generador de números aleatorios.
Punto 2 (3 puntos): Implemente en un lenguaje de programación (sea Java, PHP, Visual Basic .NET o C#, no en Excel o paquetes de simulación o paquetes matemáticos con lenguaje inmerso o componentes que ya traen APIs de simulación), usando el generador Mersenne Twister para los números aleatorios, las siguientes distribuciones: normal, exponencial y uniforme. El programa debe permitir el ingreso de los parámetros para estas distribuciones y generar el gráfico correspondiente (use mas de 500 puntos para hacerlo significativo).
Se califica:
1. Facilidad de uso del programa:
a. No importa si es en gráfico o texto, pero debe ser fácil de usar (punto 1)
b. Ejecución (debe haber un manual en PDF de como ejecutar el programa).
c. El profesor actuará como usuario final no como experto desarrollador de software (solo tengo el JDK 1.5 instalado, no Eclipse).
d. Si utiliza java en ambiente gráfico entregue el programa como .jar
e. Buena ortografía y gramática
f. Fácilmente identificables los valores de entrada y salida.
g. Ejecuta correctamente en una resolución de 1024*768 o menor (no mayor).
2. Estándares de programación
a. Documentación interna del código fuente.
b. Estándares para nombrar las variables, métodos, objetos y clases.
| Facilidad instalar. Manual de uso, Presentación (ortografía y gramática) | Originalidad del generador | Datos de Entrada | Promedio | Varianza | Prueba Uniformidad | Prueba de uniformidad de Kolmogorov-Smirnov | Prueba de independencia póker | Prueba de independencia corrida | Conclusiones automatizadas |
| Implementación Mersenne Twister | Distribución Normal (Entrada, Proceso, Gráfico) | Distribución Uniforme (Entrada, Proceso, Gráfico) | Distribución Exponencial (Entrada, Proceso, Gráfico) |
Ejercicio 2 (Valor 30%). En Parejas.
Objetivo: Utilizar el Algoritmo de las Vegas para solucionar el juego Sudoku
Al usuario se le presenta un típico juego de sudoku (un tablero de 9*9), y se le da la posibilidad de colocar números en las diferentes celdas (respetando las reglas del juego), una vez que el usuario ha colocado los números procede a oprimir un botón y el software con un proceso estocástico genera una solución para esa solución o concluir que definitivamente no hay solución.
Requerimientos:
1. El software debe permitir al
usuario ingresar cualquier cantidad de números al tablero del Sudoku (0 a N)
2. El software valida que lo que hace el usuario en 1. sea correcto (no viole
las reglas)
3. El software debe usar un proceso estocástico (no determinístico, ni
inteligencia artificial determinística) para generar una posible solución del
tablero o simplemente muestra que no es posible solucionarlo.
4. Puede hacerlo en cualquier lenguaje de programación (por ejemplo, Java, C#,
VB .NET)
5. El software debe ser fácil de instalar y usar. Debe haber un manual de
instalación/uso.
6. Por supuesto, debe ser gráfico.
Ejemplos de código en C++:
A. Sin admitir el fracaso
B. Validando solo verticales y
horizontales. Admite el fracaso.
C. Validando todo el sudoku. Admite el
fracaso.
Ejercicio 3 (Valor 40%). En Parejas.
En un edificio de N pisos hay M ascensores (donde N >>> M, es decir, hay muchos mas pisos que ascensores), y los ascensores solo tienen capacidad para una sola persona. Los usuarios ubicados en algún piso llaman al ascensor, esperan a que llegue y cuando llega, una persona ingresa al ascensor y dentro oprime a que piso quiere dirigirse. Hay una agria discusión entre dos grupos de ingenieros porque cada uno dice que la forma en que operan los ascensores está mal:
Grupo 1
Alega que si la persona oprime el botón de llamado, el ascensor mas cercano
vacío debe dirigirse hasta ese piso, recibir la persona y darle el viaje en
exclusiva a esa persona hasta el piso requerido (sin detenerse en ningún otro
piso).
Grupo 2
Alega que los ascensores deben asignarse por pisos, por ejemplo el primer,
segundo, tercer y cuarto piso tienen en exclusiva el ascensor A; el quinto y
sexto piso tienen en exclusiva el ascensor B; el octavo piso tiene en exclusiva
el ascensor C; y así sucesivamente. Significa que si una persona está por
ejemplo en el segundo piso, al oprimir el botón debe esperar a que llegue el
ascensor A que debe estar vacío, y una vez que el ascensor llega, la persona
puede escoger a que piso que quiere ir en exclusiva.
La discusión se da por los costos:
a. El costo por segundo del empleado que trabaja en el piso 1 es diferente al
costo por segundo del empleado que trabaja en el piso 2 y así sucesivamente.
b. Los empleados de cada piso hacen cola esperando el ascensor en cada piso.
Cada piso tiene una diferente tasa de llegada a la fila (use distribución
exponencial).
c. Cada persona que aborda el ascensor puede seleccionar cualquier piso de
destino (excepto el mismo piso) con la misma probabilidad (use distribución
uniforme).
d. El ascensor tarda T1 segundos en pasar de un piso a otro.
e. El ascensor tarda T2 segundos en mantener abierta la puerta.
El costo en que se fijan es el tiempo que tarda el empleado desde que empieza hacer fila, espera el ascensor vacío, hace uso de este y llega al piso destino.
Hacer un software en el lenguaje de programación que desee (sea Java, PHP, Visual Basic .NET o C#, no en Excel o paquetes de simulación o paquetes matemáticos con lenguaje inmerso o componentes que ya traen APIs de simulación), en el cual pregunte:
1. Cantidad de pisos;
2. Tasa de llegada a pedir el ascensor por piso;
3. Costo por segundo de los empleados de cada piso;
4. Cantidad de ascensores;
5. Tiempo T1 y T2; y,
6. Cantidad de segundos a simular.
Para la segunda opción:
1. Debe su software permitir asignar determinado ascensor a determinados pisos.
El software simula las dos opciones, emite un informe comparativo que muestre los costos totales y diga que opción es la de menor costo.
Calificaciones (Primer y segundo 30%)
Ejercicio 3 alternativo (Valor 40%). En Parejas.
Comportamiento emergente usando autómatas celulares:
1. Tamaño del tablero, mínimo de
30*30
2. Mínimo siete(7) especies.
3. El usuario define que especie se alimenta de que especie.
4. El usuario define que especie o especies se alimentan de recursos
provenientes del exterior.
5. El usuario define cuantos individuos genera por especie.
6. El usuario define cuanta energía se gana un individuo al alimentarse de otro
(o del exterior por ciclo).
7. El usuario define los rangos en que puede vivir individuos de cada especie.
8. Ejecutar la simulación.
9. Mostrar en gráfico estadístico como varía la población total y por especie.
10. ¿Se logra una estabilidad entre especies?