


Yo soy de Winamp, siempre lo he sido, y desde hace un tiempo que le voy dando vueltas a una cuestión que al final se ha vuelto casi existencial.
Se supone que tengo una lista de música de casi 2800 canciones que dan para 7 días de música seguidas:
Se supone que tengo una lista de música de casi 2800 canciones que dan para 7 días de música seguidas:
Entonces ¿cómo es posible que día tras día el aleatorio del Winamp me de la sensación que reproduce las mismas canciones? ¿Será mi imaginación?
¿Quizá tiene algo que ver con la pseudoaleatoriedad de los ordenadores?
Y ahí es dónde quería llegar. ¿Qué tan aleatorio puede ser el aleatorio de una máquina o programa informático?
Vamos a imaginar una tirada de dado. Eso es aleatorio, ¿no?, supongo que sí. Pero, y si ese dado se tirase siempre de la misma forma bajo las mismas circunstancias, ¿no sería lógico entonces que el dado siempre cayera igual y saliera el mismo número?
¿Quizá tiene algo que ver con la pseudoaleatoriedad de los ordenadores?
Y ahí es dónde quería llegar. ¿Qué tan aleatorio puede ser el aleatorio de una máquina o programa informático?
Vamos a imaginar una tirada de dado. Eso es aleatorio, ¿no?, supongo que sí. Pero, y si ese dado se tirase siempre de la misma forma bajo las mismas circunstancias, ¿no sería lógico entonces que el dado siempre cayera igual y saliera el mismo número?
Experimento con PHP y rand() Vamos a tomar ahora el método de PHP rand() al que se le pasan dos enteros (uno que indica el número inicial y el otro el número final del dominio del número aleatorio) podes probarlo acá:
click en este enlace para ver una muestra en directo
Se trata de ejecutar rand(0, 100) 10 mil veces en repeticiones de 100 y guardar las concordancias entre número de columna y valor aleatorio.
Resultados
Después de hacer las 100 * 100 repeticiones:
¿No parece un poco sospechoso que de cada 100 * 100 resultados, siempre salga un número tan aproximado a 100 de veces que coincide el número aleatorio con la columna de la 1 a la 100? Ésto es precisamente la pseoudoaleatoriedad, una copia falsa del azar, dónde a través de condiciones y procesos se generan números aleatorios siempre partiendo de una base, en nuestro caso esos dos enteros que pasamos al método rand().
Aunque estadísticamente hay 1 posibilidad de 100 de que salga un número, aún así en la aleatoriedad real podría darse el caso de hacer 1000 intentos y no salir un determinado número. Sin embargo en la pseudoaleatoriedad vemos que tiende a salir 1 número de cada cada 100 intentos casi siempre.
Por eso no es de extrañar lo que pasaría si en vez de hacer un rand 100 veces lo hicieramos 10 veces, o 1000 veces:
Rand(1,10) 10 veces (10 * 10), número de veces que coinciden número y columna tienden a 10
Rand(1,1000) 1000 veces (1000 * 1000), número de veces que coinciden número y columna aproximados a 1000:
De hecho incluso apreciamos que cuanto más elevado es el número más precisión hay a la hora de generar los números aleatorios.
Se trata de ejecutar rand(0, 100) 10 mil veces en repeticiones de 100 y guardar las concordancias entre número de columna y valor aleatorio.
Resultados
Después de hacer las 100 * 100 repeticiones:
¿No parece un poco sospechoso que de cada 100 * 100 resultados, siempre salga un número tan aproximado a 100 de veces que coincide el número aleatorio con la columna de la 1 a la 100? Ésto es precisamente la pseoudoaleatoriedad, una copia falsa del azar, dónde a través de condiciones y procesos se generan números aleatorios siempre partiendo de una base, en nuestro caso esos dos enteros que pasamos al método rand().
Aunque estadísticamente hay 1 posibilidad de 100 de que salga un número, aún así en la aleatoriedad real podría darse el caso de hacer 1000 intentos y no salir un determinado número. Sin embargo en la pseudoaleatoriedad vemos que tiende a salir 1 número de cada cada 100 intentos casi siempre.
Por eso no es de extrañar lo que pasaría si en vez de hacer un rand 100 veces lo hicieramos 10 veces, o 1000 veces:
Rand(1,10) 10 veces (10 * 10), número de veces que coinciden número y columna tienden a 10
Rand(1,1000) 1000 veces (1000 * 1000), número de veces que coinciden número y columna aproximados a 1000:
De hecho incluso apreciamos que cuanto más elevado es el número más precisión hay a la hora de generar los números aleatorios.

Conclusiones
Resulta que hasta dónde soy consciente las funciones aleatorias se basan gran parte en la CPU para generar esos números aleatorios y por tanto, como una CPU siempre trabaja en la misma frecuencia al final la aleatoriedad resulta ser pseudoaleatoriedad.
¿Y ésto qué significa?
Primero: que la pseudoaleatoriedad es una aleatoriedad tan perfecta que es hasta previsible.
Segundo: que a no ser que pongamos un hámster dentro de la torre y capturásemos sus movimientos aleatorios (pobre hámster) difícilmente conseguiremos aleatoriedad real a partir de los cálculos de una computadora.
De hecho hay algunas técnicas para generar aleatoriedad, sobretodo en seguridad, que mezclan números aleatorios a partir de movimientos analógicos como los del ratón, lo cual añade unas variables reales para generar esos números. Y esque ¿qué hay más aleatorio que la naturaleza?
Así que, amigos de Winamp, ahora todavía me creo más que siempre me salen las mismas canciones… voy a acabar por desactivar el aleatorio.
Resulta que hasta dónde soy consciente las funciones aleatorias se basan gran parte en la CPU para generar esos números aleatorios y por tanto, como una CPU siempre trabaja en la misma frecuencia al final la aleatoriedad resulta ser pseudoaleatoriedad.
¿Y ésto qué significa?
Primero: que la pseudoaleatoriedad es una aleatoriedad tan perfecta que es hasta previsible.
Segundo: que a no ser que pongamos un hámster dentro de la torre y capturásemos sus movimientos aleatorios (pobre hámster) difícilmente conseguiremos aleatoriedad real a partir de los cálculos de una computadora.
De hecho hay algunas técnicas para generar aleatoriedad, sobretodo en seguridad, que mezclan números aleatorios a partir de movimientos analógicos como los del ratón, lo cual añade unas variables reales para generar esos números. Y esque ¿qué hay más aleatorio que la naturaleza?
Así que, amigos de Winamp, ahora todavía me creo más que siempre me salen las mismas canciones… voy a acabar por desactivar el aleatorio.



Gracias por leer. Espero que te haya gustado. Si ha sido así, por favor compartí y seguime para conocer antes que nadie cuando salen los nuevos post. Siéntete con libertad de comentar. Tus opiniones son importantes para mi. Saludos a todos.

