Respuesta: Alforitmo para mezclar, Importante El problema es que una simulación es bastante más compleja. De hecho, la fidelidad de la simulación (cuánto se parece a la realidad) influirá bastante sobre la complejidad de la simulación.
Te puedo dar algunas ideas de por dónde empezar. No hace falta ser ingeniero (aunque ayuda xD).
Primero partes de la situación real que quieres simular. En este caso la mezcla de cartas. Es buena idea coger una mesa y una baraja y hacerlo un par de veces físicamente (en este caso el caso real a simular es sencillo de llevar a cabo, no necesitas un equipo muy complejo).
Entonces te fijas en la situación, los elementos que entran en juego. Divides el problema en partes, en elementos que interactúan. En este caso es sencillo: Hay 1 superficie y hay 40 x (1 carta). (40 o 52, según la baraja). Lo pongo así, 40 x 1 carta porque una primera cosa que puedes suponer es que todas las cartas se comportan igual.
Además hay dos movimientos (ojo, no he entendido exactamente tu explicación de cómo se mueven las manos, así que lo que digo a continuación puede no ser exacto) o fuerzas que se aplican a las cartas. Imagino que son movimientos de rotación + traslación. La traslación en principio nos da igual, pero podemos descomponer la rotación en dos rotaciones: una de la carta sobre sí misma y otra de la carta alrededor de un punto externo (p.ej. el centro de la mesa). [NOTA 1]
Aquí es donde empiezas a parametrizar. Tienes que establecer un modelo de cómo se mueven las cartas teniendo en cuenta esas fuerzas y teniendo en cuenta el rozamiento con la mesa y todos los factores que quieras tener en cuenta (p.ej. los choques entre cartas, diferentes humedades o limpieza de las cartas, etc). Además, y aquí es donde entra la parte aleatoria, debes parametrizar las fuerzas o movimientos de las manos de modo que sean una función pseudo-aleatoria. Es decir, establecido cómo es el movimiento básico, debes añadir unos factores de ruido y dispersión: Las manos no se mueven siempre exactamente con la misma fuerza.
Hecho eso, llegas a unas fórmulas, más o menos complejas, según las cosas que hayas querido tener en cuenta. Con esas fórmulas lo que debes hacer es llegar a una función final que relacione el ángulo de giro final de una carta con las fuerzas (parametrizadas) originales.
En fin, que al final llegas a una fórmula que relaciona ese ángulo de giro [NOTA 2] final de la carta con una serie de parámetros como: el índice de rozamiento, el ángulo de giro de la posición en que estaba originalmente, la fuerza con que se mezcla, el número de veces que se aplica el movimiento de mezcla, etc, etc. Ahí revisas tus parámetros. Si tienes demasiados, si hay parámetros que no te interesan, simplificas dándoles algún valor fijo. Si, al contrario, te falta algún parámetro, revisas tu proceso de modelado del problema para ver dónde interviene ese parámetro y lo introduces apropiadamente en las fórmulas y vuelves a hacer el desarrollo.
Una vez llegada a la función "buena", la miras y ves que uno de los parámetros es el ruido, la aleatoriedad, las pequeñas variaciones. (Pequeñas o no tanto, según tú mismo hayas modelado). A partir de ahí, haces un análisis estocástico. Fijas los parámetros conocidos con los valores conocidos del problema y quedan sólo los parámetros aleatorios. Entonces, tomas una serie grande de datos aleatorios (los puedes generar tú o buscar por ahí alguna sucesión pseudo-aleatoria o buscar un generador de números o lo que prefieras y necesites) y les aplicas la función y sacas un número muy grande de simulaciones o resultados posibles, que son los que analizarás estadísticamente.
Todo esto lo puedes complicar o simplificar todo lo que quieras. Añadir más factores o eliminar parámetros dándoles un valro fijo igual para cualquier situación... Depende un poco de lo real que quieras que sea la simulación y del tiempo/esfuerzo que quieras dedicarle.
En fin, que espero que estas indicaciones te sirvan de algo.
[NOTA 1] Ya digo que no lo tengo del todo claro el movimiento que comentas, pero imagino que otra simplificación del problema es que las fuerzas que pueden generar las manos son "simétricas", sólo cambia el sentido de giro que aplican.
[NOTA 2] También debes establecer qué consideras por derecho y por invertido. Una idea buena puede ser decir que una carta se considerará al derecho si tras los movimientos queda con un ángulo de giro entre +90º y -90º. |