
En una entrada anterior explique como se pueden calcular las posibilidades de ganar en el juego de los Euromillones y en otra la Bonoloto o Lotería Primitiva. Un juego de azar popular en algunos países europeos. Para ello primero se explicó cómo calcular el número total de combinaciones que existen en el juego y la posibilidad de conseguir una cantidad de aciertos de la combinación ganadora. Aplicando el proceso de cálculo solamente a Euromillones. Para obtener la probabilidad de ganar a otro juego, con diferente número reglas, en esta entrada vamos a crear una calculadora de probabilidades de ganar a la lotería en Matlab.
Actualización: Esta herramienta ya se puede utilizar directamente en línea a través del laboratorio de Analytics Lane. Accede a la versión web para calcular tus probabilidades de ganar en distintos juegos de azar.
Implementación del proceso de cálculo
La semana pasada se mostró cómo calcular el número de combinaciones que existe en un juego de azar donde se selecciona k bolas de un conjunto de n. Para lo que es necesario usar el coeficiente binomial. El cual se encuentra disponible en Matlab mediante la función nchoosek
. Así el número de combinaciones totales se puede calcular usando la expresión
nchoosek(numeros_1, aciertos_1) * nchoosek(numeros_2, aciertos_2)
donde numeros_1
son los números del primer conjunto, aciertos_1
son los números que se extraen de primer conjunto, numeros_2
son los números de segundo conjunto y aciertos_2
son los números que se extraen de segundo conjunto.
Por otro lado, las combinaciones con una cantidad dada de fallos en el primer y segundo conjunto se pueden obtener con la siguiente expresión:
nchoosek(aciertos_1, aciertos_1 - fallos_1) * ... nchoosek(numeros_1 - aciertos_1, fallos_1) * ... nchoosek(aciertos_2, aciertos_2 - fallos_2) * ... nchoosek(numeros_2 - aciertos_2, fallos_2)
donde fallos_1
son los fallos en primer conjunto y fallos_1
en el segundo.
Creación de una aplicación
Con esto se puede crear una aplicación gráfica en Matlab, para lo que se puede escribir el siguiente código.
function h = loteria_() % Posción del monitor monitor = get(0, 'MonitorPositions'); position_h = monitor(3) / 2 - 536 / 2; position_w = monitor(4) / 2 - 536 / 2; % Figura base h = uifigure('Name', 'Calculadora probabilidades lotería', ... 'Resize', 'Off', ... 'Position', [position_h, position_w, 536, 482]); % Objetos uilabel(h, ... 'Position', [41, 438, 124, 22], ... 'Text', 'Combinación primaria'); combinacinPrimaria = uieditfield(h, 'numeric', ... 'Position', [180, 438, 100, 22], ... 'Value', 50); uilabel(h, ... 'Position', [315, 438, 96, 22], ... 'Text', 'Aciertos primaria'); aciertosPrimaria = uieditfield(h, 'numeric', ... 'Position', [426, 438, 100, 22], ... 'Value', 5); uilabel(h, ... 'Position', [26, 406, 139, 22], ... 'Text', 'Combinación secundaria'); combinacinSecundaria = uieditfield(h, 'numeric', ... 'Position', [180, 406, 100, 22], ... 'Value', 12); uilabel(h, ... 'Position', [299, 406, 112, 22], ... 'Text', 'Aciertos secundaria'); aciertosSecundaria = uieditfield(h, 'numeric', ... 'Position', [426, 406, 100, 22], ... 'Value', 5); uilabel(h, ... 'Position', [15, 373, 150, 22], ... 'Text', 'Número de combinaciones'); numeroCombinaciones = uieditfield(h, 'numeric', ... 'Editable', 'Off', ... 'Enable', 'Off', ... 'Position', [180, 373, 100, 22]); uibutton(h, ... 'Position', [427, 373, 100, 22], ... 'ButtonPushedFcn', @calcular, ... 'Text', 'Calcular'); resultsTable = uitable(h, 'Position', [11, 10, 515, 339]); function calcular(~, ~) resutls = zeros(((aciertosPrimaria.Value + 1) * ... (aciertosSecundaria.Value + 1)), 4); combinaciones = nchoosek(combinacinPrimaria.Value, aciertosPrimaria.Value) * ... nchoosek(combinacinSecundaria.Value, aciertosSecundaria.Value); for fallos_1 = 0:aciertosPrimaria.Value for fallos_2 = 0:aciertosSecundaria.Value row = fallos_1 * (aciertosSecundaria.Value + 1) + fallos_2 + 1; resutls(row, 1) = aciertosPrimaria.Value - fallos_1; resutls(row, 2) = aciertosSecundaria.Value - fallos_2; resutls(row, 3) = ... nchoosek(aciertosPrimaria.Value, aciertosPrimaria.Value - fallos_1) * ... nchoosek(combinacinPrimaria.Value - aciertosPrimaria.Value, fallos_1) * ... nchoosek(aciertosSecundaria.Value, aciertosSecundaria.Value - fallos_2) * ... nchoosek(combinacinSecundaria.Value - aciertosSecundaria.Value, fallos_2); resutls(row, 4) = 100 * resutls(row, 3) / combinaciones; end end numeroCombinaciones.Value = combinaciones; resultsTable.ColumnName = {'Aciertos 1', 'Aciertos 2', 'Combinaciones', 'Probabilidad (%)'}; resultsTable.Data = resutls; end end
La cual una vez lanzada tiene la siguiente forma:

Al pulsar el botón calcular se pueden obtener los resultados para el juego.

Conclusiones
En esta entrada se ha creado una calculadora de probabilidades de ganar a la lotería en Matlab. Así podemos comprobar lo poco probable que es ganar a uno de estos juegos. Y lo fácil que es no acertar ningún número, aunque intuitivamente pueda parecer lo contrario.
hola como consigo esto ? gracias
Hay que ejecutar el código que se encuentra en la entrada en Matlab para poder tener la aplicación.
esta calculadora como se descarga y en que dispositivo
Para obtener la calculadora es necesario ejecutar el código de post en Matlab. Se puede ejecutar en todas las plataformas en las que existe Matlab: Windows, Mac y Linux.