すべての確率変化をモデル化するのはチト難しいですが、赤棒の排出によってパケをリセットするのが吉なのか?ということについては考察できそうだったので、考えて見ることに。
前回までの考察より、イベ赤が1つ出るまでの確率変化は
(4732.1*np.power(x, -1.684))/100
赤の場合は
(244.35*np.power(x, -1.021))/100
でほぼ近似できそうなので、この式から確率を計算し、シミュレートしてみた。
シミュレーション1
4週目パケは604枚なので、金チケ604枚でパケを空にするのと、
イベ赤棒あるいは赤棒が出たらパケをリセットするのと、どちらが
赤棒の数が多いのかを考察してみる。
金チケ一枚使って抽選したとし、乱数値がイベ赤確率+赤確率を下回った場合に1回赤棒を得るとし、
パケをリセットして、また抽選し、…を金チケ604枚抽選するまで繰り返す。
これを1試行として10,000試行行った時に、得た赤棒(含むイベ赤棒)の合計回数をグラフにしたのが以下の図。
これを見ると3~4回(つまり9~12本)くらい赤棒を排出する場合が最頻値のようです。
604枚でパケを空け切ると、イベ赤棒4回、赤棒2回の18本が必ず得られることを考えると、パケ空けた方が確実な気が…
シミュレーション2
では、最初の赤棒あるいはイベ赤棒が出るまでに必要な抽選回数はどんなものだろう、ということをやってみたのが以下の図。
10,000試行のうち1/4程度は50回までに1回は出てるっぽい。100回までだと10,000試行の4割近くは出てる。
一方で500枚引いても出ない場合が1割程度はある...。
次の進撃戦は、100回くらいまでに赤棒が出ればリセット、そうでなければ引き切るという感じでやってみようかしら。
まあ、numpyの一様乱数と運営の一様乱数発生が同じ品質だとしたら、という仮定のもとですが。
以下、スクリプト。バグとかあったらこっそり教えて下さい(^^;;;
—simulation1—
#coding:utf-8
import numpy as np
import pylab as pl
import csv
def eveRed(x):
return (244.35*np.power(x, -1.021))/100
def Red(x):
return (4732.1*np.power(x, -1.684))/100
n=10000
num_init=604
num_Reds=[]
for j in range(0,n):
rand = np.random.rand(num_init)
num_Red = 0
num = num_init
for i in range(0, len(rand)):
r = rand[i]
if r < eveRed(num)+Red(num):
num_Red = num_Red + 1
num = num_init
else:
num = num-1
num_Reds.append(num_Red)
print(num_Reds)
pl.hist(num_Reds, bins=10)
pl.show()
—simulation2—
#coding:utf-8
import numpy as np
import pylab as pl
import csv
def eveRed(x):
return (244.35*np.power(x, -1.021))/100
def Red(x):
return (4732.1*np.power(x, -1.684))/100
n=10000
num_init=604
num_Reds=[]
for j in range(0,n):
rand = np.random.rand(num_init)
num_Red = 0
num = num_init
for i in range(0, len(rand)):
r = rand[i]
if r < eveRed(num)+Red(num):
break
num_Reds.append(i)
print(num_Reds)
pl.hist(num_Reds, bins=10)
pl.show()

