Você está na página 1de 8

Taller de Informtica I

Dpto. Computacin F.C.E. y N. - UBA

2010

Introduccin a la simulacin y a la generacin de nmeros pseudoaleatorios


Introduccin a la simulacin La simulacin sirve como herramienta para analizar el diseo y operaciones de sistemas de procesos complejos. Si bien la solucin nunca es exacta, las aproximaciones que se obtienen son bastante buenas. La construccin de modelos tiene su origen en la poca del renacimiento, aunque la palabra Simulacin aparece cerca de 1940, cuando los cientficos Von Neumann y Stanislau Ulam, que trabajaban en el proyecto Montecarlo, durante la Segunda Guerra Mundial. El proyecto consista en desarrollar la primera bomba atmica antes que Alemania. Trabajaron en conjunto muchos cientficos de EEUU, Reino Unido y Canad, entre ellos Albert Einstein. En el proyecto se hizo referencia a la simulacin Montecarlo o mtodo Montecarlo. Se trata de un mtodo usado para aproximar expresiones matemticas complejas y costosas de evaluar con exactitud. El mtodo se llam as en referencia al Casino de Montecarlo, por ser la capital de los juegos de azar y por ser la ruleta el mtodo ms simple de generacin de nmeros aleatorios. Con la utilizacin de las computadoras en los experimentos de simulacin, surgieron muchsimas aplicaciones y adems una mayor cantidad de problemas tericos y prcticos. Definicin La simulacin es el proceso de disear un modelo de un sistema real, que servir para dirigir experimentos con el propsito de entender el comportamiento del sistema Existen varias definiciones formales de simulacin. Alguna de ellas: Simulacin es una tcnica numrica para conducir experimentos en una computadora digital. Estos experimentos comprenden ciertos tipos de relaciones matemticas y lgicas, las cuales son necesarias para describir el comportamiento y la estructura de sistemas complejos del mundo real a travs de largos perodos. Thomas T. Goldsmith Jr. y Estle Ray Mann La simulacin es el proceso de disear un modelo de un sistema real y llevar a trmino experiencias con l, con la finalidad de comprender el comportamiento del sistema o evaluar nuevas estrategias dentro de los lmites impuestos por un cierto criterio o un conjunto de ellos para el funcionamiento del sistema. R.E. Shannon En geologa Una de las herramientas ms tiles para comprender los procesos geolgicos y evaluar su importancia relativa en los sistemas naturales es su simulacin mediante modelos matemticos. Con estos modelos se intenta, primero, identificar y luego, cuantificar los principales factores que determinan cmo funcionan los sistemas geolgicos (una falla, un acufero, un arroyo contaminado) de manera que se pueda predecir su evolucin y tomar decisiones que permitan evitar los posibles riesgos asociados 1

Taller de Informtica I

Dpto. Computacin F.C.E. y N. - UBA

2010

Experimentacin real y simulacin La experimentacin directa sobre la realidad puede traer algunos problemas: Costo muy alto Gran lentitud En ocasiones las pruebas son destructivas A veces puede no ser tica (sobre todo si estn involucrados seres humanos) Puede resultar imposible (por ejemplo para predecir sucesos futuros)

Supongamos un ejemplo geolgico complicadito Una compaa petrolera debe decidir en cul de los dos puntos (A B) debe realizar una perforacin para extraer petrleo. La profundidad estimada en A es de 57 mts y en B es de 40 mts. Desde este momento y hasta el instante en que se comience a perforar, puede que llegue una nueva mquina (con probabilidad 0.71). Durante la excavacin se podra producir una avera con probabilidad de 0.14 si se perfora en A o 0.16 si se perfora en B. En caso de usar la maquina vieja, las probabilidades de avera si se perfora en A es de 0.28 y en B de 0.19. Independientemente del tipo de mquina y del lugar donde se perfore cuando se produce la avera, sta puede ser grande con probabilidad 0.35. En el punto A, la perforacin avanza a una velocidad de 3 mts por da y en B a 2 mts por da. En qu punto es ms rentable perforar? Claramente la respuesta a este problema puede darse mediante un algoritmo de simulacin, dado que no vamos a perforar ambos puntos y averiar maquinas para responder a esto Introduccin a la generacin de nmeros pseudoaleatorios Casi todos los mtodos de simulacin se basan en la posibilidad de crear nmeros aleatorios con distribucin U(0,1). Hasta la aparicin de las computadoras, los nmeros aleatorios se obtenas de procedimientos experimentales como lotera o ruleta y se almacenaban en tablas. Los nmeros generados por computadora se llaman nmeros pseudoaleatorios, dado que son predecibles a partir del primer nmero denominado semilla Para poder utilizar un generador automtico de nmeros pseudoaleatorios, ste debe cumplir con ciertas propiedades: Producir muestras segn la distribucin U(0,1) Pasar los contrastes de aleatoriedad e independencia ms habituales Que la sucesin generada sea reproducible a partir de la semilla Tener una longitud de ciclo tan grande como se desee Generar valores a alta velocidad Ocupar poca memoria

Taller de Informtica I

Dpto. Computacin F.C.E. y N. - UBA

2010

Mtodo del cuadrado medio Este mtodo es uno de los ms simples, creado por Von Neumann en 1940 y se llama mtodo del Cuadrado Medio. La tcnica parte desde una semilla inicial, un nmero enteros de 2n cifras propuesto por el usuario y los pasos a seguir son: a) Se toma un X0 como semilla, tal que X0 es entero y de 2n cifras (por ej: x0=3234) b) Se calcula y como x02 (Ejemplo y=10458756) c) Se toman los 2n dgitos centrales. Este nmero servir para formar el primer nmero y para continuar calculando nmeros pseudoaleatorios (Ejemplo: 4587) d) El primer nmero pseudoaleatorio es y/ 102n (Ejemplo: 0.4587) e) La nueva semilla es 4587, o sea, se comienza el procedimiento nuevamente para crear otro nmero pero con la nueva semilla Tambin podemos simular en Matlab el mtodo del cuadrado medio. Usamos la misma semilla que en nuestro ejemplo anterior: > x0=3234; >y=X0^2; Ahora tenemos que tomar los 4 dgitos centrales. Para eso, tenemos que transformar al nmero y en la cadena de caracteres ystr. Una vez que tenemos la cadena de caracteres, podemos manipularla como si fuera un vector: > ystr=num2str(y); %Paso el nmero a cadena >x1=ystr(4:7); %Obtengo los 4 dgitos centrales >u1=str2num(x1); %Convierto la cadena a nmero >u1=u1/10000; %Divido para obtener el nmero %aleatorio entre 0 y 1 Ejercicio(Optativo): Crear una funcin de Matlab que implemente el algoritmo Mid Square (Cuadrados Medios) de Von Neumann. v=randomMidSquare(x0, n), donde x0 es la semilla inicial (3234), n es la cantidad de nmeros que se quieren generar (100) y v es el vector de nmeros resultante. Para elegir la parte central de un nmero, ste se puede transformar a string con num2str y luego de string a nmero con str2num.

En Matlab/Octave

En Matlab u Octave, hay funciones que generan nmeros pseudoaleatorios, en especial, una de ellas genera nmeros con distribucin uniforme, tal como precisamos: rand Podemos empezar por establecer una semilla, dado que de otro modo, se generar siempre la misma secuencia de nmeros aleatorios. Para establecer la semilla se puede usar el reloj de la mquina:

Taller de Informtica I

Dpto. Computacin F.C.E. y N. - UBA

2010

> rand('state',sum(100*clock)) Ahora podemos generar un vector de valores pseusoaleatorios con distribucin uniforme: >u=rand(10000,1); Podemos ver el histograma para chequear que la distribucin es uniforme >hist(u); Simular experimentos Con la generacin de nmeros pseudoaleatorios podemos simular experimentos aleatorios como la tirada de un dado o de una moneda. Tomemos el ejemplo de la moneda. Precisamos asociar los sucesos elementales (cara/cruz) a intervalos disjuntos de (0,1). Por ejemplo cara ser asociado al intervalo (0, 0.5) y cruz al intervalo (0.5, 1). As, cada nmero aleatorio se transforma en un suceso elemental, preservando la probabilidad de que ocurra cada suceso. En este caso estamos diciendo que cara y cruz tienen la misma probabilidad. Podra no ser as si consideramos intervalos diferentes Con un simple programa podemos simular 100 tiradas de una moneda: >rand('state',sum(100*clock)); >u=rand(100,1); >v(1)=sum(u<=0.5) >v(2)=sum(u>0.5) >bar(v) %genero la semilla %realizo las 100 tiradas %v(1)= caras %v(2)= cecas %vemos que la dist es uniforme

Con la siguiente funcin se puede simular la tirada de un dado: function n = roll_d() n = ceil(rand*6 + eps); %eps es una constante muy pequea y ceil una funcin de redondeo al mayor entero ms cercano al nmero que se quiere redondear Desde lnea de comandos simplemente se invoca roll_d y se obtiene el valor de un dado. Simulemos varias tiradas de un dado. Comencemos con 100 tiradas. El programita sera: rand('state',sum(100*clock)) for i=1:100 dado1(i)=roll_d; end; %Contamos cuantas veces aparece cada nmero en un vector de 6 elementos v(1)= sum(dado1==1); v(2)= sum(dado1==2); 4

Taller de Informtica I

Dpto. Computacin F.C.E. y N. - UBA

2010

v(3)= sum(dado1==3); v(4)= sum( dado1==4); v(5)= sum(dado1==5); v(6)= sum(dado1==6); %muestro en pantalla el vector v %imprimo las veces que sali cada nmero. bar(v) Mostrar que a medida que se aumenta la cantidad de veces que se tira el dado, se logra un resultado ms uniforme. Ejercicio: Probar con 1000 y 100000 tiradas Ejercicio: Usando la funcin anterior, realizar un programa que arroje los valores de las tiradas de 2 dados simultneamente una cantidad de veces. Realizar el histograma y ver como quedaron distribuidas las sumas Ayuda: Podemos usar un vector de 12 elementos (aunque sabemos que nunca la suma de ambos dados dar 1): rand('state',sum(100*clock)) vector=zeros(12,1); for i=1:100 dado1=roll_d; dado2=roll_d; vector(dado1+dado2)=vector(dado1+dado2)+1; end ..(seguir) Ejercicio: Probar con 1000 y 100000 tiradas

Recomendaciones para usar un generador de nmeros aleatorios: 1. Asegurarse de que el programa llama a la rutina de inicializacin del generador antes de que ejecute el mismo. 2. Usar semillas que son de alguna manera aleatoria. Por ejemplo, 2731774 y 10293082 son ms seguros que 1 o 4096 (o de alguna otra potencia de 2). Tambin dos semillas similares como 23612 y 23613 pueden producir secuencias correlacionadas. 3. Nunca confiar en el generador de nmeros aleatorios que viene con la computadora. 4. Si es posible hacer comparaciones para la aplicacin usando dos distintos generadores para verificar si ellos dan los mismos resultados desde el punto de vista estadstico. 5. Al publicar los resultados especificar que generador de nmeros aleatorios se us.

Taller de Informtica I

Dpto. Computacin F.C.E. y N. - UBA

2010

Introduccin a la Probabilidad

Historia El objetivo de la Estadstica es utilizar los datos para inferir sobre las caractersticas de una poblacin a la que no podemos acceder de manera completa. Es decir, a partir de la muestra se infiere sobre la poblacin. La Probabilidad es la disciplina cientfica que proporciona y estudia modelos para fenmenos aleatorios en los que interviene el azar y sirve de soporte terico para la Estadstica. La Teora de la Probabilidad surgi de los estudios realizados sobre los juegos de azar, y estos se remontan miles de aos atrs. Como primeros trabajos con cierto formalismo cabe destacar los realizados por Cardano y Galilei (siglo XVI), aunque las bases de esta teora fueron desarrolladas por Pascal y Fermat en el siglo XVII. De ah en adelante grandes cientficos han contribuido al desarrollo de la Probabilidad, como Bernouilli, Bayes, Euler, Gauss,... en los siglos XVIII y XIX. Ser a finales del siglo XIX y principios del XX cuando la Probabilidad adquiera una mayor formalizacin matemtica, debido en gran medida a la llamada Escuela de San Petesburgo en la que cabe destacar los estudios de Tchebychev, Markov y Liapunov.

Experimento Aleatorio Antes hablamos de experimentos aleatorios. Vamos a formalizar un poco ms Definimos experimento aleatorio como aquel que verifique ciertas condiciones que nos permitan un estudio riguroso del mismo. Llamamos experimento aleatorio al que satisface los siguientes requisitos: Todos sus posibles resultados son conocidos de antemano. El resultado particular de cada realizacin del experimento es imprevisible. El experimento se puede repetir indefinidamente en condiciones idnticas.

El principal objetivo de un experimento aleatorio suele ser determinar con qu probabilidad ocurre cada uno de los sucesos elementales. A continuacin daremos una de las definiciones ms manejadas para asignar probabilidades a los sucesos. Definicin de Laplace o Regla de Laplace: El caso ms fcil es aqul en el que no tenemos razones para suponer que unos sucesos sean ms probables que otros. Cuando, siendo el espacio muestral finito, todos los sucesos elementales tienen la misma probabilidad, diremos que son equiprobables y podremos utilizar la conocida Regla de Laplace: P(A) = casos favorables/casos posibles

Taller de Informtica I

Dpto. Computacin F.C.E. y N. - UBA

2010

Empecemos con algo simple: Tiramos una moneda, cul es la probabilidad de obtener cara? Realizando la frmula anterior: P(A)= P(X=cara)= = 0.5 Ejemplo 5: Lanzamos dos dados y sumamos sus puntuaciones. Cul es la probabilidad de obtener un 2?, y de obtener un 6?

Entonces:

P(A)=P(X+Y=2) = 1/36 = 0.027 P(A)=P(X+Y=6) = 5/36 = 0.138

Ejercicio: Lanzamos dos dados y anotamos sus puntuaciones. Calcula la probabilidad de que: a) Salga un nmero igual y par en cada dado. b) Salgan nmeros menores que 5 en cada dado. Ejercicio: Lanzamos tres monedas y anotamos los resultados. Calcula la probabilidad de que: a) Salgan dos caras y una cruz. b) Salgan tres caras. Simulemos en Matlab la extraccin al azar 1000 veces una bola de una caja donde hay 10 bolas numeradas del 1 al 10, y guardamos los resultados en un vector (hacer algo parecido a lo realizado para los dados):

a) Cul es la frecuencia absoluta de 8? b) Calcula las frecuencias relativas de cada suceso. c) Estima la probabilidad de extraer un 7.

Taller de Informtica I

Dpto. Computacin F.C.E. y N. - UBA

2010

La frecuencia absoluta es el nmero de veces que aparece la variable (en este caso el nmero 8) y eso lo tenemos en el vector, en el lugar 8, o sea balls(8)=113 La frecuencia relativa se obtiene realizando el cociente entre la frecuencia absoluta y el tamao de la muestra. En nuestro caso haramos balls/1000 y obtendramos:

La frecuencia relativa es ms o menos el mismo valor que la probabilidad, entonces la probabilidad de extraer un 7 es de 0.105 Ejercicio completo: Supngase que se tiene un terreno de 100 m2 y se lo divide en cuadrados de 1m2 Se sabe que debajo de ese terreno hay agua pero no se sabe a qu profundidad. A su vez, el suelo es rocoso, de modo que puede pasar que donde haya agua a menos profundidad sea ms difcil de cavar que donde sea ms profundo. Todo este tema, se tiene estimado en dos vectores. Si bien hay mtodos para estimar la profundidad del suelo, nosotros lo simularemos generando nmeros pseudoaleatorios de entre 25 y 55 que corresponden al rango de profundidades que podemos hallar en metros. Con respecto a la dificultad para cavar lo que hacemos es tirar un dado y su valor ser el grado de dificultad al cavar que se guardar en un segundo vector. O sea en un vector prof tendremos la profundidad para cada metro cuadrado y en un vector dif se tendr por cada m2 la dificultad de 1 a 6 para cavar. Generar estos vectores aleatoriamente. a) Mostrar el histograma de profundidades y el histograma de dificultades b) Qu probabilidades hay de cavar en un sitio poco profundo y con poco grado de dificultad? Se entiende por sitio poco profundo si tiene menos de 32 metros y poco dificultoso si el grado de dificultad es menor a 3.

Você também pode gostar