はじめに

「サイコロゲームと貧富の差」という記事で紹介されていた「一見平等に見えるルールが不平等を生む」ゲーム、どこかでみた気がしてよくよく考えたら コレSplatoon2の「ガチアサリ」のルールっぽいな と思い、「ガチアサリ」のルールで「貧富の差」(勝敗の差)が生じないか簡単に確かめてみました。

簡易ガチアサリのルール

簡易ガチアサリとして次のようなゲームを考えます*

(*実際のガチアサリはもっと複雑で面白いゲームですがここではシミュレーションの都合上めちゃくちゃ簡単なルールで考えます)

  1. 最初8人がアサリを4つずつ持っている
  2. 1試合の時間は300秒(5分)
  3. 8人にはそれぞれ1~8までの番号が振られており、1~4がAチーム、5~8がBチームとする
  4. 1秒の間に8面サイコロを二回振り、最初に出た目の人が、次に出た目の人にアサリを一つあげる。ただし、最初の人がアサリを持っていない場合はそのまま。
  5. 1秒に1回アサリがランダムに生まれ1~8番の人の手に渡される
  6. アサリが増えたタイミングでアサリの個数が10個超えたら即10個アサリを持ったプレイヤーがいるチームに1ポイント入るとする
  7. 以上の 4~6 が試合終了まで繰り返される
  8. 試合終了時点でポイントの多いチームが勝利

シミュレーション

Pythonの書き捨てコードのため色々テキトーですが、上記ルールだと次のようなコードになりそうです。

asari.py
# -*- coding: utf-8 -*-
import numpy as np

def GachiAsari(a,k):
  GA = 10
  if GA <= a[k]:
    a[k] = 0
    if k < 4:
      p[0] = p[0] + 1
    else:
      p[1] = p[1] + 1

def WinAsari(win,p):
  if p[1] < p[0]:
    win[0] = win[0] + 1
  elif p[0] < p[1]:
    win[1] = win[1] + 1

if __name__ == '__main__':

  S = 8
  Time = 300
  N = 100
  win = np.zeros(2)

  for num in range(N):
    a = np.full(S, 4)
    p = np.zeros(2)
    for i in range(Time):
      k1 = np.random.randint(S)
      k2 = np.random.randint(S)
      if a[k1] != 0:
        a[k1] = a[k1] - 1
        a[k2] = a[k2] + 1
        GachiAsari(a,k2)
      k3 = np.random.randint(S)
      a[k3] = a[k3] + 1
      GachiAsari(a,k3)
    WinAsari(win,p)

  print('A:{0} B:{1} ({2})'.format(win[0],win[1], win[0]/win[1]))

S が人数、Timeが試合時間(sec), Nが試合回数、GA(ガチアサリ)がアサリ10個のことです。実行すると次のようになります。

Aの隣の数が100試合したうちのAチームの勝利数、Bの隣の数がBチームの勝利数です。括弧に入った数はAチームの勝利数をBチームの勝利数で割ったものです。

Terminal
$ python asari.py
A:51.0 B:43.0 (1.18604651163)

N=100(100試合分)を10回くらい実行すると次の結果になりました。100試合程度だと、まれに5割程度の勝敗の差が生じることもあるようです。

A:43.0 B:40.0 (1.075)
A:40.0 B:42.0 (0.952380952381)
A:38.0 B:42.0 (0.904761904762)
A:55.0 B:34.0 (1.61764705882)
A:47.0 B:41.0 (1.14634146341)
A:41.0 B:46.0 (0.891304347826)
A:35.0 B:54.0 (0.648148148148)
A:50.0 B:36.0 (1.38888888889)
A:42.0 B:46.0 (0.913043478261)
A:39.0 B:47.0 (0.8297872340425532)

N=1000(1000試合分)を10回くらい実行した場合。ざっと見るとN=100の時よりチームの勝敗の差は少ないっぽいです(せいぜい1~2割以内)。1000試合というと5分×1000回≒83時間程度ゲームをプレイした場合と考えられます。

A:431.0 B:426.0 (1.011737089201878)
A:428.0 B:428.0 (1.0)
A:412.0 B:429.0 (0.9603729603729604)
A:428.0 B:419.0 (1.0214797136038185)
A:420.0 B:450.0 (0.9333333333333333)
A:466.0 B:399.0 (1.167919799498747)
A:451.0 B:412.0 (1.0946601941747574)
A:430.0 B:415.0 (1.036144578313253)
A:414.0 B:447.0 (0.9261744966442953)
A:456.0 B:420.0 (1.0857142857142856)

まとめ

「サイコロゲームと貧富の差」という記事で紹介されていたゲームをSplatoon2のガチアサリっぽくルールをアレンジしてチームの勝敗を計算してみました。

元記事からみたら厳密な議論は何もしていないですが、なんとなく 簡易ガチアサリのルールの場合、1000試合(ざっくり100時間)くらいプレイすればそれほど極端な勝敗の差は生まれなさそう な印象を受けました。

ガチアサリの運要素を減らすためにもっとSplatoon2で遊ぼう(?)というメッセージ(誰からの?)かもしれませんね(笑)

参考

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.