賭博黙示録カイジのEカードの条件での個体数の増減をシミュレーションしてみた

賭博黙示録カイジという漫画に、Eカードという心理ゲームが出てきます。

https://dic.pixiv.net/a/Eカード

二人のプレイヤーが皇帝（皇帝カード1枚と市民カード4枚）と奴隷（奴隷カード1枚と市民カード4枚）に分かれて、同時に一枚ずつカードを出して、優劣を競うゲームです。

・皇帝vs市民なら皇帝の勝ち
・市民vs奴隷なら市民の勝ち
・奴隷vs皇帝なら奴隷の勝ち（オッズ：5倍）

というジャンケンでの「グー・チョキ・パー」のような三すくみの関係になっています。

このような「食う・食われる」のような関係は、捕食者・被食者の生態学モデルで解析できます。

https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%88%E3%82%AB%E3%83%BB%E3%83%B4%E3%82%A9%E3%83%AB%E3%83%86%E3%83%A9%E3%81%AE%E6%96%B9%E7%A8%8B%E5%BC%8F

ただ、今回は「皇帝⇄市民⇄奴隷」と相互に社会的立場が世代ごとに交換される条件での比率がどうなるか調べてみたいと思います。

ここで、進化生物学におけるレプリケーターダイナミクス（進化ゲーム理論）をモデルに採用しました。

https://en.wikipedia.org/wiki/Replicator_equation

このモデルでは、それぞれの属性（身分）のプレイヤーが対戦相手の比率とその対戦で得られるスコアに比例した利得（ゲーム理論における報酬）を得て、各プレイヤーの次世代への増減が各プレイヤーごとの「利得ー全体平均利得」となるような仮定のもとで微分方程式を数値的に解くことで推移が求まります。

一見すると、奴隷は皇帝に対して5ポイントも獲得でき、逆に皇帝は奴隷から5ポイントを奪われるので、奴隷＞市民＞皇帝の比率となるような、映画JOKERのラストシーンで描かれた無敵の人で溢れるゴッサムシティのようなカオスが生まれるのではないか？と予測を立てました。

https://dic.nicovideo.jp/a/無敵の人

https://dic.pixiv.net/a/無敵の人

https://youtu.be/NHi_8FGMObQ

各プレイヤーの比率と平均比率を計算します。

グラフの書き方は次の記事を参考にしました。

https://rikei-life.com/python-graph/#index_id1

微分方程式を変数のリストを作成して系列データを作る方法は次の記事を参考にしました。

https://qiita.com/Sunset_Yuhi/items/fb574091fe380e677735

以下のコードをJupiterNotebookで実行しました。

```python:qiita.ipynb
import numpy as np
import matplotlib as plt
from matplotlib import pyplot as plt
# export LANG="C.UTF-8"

x_emperor = 1/3
x_citizen = 1/3
x_slave = 1- x_emperor-x_citizen

x_emperor_list = [x_emperor]
x_citizen_list = [x_citizen]
x_slave_list = [x_slave]

E_emperor = 0
E_citizen = 0
E_slave = 0
E_average = 0

score_emperor_vs_citizen=1
score_citizen_vs_slave=1
score_slave_vs_emperor=5

timesteps = 50000
t = 0
t_list =[t]
h = 0.001

sum_emperor = 0
sum_citizen = 0
sum_slave = 0

average_emperor = 0
average_citizen = 0
average_slave = 0

for i in range(timesteps):
    E_emperor = x_citizen*score_emperor_vs_citizen-x_slave*score_slave_vs_emperor
    E_citizen = x_slave*score_citizen_vs_slave-x_emperor*score_emperor_vs_citizen
    E_slave = x_emperor*score_slave_vs_emperor-x_citizen*score_citizen_vs_slave
    E_average = x_emperor*E_emperor+x_citizen*E_citizen+x_slave*E_slave
    x_emperor = x_emperor+h*x_emperor*(E_emperor-E_average)
    x_citizen = x_citizen+h*x_citizen*(E_citizen-E_average)
    x_slave = x_slave+h*x_slave * (E_slave-E_average)
    t = t+h
    t_list.append(t)
    x_emperor_list.append(x_emperor)
    x_citizen_list.append(x_citizen)  
    x_slave_list.append(x_slave)
    sum_emperor += x_emperor
    sum_citizen += x_citizen
    sum_slave+=x_slave    

plt.plot(t_list, x_emperor_list, label="emperor")
plt.plot(t_list, x_citizen_list, label="citizen")
plt.plot(t_list, x_slave_list, label="slave")
plt.xlim(0,50) 
plt.ylim(0,1)
plt.xlabel("Time")
plt.ylabel("Ratio-of-player")
plt.title("Zawa…Zawa…")
plt.legend()
plt.show()

average_emperor =sum_emperor/timesteps
average_citizen =sum_citizen/timesteps
average_slave =sum_slave/timesteps

print(average_emperor)
print(average_citizen)
print(average_slave)
```

結果は次のグラフのようになりました。

![z.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1210818/dd66cf41-d296-121f-bd02-d7e9e7f40cd7.png)

予想に反して、市民が大半を占める状況となりました。

平均比率は、周期ピッタシに計算してないので、厳密ではないのですが、皇帝・市民・奴隷の順で以下の値になりました。

0.13168200662434085
0.7239408166111875
0.14437717676446413

すなわち、カイジで描かれた

[皇帝側]
・皇帝1枚（0.2：20%)
・市民4枚（0.8：80%）

[奴隷側]
・奴隷1枚（0.2：20%）
・市民4枚（0.8：80%）

という初期設定は、進化生物学的なシミュレーションの結果と照らし合わせると妥当といえるのでした。

ところで、なぜ皇帝に対して圧倒的に強い奴隷が自然条件下で優位にならないのでしょうか。おそらく、その理由として、「皇帝を過剰に倒し過ぎてしまうことで、かえって奴隷の繁殖が制限され、ほどほどの強さを持つ市民がかえって支配的な条件になっている」とグラフから考えられました。

失うものが何もない奴隷＝無敵の人の強さが「あまりにも強い」ために「普通の市民」が権力者の皇帝を抑えてマジョリティになるという結果は、現実と照らし合わせると、奇妙な符号を感じられたのでした。