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.

 

La maquina que programa hombres.

Supongamos que han pasado algunas decenas de años, y alguien ha logrado la forma, de crear una maquina, como si fuera un casco, el cual ubicado en la cabeza del usuario, es capaz de cambiar sus creencias con solo un click.

El usuario, quien va a una clínica para realizar el proceso, se coloca el casco, y comienza la re programación.

¿Desearía Ud no desear fumar nunca más? En caso de seleccionar sí, una secuencia de pulsos será enviada por el casco, a fin de que Ud nunca más desee encender un cigarrillo.

[ Realizar cambios ] [ conservar ]

( * ) En caso de que así no lo fuera, puede volver para reforzar la programación, sin cargo, usando solo su número de socio y clave de acceso.

¿Desería Ud ser menos ambicioso? En caso de seleccionar sí, una secuencia de pulsos será enviada por el casco, la cual reducirá su nivel de ambición,

Aviso: como consecuencia subirá su nivel de conformismo, puede que algunos enlaces o creencias análogas se vean modificadas.

[ Reducir ambición ] [ conservar ]

Se han localizado miedos a diversas enfermedades y condiciones médicas: incluyendo Alzheimer, Parkinson, y las infecciones de Malaria.

[ Desea eliminar los miedos localizados? ] Ƀ0.2
[ O prefiere aplicar vacunas para eliminar las chances en un 97%? ] Ƀ 3.2
[ Conservar mis miedos ]

A un precio accesible, la maquina de reprogramación, puede hacer que Ud sea quien en verdad quiere ser… o quien le hicieron creen, que ud en verdad quiera ser.

Vale la pena mencionar que el nuevo modelo, no poseía ninguna relación con la Terapia de choques del siglo XX.

El mecanismo hacía uso de redes neuronales, descargando y recreando modelos neuronales, únicos para cada individuo, reconociendo sus formas, y aplicando modificaciones a medida, primero en una realidad simulada por ordenador, donde el modelo ya había sido creado, y luego reproduciendo los mismos cambios, solo si el usuario así lo deseaba, en el mismo cerebro del individuo, verificando a cada epoch, si los cambios deseados habían sido aplicados de la manera deseada.

Al igual que un recién nacido libre de un modelo de bien o mal, de blanco o negro, la realidad como una desvinculada serie de episodios, unidas solo por un hilo principal. Quizás la maquina no sea solo, más que una analogía de la sociedad.

Una vida armoniosa

Desearía poder decir que la mayoría de mis ocurrencias le deben las gracias a una niñez y adolescencia armoniosas, el clonazepam, el paxil, una vida ordenada, con buen descanso, merienda y cena; pero la verdad es que más bien, le debo las gracias a mis excesos de cafeína, redbull, alucinógenos ligeros, bebidas alcohólicas, una vida desorganizada y la mismísima bipolaridad.

No recuerdo haber cenado un solo día del mes a la misma hora, en verdad, muchas veces recuerdo no haber cenado. En lo que refiere al almuerzo, venga, si vamos a hablar de la primera comida después del desayuno, eso fue muchas veces pasadas las 2 de la mañana.

A medida que lo pienso, y procuro recordar, pareciera volverse cada vez más difícil hablar de almuerzo y cena. Eso claro, sin mencionar, el desorden propio de los horarios.

Algunos amigos, a veces recomiendan buscar el orden. Pareciera haber alguna mágia o, digamosle “buena vida”, “buen vivir” al vivir en orden. Claro, con orden casi siempre significa con horarios.

Horarios de irse a dormir, horarios para comenzar el día, horarios para desayunar, almorzar, merendar, cenar. Horarios para ir a la oficina, horarios para salir de la oficina.

Pensé que si fueran programas, serían variables ancladas y globales, números que nunca cambian.

Del mismo modo deberían de ser los ingresos de la persona modelo. La persona modelo, quien dispone siempre de un dinero a fin de mes, el cual es, en gran medida, más o menos el mismo dinero que para la misma fecha, del mes pasado, cobrado, solo para no variar, en el mismo banco.

¿Qué hay de especial en la formula? ¿Podría alguien a caso, en cualquier caso, conseguir algo nuevo haciendo, y volviendo hacer día a día las mismas cosas, con los mismos números y el mismo orden?

Volví a mirar el piso, me desangraba. La bala en el brazo derecho parecía haber pegado en un mal lugar y la sangre corría a medida que perdía la conciencia.

El edificio. El blanco, el pendrive. El guardia. La alarma, la policía. El pedido.

En cualquier caso, nunca sería como ellos, pensé. Las luces y las enfermeras. La clínica, el quirófano. Cualquier persona que no viva con sus propias reglas, no debería vivir. Volví a respirar, miré mi brazo y el médico de guardia parecía haberme salvado la vida. Hacían presión sobre el brazo.

La bala? El médico?

Desarrollando un videogame: revision 1

Una idea de negocios con videogames y blockchain.

Después de lo que creo que fueron unas 8 semanas que he pasado queriendo comprender la lógica empleada por un generador de azar de un casino online, decidí darme a mi mismo una pausa indefinida.

Es difícil de decir si en verdad hice algún progreso analizando más de medio millón de valores, dado que en verdad no logré crear ninguna función que logre ganarle a la casa.


El negocio

Sin embargo, de la información que logré recopilar, el dinero generado por el casino, es sin dudas una de las variables que más sorprende. Más de medio millon de dólares mensuales. Imposibles de fiscalizar. Tax free. Más aún dependiendo del valor de la moneda, podría superar con facilidad el millón mensual.


Classic + Blockchain

Lo cual me llevó a pensar en reciclar algunos de los clásicos, los “All Time Classics Games” he incorporarles un poco de blockchain por acá y allá.

La idea es simple, armar un mínimo de 10 videogames online, y modificarlos, de manera que los usuarios que ganan, ganen dinero y los que pierdan, pierdan!


¿Por qué empezar con 10 y no solo con uno?

La principal razón para evaluar con 10 aplicaciones a la vez, es dado que considero que las chances de que funcione al menos 1 en 10 son mayores a las chances de que funcione 1 en 1.

El proceso comenzaría por buscar videogames ya programados, los cuales se puedan correr desde el navegador.

Un servidor dedicado es necesario para poder correr con fluidez, las diversas conexiones y necesidades de una aplicación masiva. Sin embargo, dado que el volumen de usuarios no será grande al comienzo, sería posible hacer andar diversas aplicaciones en el mismo servidor.


Proceso de creación

  • 1 Servidor dedicado (asumo que AWS)
  • 10 aplicaciones ya funcionando que sean open source.
  • 1 programador JS que pueda modificar las aplicaciones.

El programador (quien no podría ser yo dado que mi experiencia en el campo es casi nula) debería solo realizar las modificaciones que sean necesarias a fin de que:

  1. Se creen usuarios, incluyendo un password, previo a comenzar.
  2. Se ponga un mínimo de dinero en BTC, para comenzar.
  3. Gane dinero (específico para cada caso)
  4. Pierda dinero (específico para cada caso)
  5. La casa comisione un 1% cuando un usuario gana.
  6. Sacar o poner dinero.

Como se puede observar, la única diferencia sería en los casos 3 y 4, las cuales serían específicas para cada aplicación.

Más allá de eso, los mecanismos para crear el usuario y realizar las operaciones en BTC son siempre las mismas y deberían de ser recicladas.

Considerando que dichas funciones pueden ser usadas de forma indiscriminada para cada uno de los casos, y que en verdad no es necesaria la creación de nuevas aplicaciones, gracias a la magia del open source, se podría decir que el 80% del laburo ya viene hecho.

Por lo que solo quedaría en enfocarse en:

  • Localizar las aplicaciones.
  • Probarlas y subirlas.
  • Realizar las modificaciones necesarias para “hacerlas blockchain”.
  • Realizar la publicidad necesaria a fin de conseguir los primeros usuarios.

Recursos

Comencemos por enumerar links hacia las apps que podrían servir:

Referencia Nombre Código Demo
#1 Tank Anarchy Source code Demo
#2 Agar.io Source code Demo
#3 Wordchain Source code Demo
#4 Tic-Tac-Toe Source code
#5 Snake Source code Demo
#6 Curvas Source code Demo
#7 Tanks (oldie) Source code Demo
#8 Space Source code Demo
#9 Space 2 Source code Demo
#10 Mozilla BQ Source code Demo
#11 Sli Source code Demo

Procesos a ser realizados desde acá:

(1) El primer paso radica en descargar una copia de alguno de los videogames ya localizados en los links, y subir una copia del mismo al servidor.

(2) Luego el programador debe realizar cualquier modificación que se considere necesaria, aunque no es recomendable perder demasiadas horas en eso.

(3) Para finalizar solo añadir blockchain y promocionar, a fin de ver como responde el público!

¿Donde se puede realizar la publicidad?

No creo que sea recomendable hacer publicidad en google o facebook, aunque quizás sea buena idea probar. Es posible realizar publicidad por foros vinculados a BTC, redes privadas en facebook y demás.

Quizás sea recomendable la incorporación de mecanismos, que bonifiquen con BTC a los usuarios quienes refieren a un nuevo usuario. Lo ideal sería realizar los mecanismos de referral una vez definido el CAC.


Desacoplando el programador, unificando operaciones

Creación de una aplicación única para el balance

Después de reconsiderar el proceso de creación, logré simplificarlo aún un poco más, creando una única aplicación separada, que se encargue de realizar las operaciones en blockchain de cada usuario. De esa manera, el desarrollo es aún más fácil.

Se crea una aplicación única, que se encargue de:

  • Creacion de un nuevo usuario.
  • Recibir pagos en BTC para el usuario
  • Enviar pagos en BTC del usuario hacia donde sea específicado.

Una vez creada la aplicación, una db almacenaría la información así:

Email Usuario Password Balance
veronica@email.com Veronica 7f138a09169b250e9dcb378140907378 1223654
gabriel@email.com Gabriel 7fa3b767c460b54a2be4d49030b349c7 2548123
hernan@email.com Hernan 12470fe406d44017d96eab37dd65fc14 1548548
chris@email.com Chris 26956aeb988f877c1d4361a77bef4914 8542595
lara@email.com Lara 8060daf308dfb7b0862f28df17357dbb 9812132

Aquellos records corresponderían con usuarios válidos, y con saldo disponible para cualquiera de las aplicaciones, una vez armado el mecanismo de creación de usuarios y operaciones de balance, solo se realizarían los pasos ya mencionados:

  • Subir el primer videogame.
  • Modificarlo a fin de que cuando uno pierda, se reduzca el balance.
  • Modificarlo a fin de que cuando uno gane, el balance suba.

Hackeando Casinos en Blockchain

¿Cómo ganarle a un casino?

Suena complicado, no? Más bien suena como una de esas cosas que cualquier persona normal diría que es imposible.

Hace algunas semanas se me dio por recopilar, y analizar, lo más posible cada pizca de información disponible en una “sala de azar”.

Como podrán imaginarse, en verdad no me fue como esperaba, pero creo que la experiencia valió la pena, quizás, debería de haber frenado cuando iba ganando.

Aunque quizás sea imposible definir cuando uno “va ganando” con precisión… ganando $1 dólar? ganando $100? miles o decenas de miles?

En fin, la publicación se dividió en varias secciones, a fin de conservar el orden de la narración. Espero que a alguien le sirva de algo!


Casinos en Blockchain

Quizás, una de las principales razones que me lleva a mirar con cariño e interés estos sistemas de apuestas y casinos de bitcoin, es el hecho de que al día de hoy carecen de muchas de las regulaciones aplicables a casinos convencionales y casinos online.

Por el mismo hecho uno podría esperar que el dichoso “azar” no sea el mismo que los que por lo general son aplicados en casinos regulados, uno podría esperar que no usen verdaderos generadores de azar por hardware, sino más bien funciones generadas por la aplicación.

Más allá del azar, la verdad es que armar un casino en linea es ahora más fácil que nunca. Las regulaciones que aún no caen en lugar y las monedas digitales como BTC o ETH hacen posible rápidas dinámicas que no eran posibles hace una década.

El dinero se mueve cada vez más rápido, de las monedas pasamos al papel, del papel a los bancos, dando lugar a fenómenos como visa o american express.

Haciendo que el dinero ya se no pueda agarrar… las monedas del 2018 llevan al nuevo dinero un paso más allá. Invisible, incorpóreo y de valor indefinido y movedizo.


Aviso legal y personal

Dado que no quiero hacerle perder horas a nadie, así que comencemos por aclarar, que la semana pasada perdí $40 mil dolares. Así es. Aún duele un poco.

Se podría decir que la gran mayoría del código publicado en las próximas páginas posee riesgos considerables, y sin lugar a dudas, podría generar perdidas económicas considerables.

Más allá de eso, en verdad creo que algunas secciones del mismo son valiosas o pueden servir como información educacional.

La verdad es que fueron más bien unos 6 BTC, los cuales, para el día rondaban los 40 mil dolares. Primero 3 ganados, luego 3 perdidos, 2 ganados, y 3 perdidos. Luego decidí frenar

Comenzando desde el principio, hace algunas semanas, después de una conversación con desconocidos usuarios de un foro, decidí mirar un poco más de cerca diversos casinos online para realizar apuestas con BTC y otras monedas digitales.

¿Cómo los perdí? En verdad no se que fue lo que me llevó a perder así, dado que había comenzado bien. Para describir el proceso en lineas generales:

Mirando en la db, esperaba que se genere un volumen específico de probabilidad favorable, o por decirlo más claro, esperaba que hubiera un volumen considerable de valores inferiores a 2 en las rondas previas, de manera que el equilibrio de la aplicación buscara comenzar, con valores superiores.

Comenzaba con 1,000 fichas y en caso de perder, 2,000 al próximo, en caso de perder, duplicaba las fichas en la próxima ronda.

Poderes de dos. Genial, creo que ya la conocen, de esa manera, duplicando al perder, con probabilidades de ganar del 49.5%  en cada ronda uno se puede pasar en promedio, algunas horas sin perder.

El problema por obvio que sea, sucede alcanzamos el máximo, de lo que podemos pugnar. El máximo ahora ronda cerca de los 225, lo que equivale a: 33.554.432 unidades. Por lo que llevado a la mesa, equivale a 25 rondas perdidas seguidas.

 


Mecanicas del Casino

Volvamos al casino, hace unas semanas, decidí cargar unos 0,127 BTC en uno de esos nuevos “casinos”, un desafío simple, donde un número comienza a subir desde el 1 hacia el 10,000 y puede frenar en cualquier posición.

Los usuarios ponen el dinero previo a comenzar la ronda, si el número elegido es menor o igual al número final, ganan. Vale la pena hacer algunas observaciones generales sobre la lógica de la aplicación:

  • La probabilidad de ganar decrece cuando la variable de salida crece.
  • Más grande sea la variable de salida elegido por el usuario,
    • más grande el riesgo de perder
    • y más grande la posible ganancia.
  • Recudiendo la variable de salida:
    • suben las chances de ganar,
    • pero del mismo modo disminuyen las posibles ganancias.

De esa forma, si bien podemos ganar el 99% de las veces con un valor de salida cerca del mínimo, al perder una sola vez en 100 rondas, haría que solo esa perdida, superen a las ganancias acumuladas.

Habiendo mencionado eso, anclando la variable de salida en X2, se puede reducir o anular una buena porción de probabilidades inecesarias para la simplicidad un primer análisis .

Con la variable anclada en X2, la lógica queda recudida a poner fichas, siempre que creamos que el número será mayor o igual a 2. Si el número sale menor a 2, hemos perdido las fichas, si sale mayor, las hemos duplicado.

Si desean ver más sobre como funciona, pueden probarlo desde acá.

Bien, habiendo explicado en lineas generales la lógica de la aplicación, paso a hablar sobre lo que hice y probé:


Tecnologías, y aplicaciones usadas

A fines de no olvidar nada, voy a comenzar por anunciar algunas de las aplicaciones, librerías y ideas que fueron aplicadas en forma de un indice:

  1. Selenium
  2. Facebook/php-webdriver
  3. MariaDB
  4. Keras
  5. TensorFlow
  6. Pandas
  7. Numpy
  8. Sklearn
  9. Redes neuronales
  10. Unidades LSTM
  11. XGB
  12. Orange
  13. Regresiones lineales
  14. Naive Bayes
  15. Nash equilibria
  16. Progración en R y diversas yerbas más.

A lo largo de las próximas páginas, espero poder cubrir y explicar el mayor número posible de las pruebas realizadas. Por lo que de ahora en más la comprensión se hace más difícil al incorporar diversas lineas de código.

Recolección de información

Clonando la información de la web. A fines de comenzar a realizar un análisis adecuado, es necesario el mayor volumen posible de información previa.

Usando PHP, Java, Selenium y los webdrivers desarrollados por Facebook, y aprovechando la información pública de cada round publicada acá. Armé un guion para explorar cada una de las rondas y sacar la información.

Acá lo podemos ver funcionar.

  • Valor.
  • Número de round.
  • Clasificación (si fue menor o mayor a 2)
  • Fecha y hora.
  • Dinero en la mesa.
  • Promedio de dinero por usuario.
  • Número de usuarios.
  • Número de ganadores.
  • Número de perdedores.

He aquí una copia del código creado para recopilar la información. La aplicación fue diseñada para almacenar la información en MariaDB por lo que van a precisar una copia de la base si quieren usarla, acá la misma.

Espero que el código les sea agradable para leer, creo que quedó bien organizado. Bien, corriendo curl.php (php -f curl.php) podemos ver como la aplicación comienza a escarbar cada una de las rondas.


Curl.php recompila la información de cada ronda, y las va enviado hacia Mariadb. El guión corre para siempre, a excepción de que sea cancelado a la fuerza, de ser así, al arrancar, resume desde donde debería sin problemas.

Como podemos apreciar, hace uso de Selenium y Facebook Webdrivers para funcionar, al igual que es necesario una conexión a la db para almacenar la información.

Para quienes quieran reproducir mis acciones, descargar una replica de la db ya creada y poner a correr curl.php para sincronizar la db.

Se pueden ver algunas lineas // las cuales pueden ser removidas y añadidas, para modificar la información que el guion busca y almacena.

Espero que comprendan que el código no fue creado de ninguna manera para uso más que personal, por lo que verán que he decidido ahorrarme algunos condicionales, if, else algunas cosas más.

Próxima página: análisis de la información conseguida.

Análisis de la información

Analicé la información en búsqueda de ordenes, probabilidades favorables vinculadas a la hora, probabilidades en base a la información previa, diversas, en verdad muchas funciones calculando el peso de los números, y los valores de las 1,000, 10 mil o incluso 100 mil rondas previas. Logré ganar algunas veces, al final me fui perdiendo. Por ahora.


Mariadb y diversas queries

Pasemos ahora a analizar algunas de las queries hechas a la db, y la información que conseguimos.

Previo a comenzar, asumimos que luckmap.zip fue descargado, descomprimido y cargado en la Mariadb, y que se corrio curl.php a fin de sincronizar la información con la web.

Veamos algunas queries que podemos hacer:

Como podrán ver, analicé diversas formas de abordar el problema. Por razones de disponibilidad horaria, no me fue posible crear modelos que correspondan o prueben cada una de las queries creadas, por lo que me focalicé en probar algunos modelos solo cuando las queries parecían revelar alguna información considerable.

La próxima página incluye diversos guiones armados en PHP, creados para ganarle a la aplicación y generar cada vez más dinero!

Suena demasiado bien, no? Debo avisar, que en verdad, mi experiencia fueron puras perdidas, no logré hacer andar de manera favorable, ninguno de los guiones acá publicados.

Sin embargo, y más allá de mi perdida de dinero, en verdad creo que algunos de ellos podrían generar ganancias, dadas las condiciones necesarias. Pasaré a hacer un análisis de cada uno de ellos y diversas observaciones relacionadas.

Creo que es posible ganar, más allá de que no haya logrado aún hacerlo.


Información aplicada

Pasemos ahora a analizar algunos de los giones PHP creados para operar con la web y procurar ganar dinero sin necesidad de un operador.

Una vez que disponía de un mecanismo para recompilar la información en la db corriendo, y diversas queries en busqueda de alguna clase de orden, decidí crear algunos guiones que usaran la información para procurar, ganar.

Al día de la fecha fueron unos 7 guiones, los cuales paso a explicar como funcionan:

  1. challenger.php
  2. challenger2.php
  3. alpha.php
  4. alpha2.php
  5. android.php
  6. won.php
  7. won2.php

src: challenger.php

Observaciones: si mal no recuerdo, challenger.php fue el primer guión armado. Las primeras lineas no hacen más que definir algunas variables incluyendo, la posición inicial, el nombre de usuario, el password del mismo.

El guión solo coloca fichas en las rondas finalizadas en 1, 3, 7 y 9. Al perder, duplica la posición previa.

La selección de números (1, 3, 7 y 9) fue hecha a fin de procurar (en vano) disipar o crear un espacio a fin de evadir la perdida con largas malas rachas, reduciéndolas a fin de no perder en esas secuencias.

Es claro que no consideré que si solo se ponían fichas en esas rondas, se crearían nuevas malas rachas o lineas.


src: challenger2.php

Observaciones: Challenger2.php es, sin lugar a dudas, una versión modificada de Challenger. Era obvio, no?

La verdad es que no recuerdo que es lo que hace, dado que han pasado algunas semanas de que la armé y usé. Por lo que se puede ver en el código, las lineas originales de Challenger que especifican solo operar en las rondas finalizadas en 1, 3, 7 y 9 fueron anuladas //.

Por lo que se puede ver, no hace uso de ninguna condición horaria o de probabilidad, dado que no realiza selecciones en la db.

De modo que creería que si el guión se corriera como se viene, pondría fichas en cada uno de los rounds.

Al igual que los demás guiones challenger2.php salva información en la base luckmap db, performance. La cual se puede usar para analizar la performance del código.

Sin más preludio, he aquí el código:


src: alpha.php

Observaciones: Alpha es el primer guión que realiza queries a la mariadb, para sacar información previo a poner fichas.

En las primeras lineas de alpha.php se realiza una conexión a la base, y se agrupan las rondas y sus valores en grupos de 60 segundos.

Calculando así los valores mayores a dos y menores a dos en cada min. De esa forma, calcula la diferencia y ve que min. fueron favorables y cuales no.

La información se refresca a medida que alpha funciona, y solo pone fichas cuando las probabilidades favorecen a la hora en curso.

El guión no hace uso de progresiones de ninguna clase. A fin de ganar, dispone solo de la probabilidad horaria como única arma, asumiendo que el seleccionará más valores superiores que inferiores y considerando a la diferencia de los mismos como ganancias.

Original, no?


src: alpha2.php

Observaciones: He aquí una versión modificada y refinada de Alpha. El guión busca poner fichas, solo cuando las probabilidades parecen favorables.

La segunda versión usa la información de las 18 horas previas a fin de calcular las probabilidades favorables.

El guión no hace uso de progresiones de ninguna clase. A fin de ganar, dispone solo de la probabilidad horaria como única arma, asumiendo que el seleccionará más valores superiores que inferiores y considerando a la diferencia de los mismos como ganancias.

En lo personal, creo que alpha2.php es una gran idea, y solo requeriría de alguna clase de mecanismo que haga posible “predecidivinar”, cuales de los min. favorables, deben comenzar a buscar el equilibrio, quizás eso pueda ser llevado a cabo, por medio del análisis de las 30 a 60 rondas previas.

De esa manera sería posible evadir las perdidas generadas cuando la balanza deba acomodarse para esos rangos horarios. Aquí el código: