El Método Congruencial Lineal Mixto es el más utilizado en simulación en computadoras digitales y esta basado en una relación de recurrencia que ademas utiliza el operador MOD.
El objetivo de los GCL es generar un valor aleatorio a partir de otro anterior
El GCL Mixto esta definido como:
Donde:
Xo : Semilla del generador Xo > 0
a: Constante multiplicativa a>0
c: Constante aditiva c>0
m: modulo m>a; m>Xo ; m>c
La suma (a*Xo+c) será dividida por «m» y «Xn+1» será el residuo de la división
Xn : es el valor base anterior
Xn+1 : es el nuevo valor uniforme entero
rn : es el número aleatorio normalizado
GENERADOR UNIX
El Sistema Operativo UNIX soporta el siguiente GCL mixto:
Implementado este en lenguaje java tenemos
import java.math.*; /** * @web http://jc-mouse.net/ * @author Mouse */ public class Unix { // parametros del generador private BigInteger xn=new BigInteger("0"); //semilla private final BigInteger a = new BigInteger("1103515245"); //Multiplicador private final BigInteger m = new BigInteger("2").pow(32); //Modulo private final BigInteger c = new BigInteger("12345"); //Constante aditiva private int precision = 5;//cantidad de digitos despues del punto decimal /** Constructor de clase */ public Unix(){} public BigInteger getXn() { return xn; } public void setXn(BigInteger xn) { this.xn = xn; } public int getPrecision() { return precision; } public void setPrecision(int precision) { this.precision = precision; } /** * Metodo que obtiene un numero aleatorio entre 0 y 1 * * @param No existe parametros de entrada * @return El numero aleatorio estandar */ public BigDecimal next() { //xn = (a * xn + c) % m ; xn = ((xn.multiply(a)).add(c)).mod(m); BigDecimal x = new BigDecimal( xn.floatValue() / m.floatValue() ).setScale( precision, BigDecimal.ROUND_HALF_UP); return x; } }
Realizando un test para un valor semilla Xo de 111 para una cantidad de 100 números aleatorios tenemos:
Unix unix = new Unix(); unix.setXn( new BigInteger( "111" ) ); unix.setPrecision( 5 ); for( int i=1 ; i<=100 ; i++){ System.out.println( unix.next() ); }
enjoy!!! 🙂
En anteriores post construimos aplicaciones Cliente/Servidor los cuales intercambiaban mensajes de una forma secuencial[...]
La siguiente clase reproduce sonidos WAV en controles Swing de Java Netbeans, los controles son pasados en el constructo[...]
Tradukisto es una biblioteca para Java 8 creada para convertir números enteros o cantidades de dinero a sus equivalentes[...]
A continuación tenemos una clase que nos permite arrastrar un archivo de Excel (*.xlsx) y cargar su contenido en una tab[...]
En este post, crearemos una aplicación java que nos permita arrastrar un archivo excel hacia la aplicación, abrirlo y ca[...]
Los smartphone al no tener los típicos botones de los celulares, su pantalla es sensible al movimiento, esto se llama «t[...]