Pregunta

Estoy codificando un juego de mesa donde hay una bolsa de piezas posibles. Cada turno, los jugadores eliminan piezas seleccionadas al azar de la bolsa de acuerdo con ciertas reglas.

Para mi implementación, puede ser más fácil dividir la bolsa inicialmente en grupos para uno o más jugadores. Estos grupos serían seleccionados al azar, pero ahora diferentes jugadores elegirían de diferentes bolsas. ¿Es esto diferente?

Si se agotara la bolsa de un jugador, se barajarían aleatoriamente más de la reserva general.

¿Fue útil?

Solución

Siempre que:

  • la partición en " pool " bolsas es al azar
  • la asignación de jugadores a una bolsa de billar determinada es aleatoria
  • el juego es tal que los elementos extraídos por los jugadores se eliminan efectivamente de la bolsa (nunca se devuelven a la bolsa, ni a ninguna otra bolsa, durante el juego actual)
  • los jugadores no conocen el contenido de ninguno de las bolsas

Los dos enfoques ("original" con una gran bolsa común, "modificado" con una bolsa de billar por jugador son equivalentes con respecto a las probabilidades.

Solo se vuelve un poco complicado hacia el final del juego, cuando algunas de las bolsas de los jugadores están vacías. Los más justos para elegir elegir entre el 100% de los artículos que aún están en juego, por lo tanto, deben elegir de qué bolsa eligen y [a ciegas, por supuesto] elegir un artículo de dicha bolsa.

Este problema ilustra una característica interesante de las probabilidades, que es que las probabilidades son relativas a la cantidad de conocimiento que uno tiene sobre la situación . Por ejemplo, el anfitrión del juego bien puede saber que el "grupo" la bolsa asignada para decir que el jugador X no incluye ninguna letra de decir "A" (pensando en el scrabble), pero mientras ninguno de los jugadores sepa esto (y mientras las particiones en la bolsa de billar sean completamente aleatorias), el juego sigue siendo justo y el jugador '' X '' todavía tiene que suponer que él / ella probablemente golpee una " A " la próxima vez que se dibuje una carta, es lo mismo que si todas las letras restantes estuvieran disponibles para él / ella.

Editar:
A pesar de la validez matemática de la afirmación de que ambos procedimientos son totalmente equivalentes, la percepción es un factor importante en los juegos que incluyen un componente de oportunidad (en particular si el juego también incluye un componente pecuniario). Para evitar la ira de los jugadores que no entienden esta equidad, puedes seguir el procedimiento original ...

Otros consejos

Dependiendo de las reglas del juego, @mjv tiene razón, la división aleatoria inicial no afecta las probabilidades. Esto es análogo a un juego en el que n jugadores roban cartas a su vez desde un mazo boca abajo: la barajadura inicial del mazo es la división aleatoria en las "bolsas". de cartas para cada jugador.

Pero si reemplaza los artículos después de cada sorteo, importa si hay una bolsa o muchas. Con una bolsa, cualquier artículo en particular eventualmente será dibujado por cualquier jugador con la misma probabilidad. Con muchas bolsas, ese artículo solo puede ser robado por el jugador en cuya bolsa se colocó inicialmente.

Pasando al nivel de software, si el juego requiere una sola bolsa, recomendaría simplemente programarlo de esa manera: no debería ser más difícil que n bolsas, y no tienes que probar el nuevo juego equivalente a lo viejo.

Mi intuición me dice que dividir una colección aleatoria de cosas en subconjuntos aleatorios más pequeños seguiría siendo igualmente aleatorio ... no importa si un jugador elige de un grupo grande o uno más pequeño (que a su vez, se alimenta a sí mismo en el grande)

¡Para un juego es suficiente al azar en mi humilde opinión!

Dependiendo de cuán crucial es la seguridad, podría estar bien (si hay dinero involucrado (usted o ellos) NO LO HAGA). No estoy completamente seguro de que sea menos aleatorio desde la perspectiva de un jugador ignorante.

a) No cuente con que sean ignorantes, su programa podría ser descifrado y entonces sabrían qué piezas están surgiendo

b) Sería muy complicado llenar las bolsas de tal manera que no se introdujeran vulnerabilidades. Por ejemplo, tomemos el ingenuo algoritmo de elegir uno al azar y colocarlo en el primer cubo, sacarlo y luego hacer lo mismo para el segundo cubo y así sucesivamente. Acabas de asegurarte de que si hay N piezas, el primer jugador tenía una probabilidad de 1 / N de elegir una pieza determinada, el segundo jugador tenía un 1 / (N-1), el tercero tenía 1 / (N-3) y pronto. Luego, los jugadores pueden analizar las piezas ya jugadas para determinar las probabilidades de que otros jugadores tengan ciertas piezas.

I THINK el siguiente algoritmo podría funcionar mejor, pero casi todas las personas se equivocan la probabilidad la primera vez que se les ocurre un nuevo algoritmo. NO UTILICE ESTO, solo comprenda que podría cubrir la vulnerabilidad de seguridad de la que hablé:

  1. Crea una lista de N artículos ordenados e instancia jugadores P
  2. Marque 1 / P de los elementos al azar (con reemplazo) para cada jugador
  3. Haga esto repetidamente hasta que todos los N elementos estén marcados y haya un número igual cantidad de elementos marcados para cada jugador (NOTA: puede tardar mucho más de lo que puede vivir dependiendo de N y P)
  4. Coloque los elementos apropiados en el cubo del jugador y reorganice aleatoriamente (NO use un algoritmo de intercambio de lugares)

Incluso entonces, después de todo esto, es posible que sigas siendo vulnerable a que alguien descubra qué hay en su cubo a partir de una vulnerabilidad. Quédate con un grupo combinado, todavía es difícil elegir al azar, pero te hará la vida más fácil.

Editar: Sé que el tono suena un poco desigual. Principalmente incluí todo lo audaz para las personas que podrían leer esto fuera de contexto y probar algunos de estos algoritmos. Realmente te deseo lo mejor :-)

Edición 2: en consideración adicional, creo que el problema de elegir en orden podría reducirse a tener jugadores tomando turnos en primer lugar. Si eso ya está en las reglas, puede que no importe.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top