Esto no es malo si se configura como una discreta de la cadena de Markov. Deje que los diferentes estados posibles del juego de ser "S" (para empezar), y luego 1, 2, 3, 4, 5, "6/" (para aceptar). Inicio significa que no se pudo obtener la monotonía de ejecución de los números y tuvo que empezar desde cero en el comienzo del juego. Aceptar significa que usted tiene un 6 sólo después de una monótona secuencia de los otros números.
Quieres saber el largo plazo, la probabilidad de estar en estado 6/A, y a partir de esto, usted puede fácilmente averiguar cuál es el número esperado de morir rollos sería (se los dejo a usted porque es satisfactoria.)
Pero para empezar, usted puede escribir una matriz de transición para este juego:
$$\begin{array}{| c || c | c | c | c | c | c | c |}
\hline
& S & 1 & 2 & 3 & 4 & 5 & 6/A \\ \hline
S & 5/6 & 1/6 & 0 & 0 & 0 & 0 & 0 \\ \hline
1 & 4/6 & 1/6 & 1/6 & 0 & 0 & 0 & 0 \\ \hline
2 & 1/2 & 1/6 & 1/6 & 1/6 & 0 & 0 & 0 \\ \hline
3 & 1/2 & 1/6 & 0 & 1/6 & 1/6 & 0 & 0 \\ \hline
4 & 1/2 & 1/6 & 0 & 0 & 1/6 & 1/6 & 0 \\ \hline
5 & 1/2 & 1/6 & 0 & 0 & 0 & 1/6 & 1/6 \\ \hline
6/A & 5/6 & 1/6 & 0 & 0 & 0 & 0 & 0 \\ \hline
\end{array}$$
Ahora es una cuestión de obtener el derecho de vector propio de la matriz, para decirle a largo plazo de las probabilidades, y, a continuación, averiguar cómo activar que a largo plazo la probabilidad en un número esperado de rollos. Tenga en cuenta que la mayoría numérica autovector rutinas sólo calcular "derecho vectores propios", que se producen en el lado derecho de la matriz en cuestión. Para un típico estocástico de la matriz, se desea calcular la izquierda autovector correspondiente al autovalor 1. Así que para conseguir esto, numéricamente, primero necesita para tomar la transpuesta de la matriz de transición y después de alimentar a su linear algebra package.
Agregó
Después de la fijación de los errores que yo había hecho en la anterior matriz de transición (que ahora está correcto), he utilizado el siguiente código en Python para comprobar lo que el vector propio método produjo como una solución, y he traducido su simulación de Monte Carlo en Python para comprobar numéricamente.
El resultado que obtuve para el largo plazo de la distribución estacionaria del juego es
$$[ 0.79168, 0.16667, 0.03333, 0.00667, 0.00133, 0.000267, 0.0000444],$$
y así los recíprocos de estos elementos da el número esperado de rollos para llegar a cada estado:
$$[1.26, 6.0, 30, 150, 750, 3750, 22500]$$ (podría haber algún error de redondeo dependiendo de lo bien que NumPy del paquete linalg es, yo no soy el uno para preguntar acerca de eso). Tenga en cuenta que la segunda entrada, 6 rollos para obtener el primer 1, encaja con la intuición de un uniforme de 6 caras morir, así que eso es reconfortante.
Así que de acuerdo a esto, la "analítica" de la solución es que se debe tomar alrededor de 22500 rollos para llegar a una monótona secuencia que termina con un 6. Mi simulaciones de Monte Carlo de acuerdo con esto, como he obtenido un número esperado de rollos de 22609.618 en una simulación de 10.000 vueltas (un poco lento en Python, pero no debería ser un problema en C++).
Aquí está el código para mi solución:
import numpy as np
# Set up the transition matrix.
tmat = np.asarray([ [5.0/6.0, 1.0/6.0, 0, 0, 0, 0, 0],
[4.0/6.0, 1.0/6.0, 1.0/6.0, 0, 0, 0, 0],
[3.0/6.0, 1.0/6.0, 1.0/6.0, 1.0/6.0, 0, 0, 0],
[1.0/2.0, 1.0/6.0, 0, 1.0/6.0, 1.0/6.0, 0, 0],
[1.0/2.0, 1.0/6.0, 0, 0, 1.0/6.0, 1.0/6.0, 0],
[1.0/2.0, 1.0/6.0, 0, 0, 0, 1.0/6.0, 1.0/6.0],
[5.0/6.0, 1.0/6.0, 0, 0, 0, 0, 0]]).astype('float64')
# Compute long-run probability and expected rolls
# with eigenvalue method.
w,v = np.linalg.eig(np.transpose(tmat))
# Get stationary distribution as eigenvector
# corresponding to eigenvalue 1.
# Take real part to get rid of Python's
# complex notation, and divide by vector sum
# just in case round off error makes it not
# quite sum up to 1.0
stationary_probs = np.real(v[:,0])
print stationary_probs/sum(stationary_probs)
# Print the element-wise reciprocals which are
# the expected number of rolls to each state.
print 1/(stationary_probs/sum(stationary_probs))
# Monte Carlo simulation to compare results.
total_rolls = 0; num_repeats = 10000;
iter_rolls = np.zeros((1,num_repeats))
for ii in range(num_repeats):
cur_roll = np.random.randint(1,7)
num_rolls = 1
if cur_roll == 1:
next_val = 2
else:
next_val = 1
while( next_val <= 6 ):
prev_roll = np.copy(cur_roll)
cur_roll = np.random.randint(1,7)
num_rolls = num_rolls + 1
if(cur_roll == next_val):
next_val = next_val + 1
elif(cur_roll == prev_roll):
pass
elif(cur_roll == 1):
next_val = 2
else:
next_val = 1
iter_rolls[0,ii] = num_rolls
total_rolls = total_rolls + num_rolls
print "Finished iteration %d of %d"%(ii,num_repeats)
print "Monte Carlo mean: %f"%(np.mean(iter_rolls[0,:]))
Como un aparte, esta vinculado capítulo de libro hace un mejor trabajo de explicar lo que está pasando en la que casi cualquier otra referencia que yo era capaz de Google. En particular, la sección donde se define el "significa el tiempo paso", y resulta que estos son los recíprocos de la distribución estacionaria de las entradas es exactamente la información de antecedentes relevantes para problemas como estos.
De Wikipedia, el tratamiento de este tipo de discreta de la cadena de Markov problema es ínfimo y decepcionante. Si usted quiere "pagar" esta respuesta, considere la posibilidad de editar la entrada de la Wikipedia sobre la Matriz Estocástica para incluir este ejemplo. El único ejemplo en la actualidad hay una con un trivial estado de absorción, lo cual es totalmente ineficiente para alguien que está aprendiendo, especialmente con alguien tratando de aprender a problemas del modelo con las cadenas de Markov en lugar de sólo a resolver pedagógica de las cadenas de Markov dada por los maestros.