クク

  • 自分以外のメンバーの持っているカードがわからない状態で失格またはビリにならないようにする多人数ゲーム
  • 既存のゲームのシンプル化
    • もし特殊カードがまったくないならどういうゲームになるか?
      • 特殊能力による失格がなくなる
    • カードカウンティングを無効化するためにカードは復元抽出とする
  • 1から10の値をランダムに渡されて、ビリを避けるために交換するかどうか考えるゲームになる
    • 交換するかどうかの意思決定という点ではポーカーと似ている
  • 最初の人は無情報なので最適行動が確定する
  • それ以降の人は、そこまでの人の振る舞いによって分布に対する知識が得られる

python

cards = range(10)
from random import choice
count = [0] * 10
worst = [0] * 10
def deal(): return [choice(cards) for i in range(5)]
for i in range(10000):
    d = deal()
    w = min(d)
    for c in d:
        count[c] += 1
        if c == w:
            worst[c] += 1

>>> count
[4946, 4975, 5025, 4993, 4921, 4911, 4863, 5255, 5034, 5077]
>>> worst
[4946, 3271, 2026, 1229, 613, 349, 130, 53, 5, 0]
>>> [w * 100 / c for (c, w) in zip(count, worst)]
[100, 65, 40, 24, 12, 7, 2, 1, 0, 0]
>>> sum(worst) / 50000.0
0.25244
  • つまり5人に0~9のカードがランダムに与えられる場合、カードが1ならビリの確率は65%。
  • 交換を要求した場合、相手のカードに対する情報はないので均等な確率であり、ビリになる確率は25.2%
  • というわけで、最初の人は交換しない状態でのビリの確率が25.2%よりも大きい、0~2のカードの時だけ交換するとよい。
  • 交換でカードを受け取った人は基本的には「ビリになる確率が25.2%より大きいカード」を受け取ってるのでさらに交換するのが最適戦略だが、例外が1点だけある。
    • それは「さっきまで自分が持っていたカード」の方が小さい場合。その情報によって、今持っているカードがビリになる条件付確率は0になるので交換しないのが最適。
  • 上記以外のシチュエーションは、自分が最初のプレイヤーではなく、かつ自分の前の人が交換していないケース。
    • そこまでの観測事実によってカードの分布が一様分布でなくなる。
    • ざっくり言って
      • 「いきなりノーチェンジ」が発生すると「その人が配られてたカードは閾値以上」という情報が増えるので閾値が上がる
      • 「チェンジで受けたカードをノーチェンジ」が発生すると「閾値以下のカードを受け取ったが自分の持っていたカードはさらに小さかった」を意味するので閾値が下がる
  • 特殊カードが入っている場合、交換要求すると失格する確率が割とある。ざっくり3 / 17 ((愚者、人間、猫) / (クク、馬、家以外))で18%
    • なので交換した方が得になるラインは意外と低い