シミュレーションの実装

ここの分野では高校レベルの数学の知識が必要です。シミュレーションをやりたい方はスキップしても構いません。

マイニングにおいて、善性・悪性ノードのどちらかが当たりを引く確率を$p$とし、一秒間のうちにどちらかが一度以上当たりを引く確率を$q$とします。
ここで$q=\frac{1}{300}$となる場合を考えましょう。
全体のハッシュレート(単位時間あたりに行うハッシュ計算の数)を$n回/s$として、$q=1-(1-p)^n$とおくことができます。
また、マイニングではコンピュータは一秒間に大量のハッシュ計算をし、それに対応するようにハッシュ計算の難易度も上がるので、 $p \to 0,n \to \infty$と近似して考えることができます。ここで、

\[ \lim_{p \to 0,n \to \inf}q=1-(1-p)^n=\frac{1}{300} \]

となるようなpとnの関係性を考えると、ネイピア数$e$の定義から

\[ q=\lim_{p \to 0} 1-(1-p)^\frac{1}{300p}=e^\frac{-1}{300}\approx \frac{1}{300} \]

と近似ができました。これによって極めて小さくなる、コンピュータで扱いにくい$p$の値を利用せずに$q$を扱うことができます。
また、善良ノードと悪性ノードのハッシュレートをそれぞれ$a,b$とし、一秒間のうちにあたりを引く確率を$\alpha,\beta$とすると、

\[ \\
alpha = \lim_{p \to 0} 1-(1-p)^(\frac{1}{300p}\times \frac{a}{a+b})=e^(\frac{-1}{300}\times \frac{a}{a+b}) \] \[ \beta = \lim_{p \to 0} 1-(1-p)^(\frac{1}{300p}\times \frac{b}{a+b})=e^(\frac{-1}{300}\times \frac{b}{a+b}) \]

と置くことができました。Javascriptを用いて5ミリ秒ごとにこの確率で行われる試行による判定を繰り返すことでシミュレーションを実行しています。

シミュレーション

それぞれに自然数を入力してください(合計が20以下になるようにしてください。)

善性ノード: 敵性ノード: