Логика / Вероятность Вопрос: Сбор из сумки - PullRequest
1 голос
/ 29 ноября 2009

Я кодирую настольную игру, где есть множество возможных фигур. Каждый ход игроки удаляют случайно выбранные части из сумки в соответствии с определенными правилами.

Для моей реализации может быть проще сначала разделить сумку на пулы для одного или нескольких игроков. Эти пулы будут выбираться случайным образом, но теперь разные игроки будут выбирать из разных сумок. Это что-то другое?

Если бы сумка одного игрока закончилась, из общего запаса в случайном порядке замешивалось бы больше.

Ответы [ 4 ]

5 голосов
/ 29 ноября 2009

Пока:

  • случайное разбиение на пакеты "pool"
  • случайное назначение игроков в данную сумку для пула
  • игра такова, что предметы, извлеченные игроками, эффективно удаляются из сумки (никогда не возвращаются в сумку или любую другую сумку на протяжении текущей игры)
  • игроки не осведомлены о содержании любых сумок

Два подхода («оригинальный» с одной большой общей сумкой, «модифицированный» с одной сумкой для пула на игрока) эквивалентны с точки зрения вероятностей.

Это становится немного сложнее к концу игры, когда сумки некоторых игроков пусты. Наиболее справедливо позволить выбрать из 100% предметов, которые все еще находятся в игре, следовательно, они должны как выбрать, из какой сумки они выбирают, так и [конечно, вслепую] выбрать один предмет из указанной сумки.

Эта проблема иллюстрирует интересную характеристику вероятностей, которая заключается в том, что вероятности относятся к количеству знаний о ситуации . Например, хозяин игры может хорошо знать, что сумка «пул», назначенная игроку X, не включает в себя, скажем, букву «А» (думая о скрэббл), но при условии, что никто из игроков не знает этого (и до тех пор, пока разбиения в бильярдную сумку были полностью случайными), игра остается честной, и игрок "X" все еще должен предположить, что его / ее вероятность попадания в "A" при следующем получении буквы такая же, как если бы все оставшиеся буквы были доступны ему / ей.

Edit:
Несмотря на математическую обоснованность утверждения, что обе процедуры полностью эквивалентны, восприятие является важным фактором в играх, которые включают случайный компонент (в частности, если игра также включает в себя денежный компонент) ). Чтобы избежать гнева игроков, которые не понимают этого равенства, вы можете придерживаться оригинальной процедуры ...

2 голосов
/ 29 ноября 2009

В зависимости от правил игры, @mjv прав, начальное случайное деление не влияет на вероятности. Это аналогично игре, в которой n игроков по очереди вытягивают карты из колоды лицевой стороной вниз: начальное перемешивание колоды - это случайное деление на «мешки» карт для каждого игрока.

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

Поднимаясь до уровня программного обеспечения, если игра требует одну сумку, я бы рекомендовал просто запрограммировать ее таким образом: она должна быть не сложнее, чем n сумок, и вам не нужно доказывать новую игру эквивалентно старому.

1 голос
/ 29 ноября 2009

Моя интуиция подсказывает мне, что разделение случайного набора вещей на более мелкие случайные подмножества останется одинаково случайным ... не имеет значения, выбирает ли игрок из большого пула или из меньшего (что, в свою очередь, подает себя большой)

Для игры достаточно случайного ИМХО!

0 голосов
/ 29 ноября 2009

В зависимости от того, насколько важна безопасность, все может быть в порядке (если речь идет о деньгах (вы или они), НЕ ДЕЛАЙТЕ ЭТО). Я не совсем уверен, что это будет менее случайно с точки зрения невежественного игрока.

а) Не рассчитывайте на то, что они не знают, что ваша программа может быть взломана, и тогда они узнают, какие кусочки идут впереди

б) Было бы очень сложно заполнить пакеты таким образом, чтобы вы не представляли уязвимости. Например, давайте возьмем наивный алгоритм случайного выбора одного из них и помещения его в первое ведро, его извлечения, а затем проделывания того же самого для второго ведра и так далее. Вы просто гарантировали, что если есть N фигур, у первого игрока была вероятность 1 / N выбрать данный кусок, у второго игрока 1 / (N-1), у третьего 1 / (N-3) и скоро. Игроки могут затем проанализировать уже сыгранные фигуры, чтобы выяснить вероятность того, что другие игроки держат определенные фигуры.

Я ДУМАЮ следующий алгоритм может работать лучше, но почти все люди ошибаются с вероятностью, когда впервые придумывают новый алгоритм. НЕ ИСПОЛЬЗУЙТЕ ЭТО, просто поймите, что это может покрывать уязвимость безопасности, о которой я говорил:

  1. Создайте список из N упорядоченных предметов и создайте экземпляры P игроков
  2. Марка 1 / P предметов случайным образом (с заменой) для каждого игрока
  3. Повторяйте это до тех пор, пока все N элементов не будут помечены и количество предметов, помеченных для каждого игрока (ПРИМЕЧАНИЕ: может занять гораздо больше времени, чем вы можете жить в зависимости от N и P)
  4. Поместите соответствующие предметы в ведро игрока и случайным образом переставьте (НЕ используйте алгоритм обмена местами)

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

Редактировать: Я знаю, что этот тон звучит отрывисто. В основном я включил все, что выделено жирным шрифтом для людей, которые могут прочитать это вне контекста и попробовать некоторые из этих алгоритмов. Я действительно желаю вам всего хорошего: -)

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

...