¿Dibujar enteros de forma independiente y uniforme al azar de 1 a


18

Deseo dibujar números enteros del 1 a un NN específico tirando un número de dados de seis lados (d6). Una buena respuesta explicará por qué su método produce enteros uniformes e independientes .

Como ejemplo ilustrativo, sería útil explicar cómo funciona una solución para el caso de N = 150N=150 .

Además, deseo que el procedimiento sea lo más eficiente posible: tira el menor número de d6 en promedio por cada número generado.

Se permiten conversiones de senario a decimal.


Esta pregunta fue inspirada por este hilo Meta .

Respuestas:


12

El conjunto Ω ( d , n )Ω(d,n) de resultados identificables distintos en nn tiradas independientes de un dado con d = 6d=6 caras tiene d ndn elementos. Cuando el dado es justo, eso significa que cada resultado de una tirada tiene probabilidad 1 / dy1/d independencia significa que cada uno de estos resultados tendrá, por lo tanto, probabilidad ( 1 / d ) n :(1/d)n: es decir, tienen una distribución uniforme P d , n .Pd,n.

Suponga que ha ideado algún procedimiento tt que determina mm resultados de un dado de c ( = 150 )c(=150) , es decir, un elemento de Ω ( c , m ),Ω(c,m) o bien informa un fallo (lo que significa que tendrá que repetir para obtener un resultado). Es decir,

t : Ω ( d , n ) Ω ( c , m ) { Fallo } .

t:Ω(d,n)Ω(c,m){Failure}.

Sea FF la probabilidad de que tt resulte en una falla y tenga en cuenta que FF es un múltiplo integral de d - n ,dn, digamos

F = Pr ( t ( ω ) = Falla ) = N Fd - n .

F=Pr(t(ω)=Failure)=NFdn.

(Para referencia futura, nota que el número esperado de veces debe invocar antes de fallar no es )t t1 / ( 1 - F ) .1/(1F).

El requisito de que estos resultados en sean uniformes e independiente condicional en no informar medios de fallo que conservas probabilidad en el sentido de que para cada eventoΩ ( c , m ) Ω(c,m)t t AΩ ( c , m ) ,ttAΩ(c,m),

P d , n ( t A )1 - F =Pc,m(A)

Pd,n(tA)1F=Pc,m(A)(1)

dónde

t ( A ) = { ω Ω t ( ω ) A }

t(A)={ωΩt(ω)A}

es el conjunto de tiradas de dado que el procedimiento asigna al eventot tA .A.

Considere un evento atómico , que debe tener una probabilidadDeje que (las tiradas de dados asociadas con ) tienen elementos . convierteA = { η } Ω ( c , m ) A={η}Ω(c,m)c - m . cm.t ( A )t(A) ηη N ηNη ( 1 )(1)

N η d - n1 - N F d - n = P d , n ( t A )1 - F =Pc,m( A ) = c - m .

Nηdn1NFdn=Pd,n(tA)1F=Pc,m(A)=cm.(2)

Es inmediato que los son todos iguales a algún número enteroN ηNη N . N.t . C Solo queda encontrar los procedimientos más eficientes El número esperado de no fallas por tirada del dado est.c

1metro ( 1 - F ) .

1m(1F).

Hay dos implicaciones inmediatas y obvias. Una es que si podemos mantener pequeño a medida que crece, entonces el efecto de informar una falla es asintóticamente cero. La otra es que para cualquier dada (el número de tiradas del dado para simular), queremos que más pequeño posible.F Fmm m mc cFF

Echemos un vistazo más de cerca a borrando los denominadores:( 2 )(2)

N c m = d n - N F > 0.

Ncm=dnNF>0.

Esto hace obvio que en un contexto dado (determinado por ), se hace lo más pequeño posible haciendo que igual al múltiplo más grande de que sea menor o igual que Podemos escribir esto en términos de la función entera más grande (o "piso") comoc , d , n , m c,d,n,mF Fd n - N F dnNFc m cmd n . dn.

N = d nc m.

N=dncm.

Finalmente, está claro que debe ser lo más pequeño posible para lograr la mayor eficiencia, ya que mide la redundancia en . Específicamente, el número esperado de tiradas del dado de lado necesario para producir un lanzamiento del dado de lado esN Nt d ctdc

N × nm ×11 - F .

N×nm×11F.

Por lo tanto, nuestra búsqueda de procedimientos de alta eficiencia debería centrarse en los casos en que es igual o apenas mayor que alguna potenciad n dnc m .cm.

El análisis termina mostrando que para y dados hay una secuencia de múltiplos para los cuales este enfoque se aproxima a la eficiencia perfecta. Esto equivale a encontrar para el cual acerca a en el límite (garantizando automáticamente ). Una de estas secuencias se obtiene tomando y determinandod dc , c,( n , m ) (n,m)( n , m ) (n,m)d n / c m1 dn/cm1N = 1 N=1F 0 F0n = 1 , 2 , 3 , n=1,2,3,

m = n log dlog c.

m=nlogdlogc.(3)

La prueba es sencilla.

Todo esto significa que cuando estamos dispuestos a tirar el dado original sided un número suficientemente grande de veces podemos esperar simular casi resultados de un dado sided por tirada . Equivalentemented dn , n,log d / log c = log c d logd/logc=logcdcc

Es posible simular un gran número de tiradas independientes de un dado de utilizando un dado de justo usando un promedio de pasa por resultado donde puede hacerse arbitrariamente pequeño eligiendo suficientemente grande.m mc cd dlog ( c ) / log ( d ) + ϵ = log d ( c ) + ϵ log(c)/log(d)+ϵ=logd(c)+ϵϵ ϵmm


Ejemplos y algoritmos

En la pregunta, y de donded = 6 d=6c = 150 ,c=150,

log d ( c ) = log ( c )log ( d )2.796489.

logd(c)=log(c)log(d)2.796489.

Por lo tanto, el mejor procedimiento posible requerirá, en promedio, al menos rollos de a para simular cada resultado.2.7964892.796489d6d150

El análisis muestra cómo hacer esto. No necesitamos recurrir a la teoría de números para llevarla a cabo: podemos tabular las potencias las potencias y compararlas para encontrar dónde están cerca. Este cálculo de fuerza bruta da paresd n = 6 n dn=6nc m = 150 mcm=150m c md ncmdn ( n , m )(n,m)

( n , m ) { ( 3 , 1 ) , ( 14 , 5 ) , }

(n,m){(3,1),(14,5),}

por ejemplo, correspondiente a los números

( 6 n , 150 m ) { ( 216 , 150 ) , ( 78364164096 , 75937500000 ) , ... } .

(6n,150m){(216,150),(78364164096,75937500000),}.

En el primer caso, asociaría de los resultados de tres tiradas de a a Fracaso y los otros resultados se asociarían a un único resultado de a . t t216 - 150 = 66 216150=66d6150150d150

En el segundo caso, asociaría de los resultados de 14 tiradas de a a Fracaso, alrededor del 3,1% de todas ellas, y de lo contrario generaría una secuencia de 5 resultados de a .t t78364164096 - 759375000007836416409675937500000d6d150

Un algoritmo simple para implementartt etiqueta las caras del dado con lados con los números y las caras del dado con lados con los números Las tiradas del primer dado se interpretan como un número de dígitos en la base Esto se convierte en un número en la base Si tiene como máximo dígitos, la secuencia de los últimos dígitos es la salida. De lo contrario, devuelve Fallo invocando recursivamente.dd0,1,,d10,1,,d1cc0,1,,c1.0,1,,c1.nnnnd.d.c.c.mmmmtt

Para secuencias mucho más largas, puede encontrar pares adecuados considerando cualquier otro convergente de la expansión de fracción continua de La teoría de las fracciones continuas muestra que estos convergentes alternan entre ser menor que y mayor que él (suponiendo que ya no es racional). Elija aquellos que son menores que(n,m)(n,m)n/mn/mx=log(c)/log(d).x=log(c)/log(d).xxxxx.x.

En la pregunta, los primeros convergentes son

3,14/5,165/59,797/285,4301/1538,89043/31841,279235/99852,29036139/10383070.

3,14/5,165/59,797/285,4301/1538,89043/31841,279235/99852,29036139/10383070.

En el último caso, una secuencia de 29,036,139 rollos de a d6producirá una secuencia de 10,383,070 rollos de a d150con una tasa de falla menor a para una eficiencia de indistinguible del límite asintótico.2×108,2×108,2.796492.79649


2
Increíble como siempre, ¡casi parece que esta respuesta fue formateada y preparada incluso antes de que se hiciera la pregunta!
Łukasz Grad

1
Gracias, @ ŁukaszGrad. Sin embargo, soy inocente de tales maquinaciones y estoy seguro de que los lectores con ojos agudos encontrarán evidencia de la prisa con la que he escrito esto, por lo que me disculpo de antemano.
Whuber

¿No debería también tenerse en cuenta que cuando no es primo, el espacio muestral puede dividirse en subconjuntos de igual probabilidad? Por ejemplo, puede usar un d6 como d2 o d3, y un espacio de muestra con 162 elementos, más cercano a 150 que 216, se puede lograr con 4 rollos, 1d6 + 3d3. (Eso da el mismo número esperado de rollos que la solución 3d6, pero una variación menor).ddΩ(d,1)Ω(d,1)
Scortchi - Restablece a Monica

@Scortchi Usted describe una configuración ligeramente diferente en la que se pueden elegir dados para simular los sorteos de una distribución uniforme. Se aplica un análisis similar: puede resultarle divertido llevarlo a cabo.
whuber

7

Para el caso de , tirar un d6 tres veces claramente crea resultados.N=150N=15063=21663=216

El resultado deseado se puede tabular de esta manera:

  • Grabe un d6 tres veces secuencialmente. Esto produce resultados . El resultado es uniforme porque todos los valores de son igualmente probables (los dados son justos y estamos tratando cada lanzamiento como distinto).a,b,ca,b,ca,b,ca,b,c
  • Resta 1 de cada uno.
  • Este es un número senario: cada dígito (valor posicional) va de 0 a 5 por potencias de 6, por lo que puede escribir el número en decimal usando(a1)×62+(b1)×61+(c1)×60
    (a1)×62+(b1)×61+(c1)×60
  • Añadir 1.
  • Si el resultado excede 150, deseche el resultado y vuelva a tirar.

La probabilidad de mantener un resultado es . Todos los rollos son independientes, y repetimos el procedimiento hasta un "éxito" (un resultado en ) por lo que el número de intentos de generar 1 empate entre 1 y 150 se distribuye como una variable aleatoria geométrica, que tiene expectativa . Por lo tanto, usar este método para generar 1 sorteo requiere tirar tiradas de dados en promedio (porque cada intento tira 3 dados).p=150216=2536p=150216=25361,2,,1501,2,,150p1=3625p1=36253625×3=4.323625×3=4.32


Gracias a @whuber por sugerir esto en el chat.


Creo que el método de Henry no produce una distribución uniforme. Esto se debe a que el reciclaje hará que se favorezcan algunos dígitos. No estoy completamente seguro de eso porque no entiendo completamente cómo se pretende realizar el reciclaje.
whuber

1
@whuber AH! Entiendo tu preocupación ahora. Solo intenté explicarme el proceso y me di cuenta de por qué mi intuición era defectuosa: la probabilidad de tirar un dado adicional puede cambiar la asignación de probabilidades a números decimales y hacerlo no uniforme porque no sabemos de antemano cómo Muchos dados estamos tirando.
Sycorax dice Reinstate Monica

4

Aquí hay una alternativa aún más simple a la respuesta de Sycorax para el caso donde . Desde puede realizar el siguiente procedimiento:N=150N=150150=5×5×6150=5×5×6

Generando un número aleatorio uniforme del 1 al 150:

  • Haga tres tiradas ordenadas de 1D6 y como .R1,R2,R3R1,R2,R3
  • Si cualquiera de los dos primeros lanzamientos es un seis, vuelva a tirar hasta que no sea 6.
  • El número es un número uniforme que usa notación posicional con una raíz de 5-5-6. Por lo tanto, puede calcular el número deseado como: (R1,R2,R3)(R1,R2,R3)X=30(R11)+6(R21)+(R31)+1.
    X=30(R11)+6(R21)+(R31)+1.

Este método puede generalizarse a más grande , pero se vuelve un poco más incómodo cuando el valor tiene uno o más factores primos mayores que .NN66


1
¿Puede indicar la eficiencia de este método en términos del número esperado de tiradas por sorteo generado y aclarar por qué el resultado es uniforme en 1,2, ..., 150?
Sycorax dice Reinstate a Monica

La probabilidad de obtener un resultado que no requiera relanzamiento es , que es lo mismo que en su respuesta. Para entender por qué es uniforme, tenga en cuenta que efectivamente está generando un número uniforme usando notación posicional con radix 5-5-6 (es decir, el último dígito son las unidades, el penúltimo dígito son los "seis" y el tercero -el último dígito son los "años treinta"). 25/3625/36
Restablezca a Monica

1
El método es efectivamente solo una variación muy leve del método en su respuesta. En su respuesta, crea un número uniforme en la escala de números 6-6-6 y luego descarta los valores no válidos, mientras que en mi respuesta descarta primero los valores no válidos para generar un número en la escala 5-5-6.
Vuelva a instalar a Monica

3
+1 Como cuestión práctica, este es un algoritmo atractivo. Es intrigante, y quizás sugestivo de un análisis más amplio, que implementa un autómata de estado finito impulsado por los dados. Tiene cuatro estados, {Inicio, A, B, Aceptar}. Comienza las transiciones a A al tirar 1..5; A pasa a B al rodar 1..5; y B pasa a Aceptar al rodar cualquier cosa. Cada transición guarda el valor del rollo que lo causó, por lo que al llegar a Aceptar, emite esa secuencia de tres rollos almacenados y la transición vuelve automáticamente a Inicio.
Whuber

44
Rechazas tan seguido como @Sycorax, pero haces menos rollos en promedio. El esperado no. los rollos por variante son . 65+65+1=3.465+65+1=3.4
Scortchi - Restablece a Monica

2

Como ilustración de un algoritmo para elegir uniformemente entre valores usando dados de seis lados, intente esto que usa cada tirada para multiplicar los valores disponibles por y hacer que cada uno de los nuevos valores sea igualmente probable:15015066

  • Después de tiradas, tiene posibilidad, no suficiente para distinguir valores.0011150150
  • Después de tirada, tienes posibilidades, no suficientes para distinguir valores.1166150150
  • Después de tiradas, tiene posibilidades, no suficientes para distinguir valores.223636150150
  • Después de tiradas, tiene posibilidades, suficientes para distinguir valores pero con valores restantes; la probabilidad de detenerse ahora es332162161501506666150216150216
  • Si no se ha detenido, después de tiradas tiene posibilidades restantes, suficientes para distinguir valores de dos maneras pero con valores restantes; la probabilidad de detenerse ahora es44396396150150969630012963001296
  • Si no te has detenido, entonces después 55 tiradas tiene posibilidades restantes, suficientes para distinguir valores de tres maneras pero con valores restantes; la probabilidad de detenerse ahora es576576150150964507776
  • Si no se ha detenido, después de 756 150 6 7506 tiradas tiene posibilidades restantes, suficientes para distinguir valores de cinco maneras pero con valores restantes; la probabilidad de detenerse ahora es46656

Si está en uno de los valores restantes después de lanzamientos, entonces se encuentra en una situación similar a la posición después de lanzamiento. Entonces puede continuar de la misma manera: la probabilidad de detenerse después de tiradas es , después de tiradas es etc.6 6 1 7 0279936 81501679616

Sume estos y encontrará que el número esperado de rollos necesarios es de aproximadamente . Proporciona una selección uniforme de los , ya que solo selecciona un valor a la vez cuando puede seleccionar cada uno de los con la misma probabilidad3.39614 150 150


Sycorax pidió en los comentarios un algoritmo más explícito

  • Primero, trabajaré en base 6 con 150 10 = 410 6
  • Segundo, en lugar de los valores objetivo 1 6 a 410 6 , restaré uno para que los valores objetivo sean 0 6 a 409 6
  • Tercero, cada dado debe tener valores de 0 6 a 5 6 , y lanzar un dado implica agregar un dígito de base 6 al lado derecho del número generado existente. Los números generados pueden tener ceros a la izquierda, y su número de dígitos es el número de rollos hasta ahora

El algoritmo es sucesivos lanzamientos de dados:

  • Tira los primeros tres dados para generar un número de 000 6 a 555 6 . Como 1000 6 ÷ 410 6 = 1 6  resto  150 6 , toma el valor generado (que también es su resto en la división entre 410 6 ) si el valor generado está estrictamente por debajo de 1000 6 - 150 6 = 410 6 y se detiene;

  • Si continúa, tire el cuarto dado para que haya generado un número de 4100 6 a 5555 6 . Como 10000 6 ÷ 410 6 = 12 6  resto  240 6 , toma el resto del valor generado en la división entre 410 6 si el valor generado está estrictamente por debajo de 10000 6 - 240 6 = 5320 6 y se detiene;

  • Si continúa, tire el quinto dado para que haya generado un número de 53200 6 a 55555 6 . Como 100000 6 ÷ 410 6 = 123 6  resto  330 6 , toma el resto del valor generado en la división entre 410 6 si el valor generado está estrictamente por debajo de 100000 6 - 330 6 = 55230 6 y se detiene;

  • Si continúa, tire el sexto dado para que haya generado un número de 552300 6 a 555555 6 . Como 1000000 6 ÷ 410 6 = 1235 6  resto  10 6 , toma el resto del valor generado en la división entre 410 6 si el valor generado está estrictamente por debajo de 1000000 6 - 10 6 = 555550 6 y se detiene;

  • etc.


(+1) Esta respuesta sería más clara si explicara cómo mapea los resultados de, por ejemplo, 4d6 o 5d6 a 1,2, ..., 150.
Sycorax dice Reinstate Monica

@Sycorax - Ahora proporcioné un mapeo de base 6
Henry

1
Las consideraciones de entropía indican que puede hacerlo sustancialmente mejor que este algoritmo. También queda por demostrar que su algoritmo en realidad produce valores distribuidos independientemente con distribuciones uniformes .
Whuber

@whuber: mi algoritmo produce exactamente un número entero de 150 posibilidades y lo hace de manera uniforme siempre que las tiradas de dados sean uniformes e independientes. En cada paso, si se alcanza, es igualmente probable que se seleccione cada uno de los 150 valores. No produce valores múltiples (a diferencia de su respuesta)
Henry

1
Entendí mal lo que querías decir, entonces, al escribir "el algoritmo es sucesivas tiradas de dados". (Debería haberlo leído con más cuidado.) Al hacerlo, me parece que su algoritmo no produce una distribución uniforme, pero no estoy seguro porque no he podido averiguar a qué se destina el algoritmo general ser. Sería bueno ver una demostración de que produce valores uniformes.
Whuber
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.