Desayunando azar

Equipado con la información de cada uno de los “números ganadores”, o una db con la información de miles de rondas de un casino, es posible realizar diversas queries en búsquedas de secuencias o ordenes en la información.


Analizando el azar.

Sobre George Marsaglia y Diehard

Algunas colecciones o librerías fueron creadas hace algunos años, a fin de analizar secuencias, que a simple observación parecen ser generadas al azar.

Al día de la fecha, no hay disponible información en español sobre las librerías Diehard, ni mucho menos TU01lease “Prueba U. versión 01”, creada por el señor George Marsaglia – de las cuales solo es imposible localizar información en Inglés, Ruso y Japonés.

En lineas generales, dichas librerías, se componen de un grupo de pruebas las cuales hacen posible evaluar la calidad de una secuencia de valores “al azar”. Como sería obvio esperar, las librerías son por lo general usadas para corroborar y verificar secuencias de valores al azar, a fin de crear secuencias más seguras. Del mismo modo, las librerías son capaces de localizar “fallas” o algunas formas en las secuencias dadas.

Sería recomendable que cualquier casino online realice dichas pruebas a fin de corroborar que en verdad no hay riesgo que de un usuario pueda predecir los próximos números.


 

Analizando la información con imágenes

Pasando la información a un mapa

Dado que como seres humanos nos es más simple analizar una imagen que una secuencia de miles de números, decidí usar un mecanismo clásico para visualizar las secuencias, asignando pequeños pixeles blancos a los valores inferiores y pixeles negros a los valores superiores.

De esa manera, pasemos a analizar una secuencia de 100 unidades, donde los valores menores a 2, son considerados píxeles claros, y los mayores a 2, píxeles oscuros:

  • 15.49, oscuro
  • 7.42, oscuro
  • 1.04, claro
  • 2.71, oscuro
  • 1.95, claro
  • 4, oscuro
  • 4.4, oscuro
  • 1.52, claro
  • 28.69, oscuro
  • 7.44, oscuro
  • 1.1, claro
  • 1.1, claro
  • 1.41, claro
  • 1.04, claro
  • 1.66, claro
  • 8.44, oscuro
  • 1.55, claro
  • 2.39, oscuro
  • 2.9, oscuro
  • 1.66, claro
  • 2.7, oscuro
  • 7.53, oscuro
  • 2.04, oscuro
  • 1.97, claro
  • 1.35, claro
  • 1.83, claro
  • 2.63, oscuro
  • 2.81, oscuro
  • 1.06, claro
  • 2.81, oscuro
  • 21.74, oscuro
  • 1.53, claro
  • 2.04, oscuro
  • 3.94, oscuro
  • 1.9, claro
  • 1.26, claro
  • 1.61, claro
  • 1.31, claro
  • 49.3, oscuro
  • 16.9, oscuro
  • 2.05, oscuro
  • 1.85, claro
  • 15.22, oscuro
  • 1.12, claro
  • 1.57, claro
  • 1.51, claro
  • 7.58, oscuro
  • 1.73, claro
  • 1.17, claro
  • 1.46, claro
  • 1.64, claro
  • 6.72, oscuro
  • 18.69, oscuro
  • 8.95, oscuro
  • 19.9, oscuro
  • 2.98, oscuro
  • 54.82, oscuro
  • 3, oscuro
  • 3.06, oscuro
  • 1.66, claro
  • 1.03, claro
  • 1.03, claro
  • 10.57, oscuro
  • 1.4, claro
  • 1.98, claro
  • 1.05, claro
  • 2.44, oscuro
  • 1.29, claro
  • 1.21, claro
  • 3.72, oscuro
  • 6.18, oscuro
  • 4.41, oscuro
  • 1.25, claro
  • 3.25, oscuro
  • 2.46, oscuro
  • 6.75, oscuro
  • 2.11, oscuro
  • 1, claro
  • 1.58, claro
  • 1.02, claro
  • 1.99, claro
  • 2.3, oscuro
  • 2.14, oscuro
  • 3.46, oscuro
  • 1.58, claro
  • 1, claro
  • 1.23, claro
  • 2.16, oscuro
  • 3.63, oscuro
  • 2.43, oscuro
  • 1.71, claro
  • 3.27, oscuro
  • 1.23, claro
  • 2.18, oscuro
  • 1.87, claro
  • 1.76, claro
  • 1.55, claro
  • 2.56, oscuro
  • 1.14, claro
  • 1.66, claro

Por más absurdo que parezca, es posible simplificar esa serie en solo un puñado de pixeles:

El pequeño cuadrado, conformado de 10 unidades de largo por 10 unidades de ancho, brinda información sobre 100 rondas. Es claro que uno podría asignar un abanico de grises, a fin de visualizar aún más información sobre los valores.

 Analicemos ahora un mapa más grande:

La imagen que vemos, posee información sobre 9,000 rondas. De ser de alguna manera necesario, enumeraría cada uno de los números, a fin de que puedan apreciar el largo de la información, y lo muy comprimida que se observa.


Buscando posibles operaciones

Claro perdemos, oscuro, ganamos.

Ahora que ya vimos como podemos condensar la información en un mapa, podemos considerar algunas secuencias para ganarle al dichoso casino.

Lo primero a considerar, que podría ser obvio, es que los espacios claros nos hacen perder, y es en los oscuros donde ganamos.

Dicho eso, asumamos que vamos a realizar una Martingala, solo que en vez de duplicar a la próxima ronda, haremos uso de diversas formas y espacios para colocar las fichas, veamos de nuevo el video del comienzo:

El encuadre: los valores fueron localizados, de manera inicial, y sin demasiado análisis, en una grilla de 600 x 600 pixeles, y cada unidad, fue definida en 6 pixeles, incluyendo los bordes, de manera que cada fila, dispone de 100 valores.

Considerando que hay 100 valores por fila, podemos decir con seguridad que serán 90 filas de 100, generando así el mapa de 9,000 unidades, más allá de lo difícil que pueda ser visualizarlo de esa manera.

La selección: esos pequeños cuadrados de color son el modelo con el cual vamos a realizar la progresión, de manera que si el cuadrado cae sobre un espacio blanco, perdemos, y duplicaremos las fichas para la próxima posición de la selección / el modelo seleccionado.


Revisando el modelo por medio de la imagen:

Es posible revisar el modelo de selección desde la imagen, solo a fines de darnos una idea de como funciona el mecanismo. Es claro que el proceso debe de ser llevado a una función, para luego analizar millones de formas usando ecuaciones sobre la db.

Primera imagen: Las posiciones 1, 2 y 3, de las 9 posiciones que conforman el grupo, al caer sobre casilleros blancos (casilleros inferiores a 2), son consideradas rondas perdidas. La posición se gana una vez que se alcanza la ronda #4, por lo que el final de la secuencia no se lleva a cabo.


Segunda imagen: no es más que una simulación válida de como se vería en realidad, dado que una vez que se ganó la ronda no es necesario seguir con la forma.


Tercera imagen: se puede ver una secuencia de secuencias, diversas formas siendo corridas a la par. Las formas/procesos no han sido cerradas al alcanzar el valor superior, por lo que la imagen no es una simulación válida, más que sirve para visualizar las posibles superposiciones y varias formas en paralelo.


Para finalizar: podemos una simulación más aproximada. Incluyendo un 32 (corresponde a 25 en poderes de dos). Y una superposición casi al final de la imagen, donde una posición es correspondida por dos secuencias, sumando 12, lo que corresponde a la suma de las dos secuencias 23 + 22

En caso de que la superposición persevere, las formas al cabo de unas rondas, bifurcaran sus caminos, anulando la superposición.

Llegado acá: quizás sea bueno recordar, que cada fila, dispone de 100 valores. De manera que la segunda posición, por más cerca que de la impresión de ubicarse de la primera, es en realidad, hecha, no 100, sino 200 rondas después (algo más de una hora después para el casino analizado). Del mismo modo , la #3 posición, posee un margen de 400 rondas, que sería calculable en un poco más de 2 horas de espera.


Traduciendo la forma a una ecuación.

Habiendo diseñado la primera forma, el próximo paso es pasarla a una función a fin de validarla, de corroborar las veces que gana y pierde al procesarla a la información previa. Comencemos:

  • #1 posición corresponde al round #1.
  • #2 posición, corresponde al round #201 (doble descenso)
  • #3 posición corresponde al round #401 (doble descenso)
  • #4 posición corresponde al round #403 (doble derecha)
  • #5 posición corresponde al round #405 (doble derecha)
  • #6 posición: corresponde al round #605 (doble descenso)
  • #7 posición: corresponde al round #805 (doble descenso)
  • #8 posición: corresponde al round #807 (doble derecha)
  • #9 posición: corresponde al round #809 (doble derecha)

Por lo que la forma se podría expresar como:

  1. x
  2. x + 200
  3. x + 400
  4. x + 402
  5. x + 404
  6. x + 604
  7. x + 804
  8. x + 806
  9. x + 808

En caso de perder el grupo, la perdida sería de 511 unidades, dada los nueve indices de la cadena. Fácil de calcular haciendo -1 sobre el próximo poder.


Pasando la función a SQL

Pasemos la operación a SQL para comenzar con las pruebas:

Lo que nos devuelve:

round value class creacion
1 15,49 high 2018-01-27 14:03:54
201 18,61 high 2018-01-27 15:59:57
401 69,42 high 2018-01-27 17:20:03
403 11,18 high 2018-01-27 17:21:47
405 2,3 high 2018-01-27 17:22:39
605 8,17 high 2018-01-27 18:36:23
805 2,5 high 2018-01-27 19:53:36
807 2 high 2018-01-27 19:54:33
809 1,41 low 2018-01-27 19:56:02

Se puede observar una diferencia de casi 6 horas desde la primera ronda hacia el final de la serie de 9. La aplicación que opere deberá usar una db para llevar la información bien organizada.


Simplificando la SQL:

Dado que con solo 1 valor mayor al dos, ya sabemos que la secuencia funcionó,  y considerando que la operación deberá de ser realizada más de medio millon de veces, podemos simplificar aún más la selección a fin de agilizar el proceso.

Lo que nos devuelve solo un valor!

round class_cadena
1 high, high, high, high, high, high, high, high, low

Ahora que ya creamos la selección en SQL, el próximo paso, es la creación de un guión que incluya la selección, y realice pruebas sobre cada uno de los 600,000 records, a fin de calcular, en primera medida, las veces que pierde, las veces que gana y la diferencia.


Evaluando el modelo:

La primera versión del código, a la cual decidí llamar “shape_eval.php” preparada para correr en cli php, se ve así:

Podemos correr el código sin más… “php -f shape_eval.php” y… llevarnos la agradable sorpresa de que la primera forma da mucha pelea! sin embargo, no logra ganarle en el largo plazo a la banca.


La primera secuencia perdida, se ve en la ronda 1675, para cuando lleva ganadas, 1,674 rondas (o bien el mismo número en dólares) y luego pierde 511 unidades.

En el largo plazo el dinero acumulado, crece y decrece, pero no alcanza valores considerables.

[round] => 1673
[class_cadena] => hi, hi, low, low, low, hi, low, low, low
[dinero] => 1673

[round] => 1674
[class_cadena] => hi, low, hi, low, hi, hi, low, low, low
[dinero] => 1674

[round] => 1675
[class_cadena] => low, low, low, low, low, low, low, low, low
[dinero] => 1163

Podemos confirmar la perdida, usando la seleccion SQL previa con el valor 1675.


Subiendo la velocidad del guión

A fin de probar una infinidad de formas posibles, queremos que el código corra y nos de la información lo más rápido que pueda.

Conservamos la primera versión, dado que nos da la información necesaria para una revisión manual y  pasamos a crear una nueva copia del código para realizar algunos cambios:

$ php -f quick_shape_eval.php
Ronda: 1675, Dinero: 1163

La nueva versión nos da la información sin demoras.


Nuevas figuras, creación de formas

El código que lo genera no es más que una nueva forma. Al parecer las formas en verdad producen grandes variaciones.

Observaciones: se aplica una variable desplazador, a fin de mover la segunda figura, varias posiciones, luego, se emplea una función rand a fin de generar variaciones azarosas en el desplazador.


$ php -f quick_shape_eval.php

  • Ronda: 3231, Dinero: -865, Desplazador: 18
  • Ronda: 18096, Dinero: 9904, Desplazador: 18
  • Ronda: 19703, Dinero: 7415, Desplazador: 18
  • Ronda: 24122, Dinero: 7738, Desplazador: 18
  • Ronda: 31079, Dinero: 10599, Desplazador: 18
  • Ronda: 38339, Dinero: 13763, Desplazador: 18
  • Ronda: 42237, Dinero: 13565, Desplazador: 18
  • Ronda: 43859, Dinero: 11091, Desplazador: 18
  • Ronda: 44135, Dinero: 7271, Desplazador: 18
  • Ronda: 62462, Dinero: 21502, Desplazador: 18
  • Ronda: 66130, Dinero: 21074, Desplazador: 18
  • Ronda: 67874, Dinero: 18722, Desplazador: 18
  • Ronda: 69164, Dinero: 15916, Desplazador: 18
  • Ronda: 77431, Dinero: 20087, Desplazador: 18
  • Ronda: 78524, Dinero: 17084, Desplazador: 18
  • Ronda: 78916, Dinero: 13380, Desplazador: 18
  • Ronda: 96787, Dinero: 27155, Desplazador: 18
  • Ronda: 96909, Dinero: 23181, Desplazador: 18
  • Ronda: 108596, Dinero: 30772, Desplazador: 18
  • Ronda: 108852, Dinero: 26932, Desplazador: 18
  • Ronda: 109057, Dinero: 23041, Desplazador: 18
  • Ronda: 111030, Dinero: 20918, Desplazador: 18
  • Ronda: 111478, Dinero: 17270, Desplazador: 18
  • Ronda: 119748, Dinero: 21444, Desplazador: 18
  • Ronda: 123396, Dinero: 20996, Desplazador: 18
  • Ronda: 124455, Dinero: 17959, Desplazador: 18
  • Ronda: 127590, Dinero: 16998, Desplazador: 18
  • Ronda: 133603, Dinero: 18915, Desplazador: 18
  • Ronda: 144724, Dinero: 25940, Desplazador: 18
  • Ronda: 145982, Dinero: 23102, Desplazador: 18
  • Ronda: 150853, Dinero: 23877, Desplazador: 18
  • Ronda: 157389, Dinero: 26317, Desplazador: 18
  • Ronda: 158789, Dinero: 23621, Desplazador: 18
  • Ronda: 164318, Dinero: 25054, Desplazador: 18
  • Ronda: 171312, Dinero: 27952, Desplazador: 18
  • Ronda: 172869, Dinero: 25413, Desplazador: 18
  • Ronda: 172954, Dinero: 21402, Desplazador: 18
  • Ronda: 175171, Dinero: 19523, Desplazador: 18
  • Ronda: 187356, Dinero: 27612, Desplazador: 18
  • Ronda: 189630, Dinero: 25790, Desplazador: 18
  • Ronda: 191617, Dinero: 23681, Desplazador: 18
  • Ronda: 200002, Dinero: 27970, Desplazador: 18
  • Ronda: 200229, Dinero: 24101, Desplazador: 18
  • Ronda: 212277, Dinero: 32053, Desplazador: 18
  • Ronda: 216709, Dinero: 32389, Desplazador: 18
  • Ronda: 222839, Dinero: 34423, Desplazador: 18
  • Ronda: 229282, Dinero: 36770, Desplazador: 18
  • Ronda: 229714, Dinero: 33106, Desplazador: 18
  • Ronda: 230079, Dinero: 29375, Desplazador: 18
  • Ronda: 230603, Dinero: 25803, Desplazador: 18
  • Ronda: 230704, Dinero: 21808, Desplazador: 18
  • Ronda: 244536, Dinero: 31544, Desplazador: 18
  • Ronda: 248401, Dinero: 31313, Desplazador: 18
  • Ronda: 254168, Dinero: 32984, Desplazador: 18
  • Ronda: 254246, Dinero: 28966, Desplazador: 18
  • Ronda: 258557, Dinero: 29181, Desplazador: 18
  • Ronda: 260179, Dinero: 26707, Desplazador: 18
  • Ronda: 262689, Dinero: 25121, Desplazador: 18
  • Ronda: 263019, Dinero: 21355, Desplazador: 18
  • Ronda: 265546, Dinero: 19786, Desplazador: 18
  • Ronda: 266976, Dinero: 17120, Desplazador: 18
  • Ronda: 267080, Dinero: 13128, Desplazador: 18
  • Ronda: 273700, Dinero: 15652, Desplazador: 18
  • Ronda: 277167, Dinero: 15023, Desplazador: 18
  • Ronda: 280853, Dinero: 14613, Desplazador: 18
  • Ronda: 304613, Dinero: 34277, Desplazador: 18
  • Ronda: 307634, Dinero: 33202, Desplazador: 18
  • Ronda: 308924, Dinero: 30396, Desplazador: 18
  • Ronda: 309982, Dinero: 27358, Desplazador: 18
  • Ronda: 314732, Dinero: 28012, Desplazador: 18
  • Ronda: 317613, Dinero: 26797, Desplazador: 18
  • Ronda: 319695, Dinero: 24783, Desplazador: 18
  • Ronda: 322440, Dinero: 23432, Desplazador: 18
  • Ronda: 330094, Dinero: 26990, Desplazador: 18
  • Ronda: 336068, Dinero: 28868, Desplazador: 18
  • Ronda: 339955, Dinero: 28659, Desplazador: 18
  • Ronda: 341990, Dinero: 26598, Desplazador: 18
  • Ronda: 349877, Dinero: 30389, Desplazador: 18
  • Ronda: 352397, Dinero: 28813, Desplazador: 18
  • Ronda: 359724, Dinero: 32044, Desplazador: 18
  • Ronda: 366472, Dinero: 34696, Desplazador: 18
  • Ronda: 375968, Dinero: 40096, Desplazador: 18
  • Ronda: 382842, Dinero: 42874, Desplazador: 18
  • Ronda: 382903, Dinero: 38839, Desplazador: 18
  • Ronda: 383146, Dinero: 34986, Desplazador: 18
  • Ronda: 388984, Dinero: 36728, Desplazador: 18
  • Ronda: 389027, Dinero: 32675, Desplazador: 18
  • Ronda: 390477, Dinero: 30029, Desplazador: 18
  • Ronda: 395623, Dinero: 31079, Desplazador: 18
  • Ronda: 398773, Dinero: 30133, Desplazador: 18
  • Ronda: 403242, Dinero: 30506, Desplazador: 18
  • Ronda: 404540, Dinero: 27708, Desplazador: 18
  • Ronda: 405695, Dinero: 24767, Desplazador: 18
  • Ronda: 416663, Dinero: 31639, Desplazador: 18
  • Ronda: 417750, Dinero: 28630, Desplazador: 18
  • Ronda: 417885, Dinero: 24669, Desplazador: 18
  • Ronda: 423093, Dinero: 25781, Desplazador: 18
  • Ronda: 423322, Dinero: 21914, Desplazador: 18
  • Ronda: 425134, Dinero: 19630, Desplazador: 18
  • Ronda: 427026, Dinero: 17426, Desplazador: 18
  • Ronda: 431638, Dinero: 17942, Desplazador: 18
  • Ronda: 436953, Dinero: 19161, Desplazador: 18
  • Ronda: 439344, Dinero: 17456, Desplazador: 18
  • Ronda: 448850, Dinero: 22866, Desplazador: 18
  • Ronda: 449248, Dinero: 19168, Desplazador: 18
  • Ronda: 449290, Dinero: 15114, Desplazador: 18
  • Ronda: 451003, Dinero: 12731, Desplazador: 18
  • Ronda: 454174, Dinero: 11806, Desplazador: 18
  • Ronda: 458870, Dinero: 12406, Desplazador: 18
  • Ronda: 461360, Dinero: 10800, Desplazador: 18
  • Ronda: 468043, Dinero: 13387, Desplazador: 18
  • Ronda: 468505, Dinero: 9753, Desplazador: 18
  • Ronda: 479012, Dinero: 16164, Desplazador: 18
  • Ronda: 483270, Dinero: 16326, Desplazador: 18
  • Ronda: 484982, Dinero: 13942, Desplazador: 18
  • Ronda: 486061, Dinero: 10925, Desplazador: 18
  • Ronda: 486824, Dinero: 7592, Desplazador: 18
  • Ronda: 487129, Dinero: 3801, Desplazador: 18
  • Ronda: 490896, Dinero: 3472, Desplazador: 18
  • Ronda: 491291, Dinero: -229, Desplazador: 18
  • Ronda: 505451, Dinero: 9835, Desplazador: 18
  • Ronda: 517919, Dinero: 18207, Desplazador: 18
  • Ronda: 517920, Dinero: 14112, Desplazador: 18
  • Ronda: 524365, Dinero: 16461, Desplazador: 18
  • Ronda: 526280, Dinero: 14280, Desplazador: 18
  • Ronda: 535773, Dinero: 19677, Desplazador: 18
  • Ronda: 540430, Dinero: 20238, Desplazador: 18
  • Ronda: 544392, Dinero: 20104, Desplazador: 18
  • Ronda: 548472, Dinero: 20088, Desplazador: 18
  • Ronda: 557763, Dinero: 25283, Desplazador: 18
  • Ronda: 565300, Dinero: 28724, Desplazador: 18
  • Ronda: 568509, Dinero: 27837, Desplazador: 18
  • Ronda: 573013, Dinero: 28245, Desplazador: 18
  • Ronda: 574357, Dinero: 25493, Desplazador: 18
  • Ronda: 575661, Dinero: 22701, Desplazador: 18
  • Ronda: 580807, Dinero: 23751, Desplazador: 18
  • Ronda: 586002, Dinero: 24850, Desplazador: 18
  • Ronda: 588750, Dinero: 23502, Desplazador: 18
  • Ronda: 591143, Dinero: 21799, Desplazador: 18
  • Ronda: 591243, Dinero: 17803, Desplazador: 18
  • Ronda: 591644, Dinero: 14108, Desplazador: 18

Será resumido…


Creo que a fin de finalizar la idea, o al menos la publicación, a modo de darle un cierre a la visualización de azar, sería bueno poner la imagen final que logré generar procesando cada uno de los valores, desde el comienzo, al día de hoy.

La imágen posee buena resolución y pesa alrededor de los dos megas, asumo que puede ser usada como referencia si se desearan buscar formas en el mapa. Cada unidad se compone de 6 pixeles.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *