Números rectangulares Para la siguiente actividad necesitaremos una hoja cuadriculada y algunas
lentejas. Con las lentejas trataremos de formar rectángulos de la siguiente manera: Escoge
un
número
entre
1
y
100
oma la mism misma a cant cantid idad ad de lent lentej ejas as que que el núme número ro que que eleg elegis iste te.. Toma
obre tu cuadr cuadric icul ula a acom acomoda oda las las Sobre
lent lentej ejas as de mane manera ra que que
puedas formar un rectángulo Por ejemplo, si escogiste el número 12 puedes formar estos rectángulos:
El rectángulo formado por 3 renglones y 4 columnas
El rectángulo formado por 2 renglones y 6 columnas
¿Se podrán formar más rectángulos con el número 12? Lo que has hecho es escribir al número 12 como una multiplicación, 3 x 4 = 12 2 x 6 =12 ¿Qué pasará si escogemos el número 15?
¿Cuántos rectángulos se formarán? Elige otros números: Para que no te pierdas puedes apuntar tus
resultados en una tabla como esta
Número
12 12 . . . . . . . . .
No.
de No.
renglones
columnas
3 2 . . . . . . . . .
4 6 . . . . . . . . .
de
Multiplicación
3 x 4 = 12 2 x 6 = 12 . . . . . . . . .
Hay algunos números con los que sólo se pueden formar dos rectángulos,
por ejemplo pensemos en el número 13. ¿Cuáles rectángulos se pueden formar con él?
El de 1 renglón y 13 columnas, o sea, 1x13
y el de 13 renglones y 1 columna, o sea 13x1
y con este número no se pueden hacer más rectángulos.
Estos números se llaman números primos. Un número primo solamente es múltiplo de 1 y de él mismo.
Número pseudo-aleatorio Un número pseudo-aleatorio es un número generado en un proceso que parece producir números al azar, pero no lo hace realmente. Las secuencias de números pseudo-aleatorios no muestran ningún patrón o regularidad aparente desde un punto de vista estadístico, a pesar de haber sido generadas por un algoritmo completamente determinista, en el que las mismas condiciones iniciales producen siempre el mismo resultado. Los mecanismos de generación de números aleatorios que se utilizan en la mayoría de los sistemas informáticos son en realidad procesos pseudoaleatorios.
Generación de Números Aleatorios
Una parte fundamental con el trabajo de algoritmos genéticos es la generación de números al azar que son usados para crear los algoritmos y mutarlos. Como estoy programando en Visual C++ 6.0, he usado la función rand( ) con que viene este lenguaje. Debo tener en cuenta que un generador
de números pseudo-aleatorios (porque no es azar puro) debe ser inicializado apropiadamente y tiene un periodo: la secuencia de números pseudoaleatorios se repite después de N números generados, el objetivo es tener un N muy grande.
Para la inicialización, la semilla es seleccionada según la hora exacta de la máquina y para evitar períodos cortos, cada cierto número de veces de generación o mutación de algoritmos genéticos, vuelve y se inicializa la semilla con otro valor (hora exacta de la máquina en segundos). Sin embargo, como tengo un nuevo PC y algoritmo rápidos, al tratar de inicializar la semilla con la hora exacta de la máquina me topé con el problema que no pasaba ni un solo segundo entre inicializaciones, por lo tanto, el generador de números pseudo-aleatorios siempre arrancaba con la misma secuencia (algo que no es recomendable en simulación). Forcé que el tiempo entre inicializaciones al menos fuera de un segundo pero eso hizo que el algoritmo se tornara lento. Cambié la inicialización usando como semilla un numero generado al azar por el mismo generador. Sin embargo, esta idea no me gustó porque no se si hay una distribución uniforme estadística en la generación de los números pseudo-aleatorios y tampoco se el tamaño del periodo. Buscando generadores de números aleatorios
En Internet existen variados algoritmos para la generación de números pseudo-aleatorios. Llama la atención: el MT19937 de Makoto Matsumoto y Takuji Nishimura, es un algoritmo de libre uso (GNU), tiene un período muy largo: 2^19937 y ha pasado las pruebas mas fuertes en distribución uniforme
y según se lee en su página Web es más rápido que la función rand ( ) de Visual C++ 6.0. El MT19937 es también conocido como un generador "Mersenne Twister". ¿Por que usar períodos muy largos?
El nuevo motor requiere generar 10 números pseudo-aleatorios por cada instrucción del algoritmo genético, si cada algoritmo genético tiene como máximo 150 instrucciones, se requieren 10*150 = 1500 números pseudo-aleatorios, si la simulación generara 10 millones de algoritmos genéticos, requeriría de 15.000 millones. Es decir un período sería excelente si superara los 15.000 millones o 2^34, y el algoritmo MT19937 supera dramáticamente esta cifra. Para la siguiente actualización, el nuevo motor tendrá este generador de números pseudo-aleatorios.
Método de Monte Carlo
Método no determinístico o estadístico numérico usado para aproximar expresiones matemáticas complejas y costosas de evaluar con exactitud. El método se llamó así en referencia al Casino de Montecarlo (Principado de Mónaco) por ser “la capital del juego de azar”, al ser la ruleta un generador simple de números aleatorios. El nombre y el desarrollo
sistemático de los métodos de Monte Carlo datan aproximadamente de 1944 y se mejoraron enormemente con el desarrollo de la computadora. El uso de los métodos de Monte Carlo como herramienta de investigación, proviene del trabajo realizado en el desarrollo de la bomba atómica durante la segunda guerra mundial en los Álamos. Este trabajo conllevaba la simulación de problemas probabilísticos de hidrodinámica concernientes a la difusión de neutrones en el material de fusión, la cual posee un comportamiento eminentemente aleatorio. En la actualidad es parte fundamental de los algoritmos de trazado de rayos para la generación de imágenes sintéticas. En la primera etapa de estas investigaciones, John von Neumann y Stanislaw Ulam refinaron esta ruleta rusa y los métodos "de división" de tareas. Sin embargo, el desarrollo sistemático de estas ideas tuvo que esperar el trabajo de Harris y Herman Kahn en 1948. Aproximadamente en el mismo año, Enrico Fermi, Metropolis y Ulam obtuvieron estimadores para los valores característicos de la ecuación de Schrödinger para la captura de neutrones a nivel nuclear usando este método. El método de Monte Carlo proporciona soluciones aproximadas a una gran variedad de problemas matemáticos posibilitando la realización de experimentos con muestreos de números pseudoaleatorios en una computadora. El método es aplicable a cualquier tipo de problema, ya sea estocástico o determinista. A diferencia de los métodos numéricos que se basan en evaluaciones en N puntos en un espacio M-dimensional para producir una solución aproximada, el método de Monte Carlo tiene un error
absoluto de la estimación que decrece como
en virtud del teorema del
límite central.
Ejemplo de la Aplicación del Método usando La variable aleatoria Se denomina variable aleatoria, a una variable X que puede tomar un conjunto de valores { x 0, x 1, x 2, ... x n-1}, con probabilidades { p0 , p1, p2 , ... p n-1}. Por ejemplo, en la experiencia de lanzar monedas, los posibles resultados son {cara, cruz}, y sus probabilidades son {1/2, 1/2}. En la experiencia de lanzar dados, los resultados posibles son {1, 2, 3, 4, 5, 6} y sus probabilidades respectivas son {1/6, 1/6, 1/6, 1/6, 1/6, 1/6}. Realicemos ahora la experiencia de hacer girar una ruleta y apuntar el número del sector que coincide con la flecha. En la ruleta de la izquierda de la figura los resultados posibles son {0, 1, 2, 3, 4, 5, 6, 7}, y la probabilidad de cada resultado es 1/8. En la ruleta de la derecha de la figura los posibles resultados son {0, 1, 2, 3}, y las probabilidades respectivas {1/4, 1/2, 1/8, 1/8}, proporcionales al ángulo del sector.
En los tres primeros ejemplos, la variable aleatoria X se dice que está uniformemente distribuida, ya que todos los resultados tienen la misma probabilidad. Sin embargo, en el último ejemplo, la variable aleatoria X , no está uniformemente distribuida. El problema crucial de la aplicación de los métodos de Montecarlo es hallar los valores de una variable aleatoria (discreta o continua) con una distribución de probabilidad dada por la función p(x) a partir de los valores de una variable aleatoria uniformemente distribuida en el intervalo [0, 1), proporcionada por el ordenador o por una rutina incorporada al programa. Para simular un proceso físico, o hallar la solución de un problema matemático es necesario usar gran cantidad de números aleatorios. El método mecánico de la ruleta sería muy lento, además cualquier aparato físico real genera variables aleatorias cuyas distribuciones difieren, al menos ligeramente de la distribución uniforme ideal. También, se puede hacer uso de tablas de cifras aleatorias uniformemente distribuidas, comprobadas minuciosamente en base a pruebas estadísticas especiales. Se emplean solamente cuando los cálculos correspondientes a la aplicación del método de Montecarlo se realiza a mano, lo que en estos tiempos resulta inimaginable. En la práctica, resulta más conveniente emplear los
denominados números pseudoaleatorios, se trata de números que se obtienen a partir de un número denominado semilla, y la aplicación reiterada de una fórmula, obteniéndose una secuencia { x 0 , x 1, x 2 , ... x n} de números que imitan los valores de una variable uniformemente distribuida en el intervalo [0, 1). Variable aleatoria discreta
Para simular la ruleta situada a la derecha de la figura, se procede del siguiente modo: se hallan las probabilidades de cada resultado, proporcionales al ángulo de cada sector y se apuntan en la segunda columna, la suma total debe de dar la unidad. En la tercera columna, se escriben las probabilidades acumuladas. Resultado Probabilidad P. acumulada
0
0.25
0.25
1
0.5
0.75
2
0.125
0.875
3
0.125
1
Se sortea un número aleatorio g uniformemente distribuido en el intervalo [0, 1), el resultado del sorteo se muestra en la figura. En el eje X se sitúan los distintos resultados que hemos nombrado x 0, x 1, x 2, x 3 . En el eje vertical las probabilidades en forma de segmentos verticales de longitud igual a la probabilidad pi de cada uno de los resultados, dichos segmentos se ponen unos a continuación de los otros, encima su respectivo resultado x i . Se obtiene así una función escalonada. Cuando se sortea una variable aleatoria g, se traza una recta horizontal cuya ordenada sea g. Se busca el resultado cuya abscisa sea la intersección de dicha recta horizontal y del segmento
vertical, tal como se señala con flechas en la figura. Si el número aleatorio g está comprendido entre 0.25 y 0.75 se obtiene el resultado denominado x 1.
La tabla describe el sorteo de una variable discreta, siendo g una variable aleatoria uniformenente distribuída en el intervalo [0,1). Condición
Resultado
0<=g<0.25
0
0.25<=g<0.75
1
0.75<=g<0.875
2
0.875<=g<1
3
Una vez visto un caso particular, el problema general puede formularse del siguiente modo: Si X es una variable aleatoria discreta cuyos posible resultados son { x 0 , x 1, x 2 , ... x n-1} y sean { p0 , p1, p 2 , ... p n} sus respectivas probabilidades. Al sortear un
número aleatorio g, uniformemente distribuido en el intervalo [0, 1), se obtiene el resultado x i , si se verifica la siguiente condición
(1)
Variable aleatoria continua Comprendido el concepto de transformación de una variable discreta, y el procedimiento para obtener un resultado cuando se efectúa el sorteo de una variable aleatoria uniformemente distribuida, no reviste dificultad el estudio de la variable continua. Si X es una variable aleatoria continua, y p(x) es la probabilidad de cada resultado x , construimos la función que se representa en la figura.
(2) El resultado del sorteo de una variable g uniformemente distribuida en el intervalo [0 ,1) se obtiene a partir de la ecuación.
(3) Gráficamente, se obtiene trazando una recta horizontal de ordenada g. La abscisa x del punto de corte con la función es el resultado obtenido. En la figura se señala mediante flechas.
Un ejemplo sencillo es la transformación de una variable aleatoria que está uniformemente distribuida en el intervalo [a, b) si
Integrando (2) obtenemos la función
que es una línea recta, que vale cero cuando x=a, y uno cuando x=b, tal como puede verse en la figura inferior. Utilizando la fórmula (3) de la transformación de la variable aleatoria continua y despejando x , se obtiene
Generador de números aleatorios
Existen varias fórmulas para obtener una secuencia de números aleatorios, una de las más sencillas es la denominada fórmula de congruencia: se trata de una fórmula iterativa, en la que el resultado de una iteración se utiliza en la siguiente. x=(a*x+c)%m;
donde a, c, m , son constantes cuyos valores elige el creador de la rutina, así por ejemplo tenemos a=24298 c=99491 m=199017 a=899 c=0
m=32768
República Bolivariana de Venezuela Ministerio de Educación Superior Instituto Universitario de Tecnología Industrial Rodolfo Loero Arismendi Extensión Valera
Terry Casique C.I. 11.323.106
Valera, Abril 2007