Ожидаемое количество бросков костей требует, чтобы сумма была больше или равна K?


9

6-сторонняя матрица катится итеративно. Какое ожидаемое количество бросков требуется, чтобы сумма была больше или равна K?

Перед редактированием

P(Sum>=1 in exactly 1 roll)=1
P(Sum>=2 in exactly 1 roll)=5/6
P(Sum>=2 in exactly 2 rolls)=1/6
P(Sum>=3 in exactly 1 roll)=5/6
P(Sum>=3 in exactly 2 rolls)=2/6
P(Sum>=3 in exactly 3 rolls)=1/36
P(Sum>=4 in exactly 1 roll)=3/6
P(Sum>=4 in exactly 2 rolls)=3/6
P(Sum>=4 in exactly 3 rolls)=2/36
P(Sum>=4 in exactly 4 rolls)=1/216

После редактирования

P(Sum>=1 in atleast 1 roll)=1
P(Sum>=2 in atleast 1 roll)=5/6
P(Sum>=2 in atleast 2 rolls)=1
P(Sum>=3 in atleast 1 roll)=4/6
P(Sum>=3 in atleast 2 rolls)=35/36
P(Sum>=3 in atleast 3 rolls)=1
P(Sum>=4 in atleast 1 roll)=3/6
P(Sum>=4 in atleast 2 rolls)=33/36
P(Sum>=4 in atleast 3 rolls)=212/216
P(Sum>=4 in atleast 4 rolls)=1

Я не уверен, что это правильно в первую очередь, но я думаю, что эта вероятность связана с ожидаемым количеством бросков?

Но я не знаю, как действовать дальше. Я иду в правильном направлении?


Как вы получили ? P(S2 in 2 rolls)
Glen_b

@Glen_b Вы должны получить число меньше 2 в первом броске, которое равно 1. Таким образом, вероятность получения 1 равна 1/6, а второй бросок может быть любым числом. если вы получите число, большее или равное 2, в первом броске, то вы не пойдете на второй бросок.
Обычный Подозреваемый

1
Ах, я вижу, что происходит. Вы не описываете это как "P (S \ geq 2 in 2 rolls)"; это выражение подразумевает фиксированное количество бросков. Вам нужно либо «P (ровно 2 рулона, чтобы получить )», либо «P (минимум 2 рулона, чтобы получить S 2 )». S2S2
Glen_b

@Glen_b Да, это путаница. P (ровно 2 броска, чтобы получить S> 2), я думаю. Все, что я в конечном итоге хочу вычислить, это ожидаемое количество бросков, чтобы достичь суммы, превышающей K?
Обычный Подозреваемый

@Glen_b я должен использовать по крайней мере или именно для этой цели? А как рассчитать ожидаемое количество рулонов на большую сумму вроде 10000?
Обычный подозреваемый

Ответы:


2

Пока это только некоторые идеи для другого, более точного подхода, основанного на том же наблюдении, что и мой первый ответ. Со временем я буду расширять это ...

Сначала немного обозначений. Пусть некоторое заданное положительное (большое) целое число. Мы хотим , чтобы распределение N , которое является минимальным количеством бросков Обыкновенных костей , чтобы получить сумму по крайней мере K . Итак, сначала мы определяем X i как результат броска костей i , а X ( n ) = X 1 + + X n . Если мы можем найти распределение X ( n ) для всех n, то мы можем найти распределение N , используя P ( N KNKXiiX(n)=X1++XnX(n)nN и все готово.

P(Nn)=P(X1++XnK),

Теперь возможными значениями для являются n , n + 1 , n + 2 , , 6 n и для k в этом диапазоне, чтобы найти вероятность P ( X 1 + + X n = k ) нам нужно найти общее количество способов записать k как сумму ровно n целых чисел, все в диапазоне 1 , 2 , X1++Xnn,n+1,n+2,,6nkP(X1++Xn=k)kn . Но это называется ограниченная целочисленная композиция, проблема, хорошо изученная в комбинаторике. Некоторые связанные вопросы по математике SE можно найти по адресу https://math.stackexchange.com/search?q=integer+compositions.1,2,,6

Поэтому, ища и изучая эту литературу по комбинаторике, мы можем получить точные результаты. Я буду следить за этим, но позже ...


2

Существует простая замкнутая формула в терминах корней многочлена степени 6.

На самом деле немного проще рассмотреть обычный честный кристалл с d2 гранями, помеченными номерами 1,2,,d.

Пусть ek будет ожидаемым числом бросков, необходимым для того, чтобы равняться или превышать k. Для k0, ek=0. В противном случае ожидание на единицу больше, чем ожидание количества бросков для достижения непосредственно предшествующего значения, которое будет среди kd,kd+1,,k1, откуда

(1)ek=1+1d(ekd+ekd+1++ek1).

Это линейное рекуррентное соотношение имеет решение в виде

(2)ek=2kd+1+i=1daiλik

где λi - d комплексные корни многочлена

(3)Td1d(Td1+Td2++T+1).

Константы ai находятся путем применения решения (2) к значениям k=(d1),(d2),,1,0 где ek=0 в каждом случае. Это дает набор d линейных уравнений по d константам и имеет единственное решение. То, что решение работает, может быть продемонстрировано проверкой повторения (1)используя тот факт, что каждый корень удовлетворяет (3):

1+1dj=1dekj=1+1dj=1d(2(kj)d+1+i=1daiλikj)=2kd+1+i=1daiλikd[1d(1+λi++λid1)]=2kd+1+i=1daiλikdλid=2kd+1+i=1daiλik=ek.

Это решение в закрытой форме дает нам хорошие способы приблизить ответ, а также оценить его точно. (Для малых и умеренных значений k, непосредственное применение рецидива является эффективной вычислительной техникой). Например, при d=6 мы можем легко вычислить

e1000000=285714.761905

Для приближений будет существовать единственный наибольший корень λ+=1 поэтому в конечном итоге (при достаточно большом k ) член λ+k будет доминировать над d членами в (2).Ошибка будет экспоненциально уменьшаться в соответствии со второй наименьшей нормой корней. Продолжая пример с k=6, коэффициент λ+ представляет + = 0,4761905 , а следующий-наименьшая норма 0,7302500. (Кстати, другойa+=0.47619050.7302500.ai склонен быть очень близким к1 размеру.) Таким образом, мы можем приблизить предыдущее значение как

e10000002×1066+1+0.4761905=285714.761905

с ошибкой порядка 0.730250010610314368.


Чтобы продемонстрировать, насколько практичным является это решение, ниже приведен Rкод, который возвращает функцию для оценки ek для любого k (в рамках вычислений с плавающей запятой двойной точности) и не слишком большого d (оно уменьшится, когда d100 ):

die <- function(d, mult=1, cnst=1, start=rep(0,d)) {
  # Create the companion matrix (its eigenvalues are the lambdas).
  X <- matrix(c(0,1,rep(0,d-1)),d,d+1)
  X[, d] <- mult/d
  lambda <- eigen(X[, 1:d], symmetric=FALSE, only.values=TRUE)$values

  # Find the coefficients that agree with the starting values.
  u <- 2*cnst/(d+1)
  a <- solve(t(outer(lambda, 1:d, `^`)), start - u*((1-d):0))

  # This function assumes the starting values are all real numbers.
  f <- Vectorize(function(i) Re(sum(a * lambda ^ (i+d))) + u*i)

  list(f=f, lambda=lambda, a=a, multiplier=mult, offset=cnst)
}

В качестве примера его использования здесь рассчитываются ожидания для k=1,2,,16:

round(die(6)$f(1:10), 3)

1.000 1.167 1.361 1.588 1.853 2.161 2.522 2.775 3.043 3.324 3.613 3.906 4.197 4.476 4.760 5.046

Возвращаемый объект включает в себя корни λi и их множители ai для дальнейшего анализа. Первым компонентом массива множителей является полезный коэффициент a+.

(Если вам интересно, для чего предназначены другие параметры die, выполните die(2, 2, 0, c(1,0))$f(1:10)и посмотрите, распознаете ли вы вывод ;-). Это обобщение помогло в разработке и тестировании функции.)


+1. Функция dieвыдает ошибку для меня object 'phi' not found.
COOLSerdash

1
@COOL Спасибо за проверку. Виновным было изменение имени переменной (с phiна a) в последнюю минуту для соответствия тексту. Я исправил (и проверил) это.
whuber

1

нет никакого способа получить точное ожидаемое количество бросков в целом, кроме как для К.

Пусть N будет событием ожидаемого броска, чтобы получить сумму => K.

для K = 1, E (N) = 1

для K = 2, E(N)=(56+21)/(56+1)=1711

и так далее.

Например, будет сложно получить E (N) для большого K. Например, для K = 20 вам нужно ожидать (4 броска, 20 бросков)

K(Sum) follows N(3.5N,35N12)

K3.5N35N12=Zα
α=1confidenceZ0.01=2.31,Z0.001=2.98

Вы знаете K, Z (при любой ошибке) ........ тогда вы можете получить N = E (N) с некоторым доверительным процентом, решая уравнение.


2
Как вы рассчитали эти вероятности? Как вы пришли к этому уравнению E (N)?
Обычный Подозреваемый

@UsualSuspect P (Sum> = 2 в 1 броске) = 5/6 (вы знаете) P (Sum> = 2 в 2 бросках) = 1 (потому что вы должны получить сумму как минимум 2 из 2 бросков) и для E (N ) ......... это просто ожидаемое среднее значение
Хемант Рупани

Извините, я не упомянул. Это не по крайней мере, ровно 2 рулона. Теперь я понял уравнение E (N).
Обычный Подозреваемый

@UsualSuspect ооо! Кстати, если вам нужно E (N) для любого конкретного K, то я могу сделать это :).
Хемант Рупани

мне нужно для к = 20 и к = 10000. Лучше, если вы объясните мне, а не прямо дадите ответы.
Обычный Подозреваемый

0

XiiNk

P(Nn)=P(X1+X2++Xnk)
NXii=1,2,,nnn

Xi

M(T)=EetXi=16(et+e2t+e3t+e4t+e5t+e6t)
n
Kn(t)=nlog(16i=16eit)
K

 DD <- function(expr, name, order = 1) {
        if(order < 1) stop("'order' must be >= 1")
        if(order == 1) D(expr, name)
        else DD(D(expr, name), name, order - 1)
     }

make_cumgenfun  <-  function() {
    fun0  <-  function(n, t) n*log(mean(exp((1:6)*t)))
    fun1  <-  function(n, t) {}
    fun2  <-  function(n, t) {}
    fun3  <-  function(n, t) {}
    d1  <-  DD(expression(n*log((1/6)*(exp(t)+exp(2*t)+exp(3*t)+exp(4*t)+exp(5*t)+exp(6*t)))),  "t", 1)
    d2  <-  DD(expression(n*log((1/6)*(exp(t)+exp(2*t)+exp(3*t)+exp(4*t)+exp(5*t)+exp(6*t)))),  "t", 2)
    d3  <-  DD(expression(n*log((1/6)*(exp(t)+exp(2*t)+exp(3*t)+exp(4*t)+exp(5*t)+exp(6*t)))),  "t", 3)
    body(fun1)  <-  d1
    body(fun2)  <-  d2
    body(fun3)  <-  d3
    return(list(fun0,  fun1,  fun2,  fun3))
}

Далее мы должны решить уравнение седловой точки.

Это делается с помощью следующего кода:

funlist  <-  make_cumgenfun()

# To solve the saddlepoint equation for n,  k:
solve_speq  <-   function(n, k)  {# note that n+1 <= k <= 6n is needed
    Kd  <-  function(t) funlist[[2]](n, t)
    k  <-  k-0.5
    uniroot(function(s) Kd(s)-k,  lower=-100,  upper=1,  extendInt="upX")$root
}

k

Функция для возврата хвостовой вероятности:

#

Ghelp  <-  function(n, k) {
    stilde  <-  solve_speq(n, k)
    K  <-  function(t) funlist[[1]](n, t)
    Kd <-  function(t) funlist[[2]](n, t)
    Kdd <- function(t) funlist[[3]](n, t)
    Kddd <- function(t) funlist[[4]](n, t)
    w2tilde  <-  sign(stilde)*sqrt(2*(stilde*(k-0.5)-K(stilde)))  
    u2tilde  <-  2*sinh(stilde/2)*sqrt(Kdd(stilde))
    mu  <-  Kd(0)
    result  <- if (abs(mu-(k-0.5)) <= 0.001) 0.5-Kddd(0)/(6*sqrt(2*pi)*Kdd(0)^(3/2))  else
    1-pnorm(w2tilde)-dnorm(w2tilde)*(1/w2tilde - 1/u2tilde)
    return(result)
}
G  <- function(n, k) {
      fun  <- function(k) Ghelp(n, k)
      Vectorize(fun)(k)
  }

P(Nn)=P(X1+X2++Xnk)=1P(X1++Xnk+1)=1G(n,k+1)
G

K=20n=20

N19

> 1-G(20, 21)
[1] 2.220446e-16

N10

> 1-G(10, 21)
[1] 0.002880649

И так далее. Используя все это, вы можете получить приближение для ожидания самостоятельно. Это должно быть намного лучше, чем приближения, основанные на центральной предельной теореме.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.