はじめに
みなさん、こんにちは!
シユンです。
今日はポケポケをネタにしています。
確率統計学を使って理論を確認しつつ、最後にシミュレーションで実証できればと。。。
ポケポケで2種類のイーブイに出会った
ポケポケはリリース当初からインストールして遊んでいました。
いつ頃かは忘れましたが、イーブイに2種類のカードが出てきました。

攻撃力が違うので、どちらが強いのか気になっていました。
なので、今回を機に計算とシミュレーションをしてみようと思った次第です。
期待値、分散を計算してみる
まずは確率統計学を使って期待値と分散を計算してみます。
簡単なイーブイ
期待値について計算すると、次のようになります。
E[\alpha X]=\alpha\sum_{i=1}^{\infty}p_ix_i=20
分散について計算すると、次のようになります。
V[\alpha X]=0
難しいイーブイ
期待値と分散について計算しますが、大変式が長くなります。
こちらは「幾何分布」という確率分布に従っています。
詳しいことは検索して調べて頂けると助かります。
計算過程は末尾に記載しておりますので、気になる方はそちらをご覧ください。
期待値について計算すると、次のようになります。
\begin{align}
E[\alpha X]
&=\alpha\sum_{x=0}^{\infty}xp(1-p)^x\\
&=\alpha p\sum_{x=1}^{\infty}x(1-p)^x\\
&\vdots\\
&=\alpha\frac{1-p}{p}\\
&=20
\end{align}
分散について計算すると、次のようになります。
\begin{align}
V[\alpha X]
&=\alpha^2\left(E\left[X^2\right]-\left(E\left[X\right]\right)^2\right)\\
&=\alpha^2\left(\sum_{x=0}^{\infty}x^2p(1-p)^x-\left(E\left[X\right]\right)^2\right)\\
&\vdots\\
&=\alpha^2\frac{1-p}{p^2}\\
&=800
\end{align}
計算結果を比較
計算結果を比較した表は次の通りです。
| 期待値 | 分散 | |
|---|---|---|
| 簡単なイーブイ | 20 | 0 |
| 難しいイーブイ | 20 | 800 |
結論として、期待値に差はないため攻撃力自体に有意な差はないことがわかりました。
あとは好みの問題ですね。
デッキの構成を踏まえ、リスクを取りたいか取りたくないかで選択するといいと思います。
シミュレーションしてみる
TypeScriptで簡単にシミュレーションを実装してみました。
import * as fs from "fs/promises";
import { parse } from 'csv-parse/sync';
export class Controller {
async test() {
const N: number = 100000;
const p: number = 1 / 2;
const DAMAGE = 20;
const result: [number, number][] = [];
for (let i: number = 1; i <= N; i++) {
let flag: boolean = true;
let damageCounter: number = 0
let coinCounter: number = 0;
while (flag) {
const x: number = Math.random();
if (x > p) {
coinCounter++;
damageCounter += DAMAGE;
} else {
flag = false;
result.push([coinCounter, damageCounter]);
}
}
}
const csvContent = result.map(res => res.join(',')).join('\n');
await fs.writeFile('./data/test.csv', csvContent);
const a = 0;
}
}
シミュレーションの概要は以下の通りです。(いわゆるモンテカルロ法ですね)
| 項目 | 内容 |
|---|---|
| 使用技術 | node.js, typescript |
| 表が出る確率 | 1/2 |
| 1回あたりのダメージ | 20 |
| シミュレーション回数 | 100,000回 |
結果
シミュレーション結果はCSVファイルに出力しました。
まず、結果の概要は以下の通りです。
| 項目 | 結果 |
|---|---|
| 期待値 | 19.9667 |
| 分散 | 796.1069 |
| 最大値 | 380 |
概ね理論値通りになりました。
最大値は380ということで、19回連続で表とは驚異的ですね。
確率としては約0.0002%ということで、すごい確率だ。。。
きれいな幾何分布になっていますね。
おわりに
攻撃力に差があるように見せて期待値は同じということで、よく考えられているなあと。
実際に計算して同じであるか、いつか聞いてみたいものです。
Appendix
計算過程を知りたい人向けに、掲載しておきます。
期待値計算
もとの期待値の式は以下の通りでした。
\begin{align}
E[\alpha X]
&=\alpha\sum_{x=0}^{\infty}xp(1-p)^x\\
&=\alpha p\sum_{x=1}^{\infty}x(1-p)^x
\end{align}
マクローリン展開の1回微分の両辺にxをかけたものの計算結果をもとにk=x、x=1-pとすると、以下のように計算を続けることができます。
\begin{align}
\alpha p\sum_{x=1}^{\infty}x(1-p)^x
&=\alpha p\frac{1-p}{(1-(1-p))^2}\\
&=\alpha\frac{1-p}{p}
\end{align}
したがってα=20、p=1/2であることを踏まえると、期待値は20となります。
分散計算
もとの分散の式は以下の通りでした。
\begin{align}
V[\alpha X]
&=\alpha^2\left(E\left[X^2\right]-\left(E\left[X\right]\right)^2\right)\\
&=\alpha^2\left(E\left[X^2-X+X\right]-\left(E\left[X\right]\right)^2\right)\\
&=\alpha^2\left(E\left[X(X-1)\right]+E[X]-\left(E\left[X\right]\right)^2\right)\\
\end{align}
E[X]については期待値のパートで算出したので、E[X(X-1)]について算出していきます。
\begin{align}
E\left[X\left(X-1\right)\right]
&=\sum_{x=0}^{\infty}x(x-1)p(1-p)^x\\
&=p\sum_{x=1}^{\infty}x(x-1)(1-p)^x
\end{align}
マクローリン展開の2回微分にxの2乗をかけた計算結果をもとにk=x、x=1-pとすると、以下のように計算を続けることができきます。
\begin{align}
E\left[X\left(X-1\right)\right]
&=p\sum_{x=1}^{\infty}x(x-1)(1-p)^x\\
&=p\left(\frac{2(1-p)^2}{p^3}\right)\\
&=\frac{2(1-p)^2}{p^2}\\
&=2
\end{align}
これより元の式に戻り、計算した結果は以下の通りです。
\begin{align}
V[\alpha X]
&=\alpha^2\left(E\left[X(X-1)\right]+E[X]-\left(E\left[X\right]\right)^2\right)\\
&=20^2\left(2+1-1\right)\\
&=800
\end{align}
したがって、分散は800となります。
マクローリン展開
f(x)=f(0)+f'(0)x+\frac{1}{2!}f''(0)x^2+\frac{1}{3!}f'''(0)x^3+\cdots
このマクローリン展開を1/1-xに対して行うと以下の通りになります。
\frac{1}{1-x}=1+x+x^2+x^3+\cdots
ここで両辺を1階微分すると以下の等式ができます。
\begin{align}
\frac{1}{(1-x)^2}
&=1+2x+3x^2+\cdots\\
&=\sum_{k=1}^\infty kx^{(k-1)}
\end{align}
さらに両辺にxをかけておきます。
\frac{x}{(1-x)^2}
=\sum_{k=1}^\infty kx^{k}
両辺を2階微分すると以下の等式ができます。
\begin{align}
\frac{2}{(1-x)^3}
&=2+6x+12x^2+\cdots\\
&=\sum_{k=1}^\infty k(k-1)x^{k-2}
\end{align}
さらに、両辺にxの2乗をかけておくと以下の通りになります。
\frac{x^2}{(1-x)^3}
=\sum_{k=1}^\infty k(k-1)x^{k}
