Por @Alvy — 2 de Mayo de 2022

Birthday Paradox Simulator by Brain Feast

Para presentar la archivoconocida paradoja del cumpleaños se suele hacer ver a la gente reunida en una clase cuántas personas hay –quizá 30 ó 40– y que un año tiene 365 días. Luego se pregunta si creen probable que dos personas cumplan años el mismo día; también se puede pedir estimar cuántas personas harían falta para que la probabilidad de que esto suceda sea más del 50%. Con un número de gente grande –pero tampoco hace falta que sea inmenso– hay quien incluso propone apostar dinero de verdad, sabiendo que tiene las leyes de la probabilidad a su favor, como demuestran algunos cálculos.

Y es que este efecto se denomina paradoja porque el resultado es contrario a la intuición: hacen falta tan solo 23 personas en un grupo para que esta probabilidad sea más del 50%. La clave es que el problema pide «que dos personas cumplan años el mismo día», no que haya alguien que cumpla el mismo día que otra persona en concreto. En primer caso, 23 personas pueden formar 253 parejas distintas, y todas son candidatas. Si nos refiriéramos sólo a una de las personas en concreto sería de 1/365 para cada una de las 22 personas, (22/365) = ~6% en total, que es mucho menos. (Nota: Se suelen ignorar los años bisiestos.)

Para que se vea más claro Brain Feast ha convertido todo esto en un Simulador de la Paradoja del Cumpleaños en Unity, donde hay botones para pulsar y modificar ciertas variables:

Se puede aumentar o disminuir el número de personas (People) en cada habitación, y pulsando en Generar habitación (Generate Room) se eligen las fechas para todas las personas, con número entre el 1 y 365 que simboliza todos los días del año.

Como resultados, los colores indican si las fechas no se repiten (rojo) o coinciden (verde); de hecho a veces coincide más de una pareja. Lo más interesante es que se pueden generar muestras aleatorias de 10 en 10, o de 100 en 100 o en múltiplos de 10 (botón Sample) para hacer pruebas más rápido. Los paneles de la parte inferior derecha acumulan y promedian los resultados para que se vea cómo de significativa es la estadística a medida que evoluciona (en el simulador esto se explica como «número de habitaciones visitadas»).

Aumentando el número de personas en la habitación es fácil ver cómo cada vez es más difícil evitar que coincidan dos fechas; en el caso límite en una habitación con 365 personas sería prácticamente imposible que no hubiera coincidencias, porque cada persona tendría que haber nacido exactamente en un día distinto del año.

Además de comprobar cómo el famoso valor de 23 es numéricamente preciso en el caso de las fechas de cumpleaños para superar esa barrera del 50% (concretamente la probabilidad es 50,7%; en el caso de sólo 22 personas es sólo del 47,6%) lo más importante de esa paradoja es saber reconocerla en otras situaciones. Una vez asimilada, muchas de esas «coincidencias increíbles» que observamos en nuestra vida cotidiana dejan de ser tales, porque el número de «posibles coincidencias» es tan grande que a veces resultan ser sucesos más probables que improbables.

Relacionado:

Compartir en Flipboard Tuitear

PUBLICIDAD



Por @Alvy — 14 de Mayo de 2021

RNG | John D. Cook

John D. Cook tiene una serie de interesantes anotaciones sobre generadores de números aleatorios a las que se puede acceder bajo la etiqueta: RNG. Esto tiene aplicaciones tanto en criptografía como en muchas áreas de física y matemáticas, incluyendo las simulaciones.

En las explicaciones se habla desde los generadores de números aleatorios congruentes de la forma xn+1 = a xn mod m a otros con nombres más exóticos. Todos buscan un difícil equilibrio entre algo sencillo y fácil de implementar (aunque no genere números demasiado aleatorios) y otros más complejos y difíciles de llevar a la práctica –ya sea por capacidad de cómputo o complejidad del código– que puedan pasar más pruebas de aleatoriedad.

Algunos de estos algoritmos tienen nombres propios a cual más curioso: RANDU, MINSTD, DIEHARDER, PractRand y otros. También se explican varias formas para cómo extraer bits realmente aleatorios de fuentes sesgadas, como en el famoso problema de las «monedas cargadas», que se atribuye a John Von Neumann.

Relacionado:

Compartir en Flipboard Tuitear

PUBLICIDAD



Por @Alvy — 22 de Febrero de 2021

James de The Action Lab muestra en este vídeo cómo se puede construir el equivalente a un dado de seis caras pero con una pelota de ping-pong esférica, lo que los roleros llamarían un D6 esférico. Esto que en principio parece fácil, luego difícil y luego nuevamente fácil tiene su truco.

Para crear una primera versión se puede tomar una pelota de ping-pong y simplemente pintarle seis números en el equivalente a lo que sería un D6 convencional [el peso de la tinta se ignora; sería fácil compensarlo añadiendo puntitos blancos invisibles en todos los lados]. El problema es que una bola al ser esférica no tiene puntos de equilibrio y puede «aterrizar» en cualquiera de cualquier forma, de modo que puede resultar difícil e incluso discutible el resultado, aunque sea por aproximación.

La solución es meter dentro un octaedro hueco en su interior: como tiene seis vértices, se puede usar una bolita pesada para que al rodar por la mesa se decante por uno de los vértices. Problema resuelto con ingenio. Aquí hay una página con ficheros para imprimir en 3D esos octaedros.

En el vídeo también pueden verse unos curiosos dados llamados trapezoedros trigonales asimétricos que tienen aspecto de cubo deformado, en «versión Dalí» podríamos decir. A pesar de su forma son equilibrados y «justos», en el sentido de que los números de todas las caras tienen la misma probabilidad tras un lanzamiento (algo que no sucede en otro tipo de formas geométricas). Sin embargo, tal y como advierte James, no todos los dados son «justos» aunque lo parezcan, pues con cierta habilidad se pueden manipular. A veces hacerlos más «justos» requiere estudiar cómo se reparten los puntos en las diferentes caras, como ya explicamos para dados D20, D30 y otras variantes.

Relacionado:

Compartir en Flipboard Tuitear

PUBLICIDAD



Por @Alvy — 16 de Octubre de 2020

El hombre de las fotos | Microsiervos (Fotografía)

Generar números aleatorios no es fácil para los ordenadores, inherentemente deterministas. Por eso se trabaja en algoritmos que permitan generarlos cumpliendo con diferentes definiciones de aleatoriedad y a la vez ciertas premisas: que no requieran mucha memoria, que el código sea rápido y no demasiado complejo y que los resultados sean «reproducibles» (por ejemplo en simulaciones). Esto último es en cierto modo un poco paradójico, pero es así como funcionan: una vez iniciado un generador con un valor dado debería generar siempre la misma secuencia.

En la página dedicada a la familia PCG de generadores de números aleatorios hay una interesante tabla que muestra todas estas características para los diversos algoritmos que se utilizan habitualmente: Mersenne, ARC4Random, LCG 64/32, XorShift 32/64, RanQ… El propio PCG, explicado en este paper dice ser una solución que cubre con todas las necesidades:

El nombre de la familia, PCG, significa generador congruente permutable. Combina los dos conceptos que subyacen en el esquema de generación, a saber: las funciones de permutación en tuplas y se emplea un generador congruente lineal.

Toda la documentación y el blog que está en esa misma página son interesantes para entender algunos de los problemas actuales: que los generadores de números aleatorios no son suficientemente aleatorios, que algunos son demasiado predecibles o inseguros, lentos o que no tienen funciones que serían muy útiles como el «saltar hacia adelante» (jump ahead). El código está disponible en C y C++.

Las aplicaciones de los generadores de números aleatorios van mucho más allá de usarlos en juegos y simulaciones: también juegan un papel importante en criptografía y seguridad. Si se utilizan generadores inseguros puede que un buen algoritmo criptográfico no sirva de nada o sea fácilmente vulnerable; de ahí su importancia.

Relacionado:

Compartir en Flipboard Tuitear

PUBLICIDAD




PUBLICIDAD

Desarrolla más rápido con Xojo