42 votos

Resultado esperado para tiradas de dados repetidas con la fijación de dados

Aquí es otro rollo de dados cuestión.

Las reglas

  • Empezar con n dados, y el rollo de todos ellos.
  • Seleccione uno o más dados y solucionarlos, es decir, su valor no va a cambiar más.
  • Re-roll de los otros dados.
  • Repita hasta que todos (después de que en la mayoría de n rondas) todos los dados son fijos.

La puntuación final es la suma de los valores de todos los n dados.

Las preguntas

  • ¿Cuál es el resultado esperado?
  • Puede que el re-balanceo de la estrategia de ser fácilmente enunciado?
  • Hay situaciones (posiblemente por un poco más grande n) donde se iba a volver a rodar un 6?

Pensamientos

Parece ser contra-intuitivo para volver a rodar un 6, pero le daría una tirada extra para todos los otros dados, así que tal vez vale la pena? O es que hay un argumento que desmienten esta hipótesis, aún sin contestar las dos primeras preguntas?

4voto

1.01pm Puntos 759

No es una respuesta completa, pero al menos algunas pruebas. He calculado el valor esperado de los pocos casos:

1:  3.50000 (+3.50000)
2:  8.23611 (+4.73611)
3: 13.42490 (+5.18879)
4: 18.84364 (+5.41874)
5: 24.43605 (+5.59241)
6: 30.15198 (+5.71592)
7: 35.95216 (+5.80018)
8: 41.80969 (+5.85753)
9: 47.70676 (+5.89707)

Así, por ejemplo, cuando se han rodado un 6-5-1-1, es mejor re-tirada de tres dados en lugar de mantener la 5, como el valor esperado de los tres es más de 5 más grande que el de dos dados.

El código es este código Haskell. Utiliza programación dinámica, pero para cada número de dados que pasa a través de todas las posibilidades, por lo tanto, me detuve en 9 dados:

import Numeric.Probability.Example.Dice
import Numeric.Probability.Distribution (expected)
import Control.Monad
import Data.List
import Text.Printf

probs = map prob [0..]

prob 0 = 0
prob n = expected $ do
        dice <- dice n
        let sorted = reverse $ sort dice
    return $ maximum 
        [ fromIntegral (sum (take m sorted)) +  (probs !! (n - m)) | m <- [1..n] ]

main :: IO ()
main = forM_ (zip3 [1..9] (tail probs) probs) $ \(n, e, p) ->
    printf "%d: %8.5f (+%7.5f)\n" (n::Int) (realToFrac e::Double) (realToFrac (e - p)::Double)

Parece que las diferencias se están acercando a 6 de los de abajo. Si ese es el caso, y que no se debe sobrepasar 6, entonces la respuesta a la tercera pregunta es "no".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X