Sunteți pe pagina 1din 13

Depto.

de Ingeniería Industrial

ALGORITMOS CONGRUENCIALES

Simulación

Docente: Talina Nieto Salas

Alumno: Juan Antonio Najera Tiscareño (17151131)

Grupo: 14-15hrs

Aguascalientes; Ags a 7 de Abril del 2020


ÍNDICE

INTRODUCCIÓN.......................................................................................................3

DESARROLLO..........................................................................................................4

¿QUÉ ES UN ALGORITMO?.......................................................................................4
ALGORITMO CONGRUENCIAL....................................................................................4
Lineales.......................................................................................................................................................4
 Algoritmo congruencial lineal:..........................................................................................................4
 Algoritmo congruencial multiplicativo:.............................................................................................6
 Algoritmo congruencial aditivo:........................................................................................................7
No lineales..................................................................................................................................................8
 Algoritmo congruencial cuadrático:.................................................................................................8
 Algoritmo congruencial Blum Blum y Shub:......................................................................................9

FUNCIÓN MOD.....................................................................................................10

CONCLUSIÓN.........................................................................................................12

BIBLIOGRAFÍA.......................................................................................................13

2
INTRODUCCIÓN
La simulación es una técnica numérica para realizar experimentos en vida real o
en una computadora. Estos experimentos involucran ciertas observaciones críticas
y matemáticas que describen cualquier sistema que se pueda simular. Para poder
realizar una simulación que incluya variabilidad dentro de sus eventos, es preciso
generar una serie de números que sean aleatorios por sí mismos que tengan una
relación particular con la simulación que se está llevando a cabo. Los números
aleatorios constituyen la parte principal de la simulación de procesos estocásticos
y generalmente se usan para generar el comportamiento de variables aleatorias,
tanto continúas como discretas. Debido a que no es posible generar números
realmente aleatorios, los consideramos como números pseudo-aleatorios,
generados por medio de algoritmos determinísticos que requieren parámetros de
arranque.

En este trabajo se presentan diferentes algoritmos congruenciales que generan


números pseudo-aleatorios para entender un poco mejor este tema.

3
DESARROLLO
¿Qué es un algoritmo?
Un algoritmo se puede definir como una secuencia de instrucciones que
representan un modelo de solución para determinado tipo de problemas. O bien
como un conjunto de instrucciones que realizadas en orden conducen a obtener la
solución de un problema.

Algoritmo congruencial
Los generadores de números aleatorios que más se usan son los generadores
congruenciales lineales ideados. El chiste de este es generar un valor aleatorio a
partir de otro anterior. A continuación se mencionaran los tipos de algoritmos
congrienciales que existen dentro de la simulación.

Lineales
 Algoritmo congruencial lineal:
Este algoritmo congruencial fue propuesto por D. H. Lehmer en 1955. Según Law
y Kelton, este algoritmo es el más antiguo y el más utilizado. El algoritmo
congruencial lineal genera una secuencia de números enteros por medio de la
siguiente ecuación recursiva:

X i +1=( aX i+ c ) mod (m) i=0 , 1 ,2 , 3 , … , n

Donde:

 X 0= semilla ( X 0> 0 y debe ser entero)


 a= constante multiplicativa (a> 0 y entero)
 c= constante aditiva (c >0 y entero)
 mod m= modulo, significa realizar las operaciones anteriores y dividir el
resultado entre el valor “m” para obtener solamente el residuo.

4
Es importante señalar que la ecuación recursiva del algoritmo congruencial lineal
genera una secuencia de números enteros. Para convertir los números aleatorios
generados, a números pseudo-aleatorios debemos realizar esta operación:

Xi
ri= i=0 , 1 ,2 , 3 , … , n
m−1

Condiciones:

Para que el algoritmo sea capaz de lograr el máximo período de vida n, es preciso
que los parámetros X 0, a, y m cumplan con ciertas condiciones. Banks, Carson,
Nelson y Nicol sugieren lo siguiente:

m=2 g

a=1+4 k

k= entero

c= relativamente primo a n

g= entero

Semilla X0=37 Xi+1=(axi+c)mod(m) residuo X0 Ri=xi/m-1


a=19, c=33, mod=100
X0=37 X=(19*37+33)/100 7.36 36 36/100-1=0.3636
X0=36 X=(19*36+33)/100 7.17 17 17/99=0.1717
X0=17 X=(19*17+33)/100 3.56 56 56/99=0.5656
X0=56 X=(19*56+33)/100 10.97 97 97/99=0.9797
Ejemplo:

 Algoritmo congruencial multiplicativo:


Este siguiente algoritmo congruencial tiene como base al algoritmo lineal pero
conlleva una operación menos; surge del algoritmo lineal cuando c=0. Entonces la
ecuación recursiva es:

5
X i +1=( aX i) mod (m) i=0 , 1 ,2 , 3 , … , n

Donde:

 X 0= semilla ( X 0> 0 y debe ser entero)


 a= constante multiplicativa (a> 0 y entero)
 mod m = modulo, significa realizar las operaciones anteriores y dividir el
resultado entre el valor de “m” para obtener solamente el residuo.

Esta operación nos da un valor entero. Si deseamos un número pseudo-aleatorio


en el intervalo (0,1), debemos realizar la siguiente operación sobre el número
anteriormente obtenido

Xi
ri=
m−1

Condiciones:

Para mejorar la eficiencia del algoritmo se deben seguir ciertas condiciones para
los valores a , m y X 0. 

m=2 g

a=3+8 k, o bien, a=5+8 k

k =0 , 1 ,2 , 3 , …

g= entero

X 0 y n= deben de ser impar

Semilla X0=17 Xi+1=(axi)mod(m) X0 Ri=xi/m-1


k=2, g=5. a=n+8k y m=2g
X0=17, a=5+8(2), m=25 X=(21*17)mod(32) 5 5/32-1=0.1612

X0=5 X=(21*5)mod(32) 9 9/31=0.2903

6
X0=9 X=(21*9)mod(32) 29 29/31=0.9354
X0=29 X=(21*29)mod(32) 1 1/31=0.3225
Ejemplo:

 Algoritmo congruencial aditivo:


Es un algoritmo determinantico que nos permite generar una serie de números
pseudo-aleatorios a partir de parámetros de arranque. Este algoritmo requiere una
secuencia previa de n números enteros x 1 , x 2 , x 3 , x 4 … xn para generar una
nueva secuencia de número enteros que empiecen en xn+1 , xn+2 …, su ecuación
recursiva es:

X i +1=( X i−1+ X i−n )mod (m) i=n+1 , n+2 , n+3 , … , n

Para convertir los números aleatorios generados, a números pseudo-aleatorios


debemos realizar esta operación:

Xi
ri=
m−1

Ejemplo:

Generar 4 números pseudo-aleatorios entre (0, 1) a partir de la siguiente


frecuencia de números enteros: 65, 89, 98, 03, 69; m=100.

 Sean x1=65, x2=89, x3=98, x4=03, x5=69


 Para generar r1,r2,r3,r4,r5,r6 y r7 antes es necesario generar x6, x7, x8, x9,
x10.

X6=(x5+x1)mod(100)  (69+65)mod(100)=34  r1=33/100-1  r1=0.3434


X7=(x6+x2)mod(100) (34+89)mod(100)=23  r1=23/100-1  r1=0.2323
X8=(x7+x3)mod(100) (23+98)mod(100)=21  r1=21/100-1  r1=0.2121
7
X9=(x8+x4)mod(100) (21+03)mod(100)=24  r1=24/100-1  r1=0.2424

X10=(x9+x5)mod(100) (24+69)mod(100)=93  r1=93/100-1  r1=0.9393


No lineales
 Algoritmo congruencial cuadrático:
Este algoritmo es un programa que genera números basándose en el algoritmo
congruencial cuadrático. Este algoritmo requiere una secuencia previa de n
números enteros x 1 , x 2 , x 3 , x 4 … xn para generar una nueva secuencia de número
enteros que empiecen en xn+1 , xn+2 …, su ecuación recursiva es:

X i +1=(aX i2+ bX i +c)mod(m) i=0 , 1 ,2 , 3 , … , n

En este caso, los números ri pueden ser generados por la ecuación:

Xi
ri=
m−1

Condiciones:

De acuerdo con L’ecuyer, las condiciones que deben cumplir los parámetros
m , a ,b y c para alcanzar un nivel máximo de N=mson:
M =2 g

a= debe ser número par

c= número impar

g= entero

( b−1 ) mod 4=1

8
Ejemplo:

Generar 5 números a partir de los siguientes parámetros:

X0=13 m=8 a=26 b=27 c=27

X1=[26*132+27*13+27]mod(8)=4
X1=[26*42+27*4+27]mod(8)=7
X1=[26*72+27*7+27]mod(8)=2
X1=[26*22+27*2+27]mod(8)=1
X1=[26*12+27*1+27]mod(8)=0

 Algoritmo congruencial Blum Blum y Shub:


Creado a mediados de la década de 1980 por Lenore Blum, Manuel Blum y
Michael Shub. Es un algoritmo basado en congruencias cuadráticas que permite
generar una secuencia de números pseudo-aleatorios. El algoritmo es recursivo;
es decir, se utiliza el resultado de una iteración para calcular el siguiente número.
La ecuación en congruencias se establece como:

X i +1=( X i2) mod( pq) i=0 , 1 ,2 , 3 , … , n

Condiciones:

p y q son dos números primos muy grande. Tales que p=3 (mod 4 ) y q=3(mod 4);
esto permite asegurar que cada residuo posee una raíz cuadrada.

Ejemplo:
Generar 5 números a partir de los siguientes parámetros:

X0=317, p=199, q=151


X1=(317)2mod(199)(151)  10342
X2=(10342)2mod(199)(151)  12573
X3=(12573)2mod(199)(151)  22589
9
2
X4=(22589) mod(199)(151)  852
X5=(852)2mod(199)(151)  4728
Función MOD
La función MOD devuelve el resto después de que un número se divide por
divisor. La función MOD es la abreviatura de Funcionamiento Modulo. El resultado
es negativo solamente si el primer parámetro es negativo. Los parámetros deben
ser enteros. La función devuelve un entero. Si cualquier parámetro es NULL, el
resultado es NULL. Utilice la función MOD para probar si dos números pueden
dividirse de manera exacta o aislar el resto de un cálculo de división. Esta función
divide un número entre otro y devuelve el resto.

 Número: el número para el que desea buscar el resto.


 Divisor: el número por el que desea dividir el número.

Ejemplos:

Por ejemplo 7 MOD 3 devolverá 1, ya que al realizar la división entera de 7 entre 3


se obtiene 2 como cociente y 1 como resto.

Es decir, que n MOD m siempre devolverá un número dentro del rango (0..m-1).

Para comprender de forma sencilla cómo obtener el resto de una operación n


MOD m se pueden seguir los siguientes pasos:

Paso 1: Si n es menor que m, el resultado de la operación MOD es n.

Paso 2: (Cuando n es mayor o igual que m) se le resta m a n y se vuelve al paso


1.

10
Más ejemplos:

CONCLUSIÓN
Después de una explicación de cada algoritmo, se puede decir que el sistema
puede generar números pseudo-aleatorios por medio de diferentes algoritmos
congruenciales. 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.

11
La sucesión, supone en si una secuencia, pero como sucesión, ha sido obtenida
mediante un proceso aritmético definido, efectiva para el propósito para el que se
la requiere. Los algoritmos son nuestros generadores de estos, que son
necesitados en el área de simulación. Dentro de la simulación, estos generadores
son ampliamente utilizados en campos tales como el modelado por computadora,
estadística, diseño experimental, etc. Algunas de estas secuencias son lo
suficientemente aleatorias para ser útiles en estas aplicaciones. Para llevar a cabo
un evento, se necesita de un experimento, y para el experimento se necesitan de
datos, estadísticas que nos ayuden a arrancarlo.

Así que si nos ponemos a pensar en todo lo que lleva a cabo una simulación, nos
daríamos cuenta que tan importante son estos generadores. El MOD es una
función utilizada dentro de estos generadores, o sea que existe una secuencia
para llevar a cabo una simulación y también para que resulte exitosa ya que
existen varias restricciones que no lo puedan detener. Como ingenieros
industriales, si comprendemos esto, comprenderemos como las industrias utilizan
la simulación para que sus empresas funcionen.

BIBLIOGRAFÍA
 http://ing.unne.edu.ar/pub/informatica/Alg_diag.pdf
 Avila, D.. (2013). ALGORITMOS CONGRUENCIALES. Marzo 26, 2020, de
Scribd Sitio web: https://www.scribd.com/document/188832339/ALGORITMOS-
CONGRUENCIALES

12
 Blogger. (2017). 2.2.4 Algoritmo lineal. Marzo 26, 2020, de Blogger Sitio web:
simulacionocho.blogspot.com/2017/03/224-algoritmo-lineal.html
 Garcia, G.. (2017). Algoritmo Congruencial Multiplicativo para la generación de
números pseudo aleatorios: Implementación en Java. Marzo 26, 2020, de Naps
Tecnología y educación Sitio web: https://naps.com.mx/blog/algoritmo-
congruencial-multiplicativo-para-la-generacion-de-numeros-pseudo-aleatorios-
implementacion-en-java/
 Ramos, J.. (2010). Algoritmo congruencial aditivo. Marzo 26, 2020, de
SlideShare Sitio web: https://www.slideshare.net/jaisraal/algoritmo-
congruencial-aditivo-4323800
 Blogger. (2013). ALGORITMO CONGRUENCIAL CUADRATICO. Marzo 26,
2020, de Blogger Sitio web: http://vanec922.blogspot.com/2013/10/algoritmo-
congruencial-cuadratico.html
 Garcia, L.. (2012). Blum Blum Shub 3. Marzo 27, 2020, de Scribd Sitio web:
https://www.scribd.com/document/116266842/Blum-Blum-Shub-3
 Cronquist, O.. (2018). Cómo utilizar la función MOD. Marzo 27, 2020, de GDH
Sitio web: https://www.get-digital-help.com/es/aprender-c%C3%B3mo-
funciona-la-funci%C3%B3n-mod/

13

S-ar putea să vă placă și