概要
いわゆるソシャゲーというものの多くにはプレイヤー対戦やチームバトルというのがあります。
とあるゲーム のチームバトルは下記のように運営されます。
- 「ランク」の同じチームがマッチングされる(きっとランダム)
- ランクはS,A,B,C,Dとある
- 3回勝つとランクアップし、3回負けるとランクダウンする
- ただしSランク以上にはならない。また、Cランク以下にもならない。(D→Cは上がるだけっぽい)
ここで個人的に謎だったのは、負けても勝利回数は減らないし、逆に勝っても敗北回数は減らないというところ。
これでランク間に変な偏りが発生したりしないんだろうかと検証したくなりました、という話。
単純なプログラムなので特に技術的に面白いことはないです。
検証
シミュレーションのためのモデル化
バトルの勝ち負けは戦術や相性などにも影響されますが、そういうのは省いて下記のような単純なモデルを考えシミュレーションします。
- 5000のチームがある
- チームは順番に1,2,...5000の戦闘力を持ち、それは変動しない
- シミュレーション開始時点ではすべてのチームはDから始まる
- 各ターンごとに同じランク内でランダムにマッチングさせる
- 勝敗はチームの戦闘力の比較で決まる。乱数などは含めない。
コード
シミュレーション結果
私の考えでは、ランク間の偏りが発生する、でしたがそういうことはなかったです。
とあるターンでのチーム数の分布:
ランク | ランク内のチーム数 |
---|---|
D | 1 |
C | 1075 |
B | 1409 |
A | 1413 |
S | 1102 |
普通にSランクはやや少ないです。
Dランクは最弱のチームが1つ取り残されます。かわいそうですね。
少し意外なのはCランクで、これもSランクと同程度の少なさでした(むしろSランクより少なめ)。
Cランクに落ちてもすぐにランクアップするチームが多いようです。