Ir al contenido principal

Loterias

Hace ya algún tiempo vengo desafiando las leyes de la probabilidad con los boletos semanales del Euromillon y Primitiva. Harto de leer “BOLETO NO PREMIADO” dediqué un tiempo a comprobar si la probabilidad de ocurrencia de los números en los sorteos era parecida y llegué a la conclusión de que no era así.

Hay páginas de estadísticas de la lotería en las que se puede consultar el número de ocurrencias de los números, el número de ausencias, la probabilidad con la que aparece un número, probabilidad que aparezcan números seguidos, etc..Todo esta información esta disponible para los N últimos sorteos.

Con todas estas cartas sobre la mesa comencé a implementar un programa en Java para generar los números más probables para un sorteo de lotería con X bolas de combinación ganadora e Y números posibles. 

Lo primero que hace el programa es construir un fichero de entrada de datos a partir de los datos de los sorteos anteriores:






Un parser procesa este fichero y genera otro fichero con información relevante sobre los números de las combinaciones ganadoras como el número de ausencias, el número de ocurrencias en los 20, 50 y 100 últimos sorteos y la definición de los anillos del sorteo. Los anillos son una agrupación lógica de números en el boleto impreso en papel para poder asignar posteriormente probabilidades de figuras de números en una combinación ganadora. Por ejemplo, es mucho más probable que en el sorteo de la Lotería Primitiva salga la figura de 3 números en el anillo externo, dos en el anillo medio y uno en el anillo interno que la de 6 números en el anillo medio. 


Toda esta información se utiliza para asignar pesos a los posibles números de la combinación ganadora. Se pueden ampliar las variables para el cálculo de pesos como el número de pares e impares, distancias entre números, altos y bajos, números seguidos... pero en principio sólo tendremos en cuenta las ausencias, ocurrencias y anillos.

Además de esta información para calcular los pesos,  también se pueden filtrar los números que se desea para una determinada combinación ganadora. Se puede filtrar por probabilidad de ocurrencia en los 20, 50 y 100 últimos sorteos, por probabilidad de ausencias y por simple aparición en los 20, 50 y 100 últimos sorteos. Por ejemplo podemos filtrar que sólo aparezcan en la combinación los números que hayan aparecido en los 20, 50 y 100 últimos sorteos con una probabilidad mayor al 2% de aparición. La probabilidad de aparición de un número determinado para los N últimos sorteos en un sorteo con B posibles bolas sería:

P(OcurrenciaNumeroBUltimosSorteos) = (Nº apariciones / N * B) * 100

Por último tenemos que calcular la probabilidad de cada número de entre los que hayan pasado las restricciones de los filtros configurados. Para calcular esto hacemos lo siguiente:

P(Numero) = W1 * P(O100) + W2 * P(050) + W3 * P(O20) + W4 * P(A)

donde:

P(Numero). Probabilidad del número de aparecer en la combinación ganadora.

W1, W2, W3, W4. Número entre 0 y 1 que indica el peso que le damos a cada factor. Podría ser ajustable por el usuario pero de momento lo he dejado fijo.

P(O100). Probabilidad de ocurrencia del número en los 100 últimos sorteos.

P(O50). Probabilidad de ocurrencia del número en los 50 últimos sorteos.

P(O20). Probabilidad de ocurrencia del número en los 20 últimos sorteos.

P(A). Probabilidad de ausencia de un número.

Como hemos dicho antes, se pueden aplicar más variables para el cálculo de la probabilidad pero en esta primera versión es así.

En el programa te aparecen ordenados de mayor a menor peso los números de los sorteos y a qué anillo pertenecen y tú puedes seleccionar los que desees. Lo lógico sería elegir números en las primeras posiciones.



Mi idea es realizar una interfaz con Android para que el usuario pueda realizar simulaciones configurándolas como desee y de paso aprender a desarrollar aplicaciones con este tecnología emergente.

Desde que lo hago con el programa, he acertado dos veces 3 números en la Primitiva, así qué de momento no me hecho rico. A ver si esta semana hay suerte.



Comentarios

  1. Segun lo que yo tengo entendido, la mejor estadistica para loterias es jugar el mismo billete todas las semanas: persevera y triunfaras!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Soluciones Alchemy Classic 389 elementos

Hace algún tiempo salió una actualización del Juego Alchemy Classic en la que aparecían más elementos (389 en lugar de 238). Aparte de añadir elementos mejoran algunas traducciones en castellano y mejoran la interfaz, aunque todavía hay algún error en algunos nombres de elementos. Aquí os dejo las soluciones para los que estén atascados y no puedan dormir por las noches: Sustancia primaria Aire=Elemento primario  Fuego=Elemento primario  Agua=Elemento primario  Tierra=Sustancia Primaria Arena=Piedra + Aire Piedra=Tierra + Fuego Arcilla=Arena + Pantano Caliza=Tierra + Amonitas Carbono=Fuego + Madera Cloro=Fuego + Sal + Electricidad CO2(Dióxido de Carbono)=Ceniza + Ácido nítrico Electricidad=Relámpago+ Metales Gas natural= Yacimiento de gas + Pozo Helio=Refinería de gas + Gas Natural Hidrógeno=Electricidad + Agua Hielo=Frío + Agua Imán=Piedra + Metales Metano=Deshechos Vegetales + Pantano Oxígeno=Electricidad + Agua Petróleo=Unidad

JAXB: Leer y escribir ficheros XML

Muchas veces en nuestras aplicaciones debemos manejar documentos XML ( Extensible Markup Language ). Este lenguaje se ha convertido en un estándar para intercambio de datos entre programas y aplicaciones a través de Internet. En un esquema XML (o  XSD ) podemos definir los elementos que pueden aparecer en un documento XML así como las relaciones entre los mismos. JAXB ( Java Architecture for XML Binding ) es un estándar Java para transformar un esquema XML (o  XSD ) en una representación a objetos java. Mediante la API de JAXB podemos mapear un objeto Java a un documento XML ( "marshall" ) y el proceso contrario, es decir, a partir de un esquema XML crear su conjunto de objeto Java asociado ( "unmarshall" ). JAXB Resumiendo lo que nos proporciona JAXB es: Generación de objetos Java a partir de un XSD a través de un compilador Proporciona capacidades de marshall/unmarshall (escribir fichero XML desde java y al contrario) Integración con Maven a través de xj

Matemáticas y cine.

El otro día estaba viendo por la televisión una película llamada 21 blackjack . En una escena de la película el profesor de matemáticas ( Kevin Spacey ) le presenta a uno de sus alumnos la siguiente situación: se encuentra en un concurso en la que debe escoger entre tres puertas (1,2 y 3). En dos de ellas hay una cabra, sin embargo en una de las 3 hay un flamante coche nuevo. El alumno responde que quiere abrir la puerta. El presentador, conocedor de lo que hay detrás de cada puerta decide abrir otra puerta diferente mostrando detrás de ella una cabra. El profesor se dirige al alumno y le pregunta, ¿cambiarías la puerta o te quedarías con la puerta que tienes? Muchos de nosotros cambiaríamos de puerta pensando que es una treta del presentador para engañarnos. ¿Cual elegiríais vosotros? Al comienzo tenemos 1/3 de probabilidades de acertar la puerta donde está el coche. Una vez que el presentador abre la puerta con una cabra, la mayoría de gente piensa que hay la misma probabilidad de