概要
とある動画でこんな話がありました.
ボーナス抽選が多数の小役の重複で抽選されている台と,5号機ジャグラーのように単独とチェリー重複のような台があった時,ボーナス確率が同じだとしてどっちがボーナスを引く回数が荒れるのか?
数学的に考察すれば結論はでると思いますが,今回はシミュレーションしてみて比較しようと思います.
ちなみに前者の方が荒れるという方の方が多数なんだとか.感覚的には重複する役をそもそも引けない場合はボーナスにつながらないし,引ける場合はボーナスのチャンスが多くなるからそっちの方があれるよね,ということだと思います.
シミュレーションをどうやるか?
私がこの手のパチスロシミュレーションをする場合,プログラム上に65536個のくじを準備して一枚一枚にはハズレとか単独ボーナスとかスイカ+ボーナスとか書いたものを準備するようにしています.
これがシミュレーションしたい機種のボーナス確率と一致するようして,後はここから1枚引くことでパチスロの1ゲームを表現しています.
出玉の計算みたいなのはこれだけだとできませんが,小役やボーナスの出現確率くらいならどれくらい荒れるのかのシミュレーションは十分できます.
ただし今回やりたいことはこれだとシミュレーションが難しいので,別の方法を行うことにします.
具体的には,ボーナス抽選を行う小役を引いたときは別途ボーナス抽選を別に行うこととします.実際のパチスロ機がどうやって抽選してるのかは私は知りませんが,今回はこの方法でやってみます.
実際の機種でシミュレーションしてみる
今回は5号機ハナビで行います.設定1ではボーナス抽選を行う小役の出現確率はチェリーBで1/243.63,一枚役A(通称コブナ)で1/1560.38,一枚役Bで1/606.81,一枚役AB同時成立役で1/1927.53,特殊リプレイで1/1560.38.チェリーBのみ5.2%でボーナス抽選を行うようになっていて,他の役は100%重複します.それ以外は重複抽選を行っておらず,しいていうならハズレを引いたときに単独ボーナスが成立する可能性があります.
先述したシミュレーション方法を行うので,65536枚のくじがある場合は5号機ハナビだと単独ボーナスが140,一枚役Aが42,Bが108,AB同時成立が34,特殊リプレイが42あります.チェリーBは269個あり,このうち5.2%でボーナス当選することになります.個数でいうと269個中14個当たりがあることになります.
この状況をコード化してみます.
とりあえず1万ゲーム回した状況を1万回やってみます.
import matplotlib.pyplot as plt import random import numpy as np machine = ['単独ボーナス' for i in range(140)] + ['一枚役A' for i in range(42)] + ['一枚役B' for i in range(108)] + ['一枚役AB' for i in range(34)] + ['特殊リプレイ' for i in range(42)] + ['チェリーB' for i in range(269)] machine += ['ハズレ' for i in range(65536-len(machine))] bonus_lottery = ['ボーナス' for i in range(14)] + ['ハズレ' for i in range(269-14)] result = [] for i in range(10000): res_ = 0 for i in range(10000): r = random.choice(machine) if r in ['単独ボーナス', '一枚役A', '一枚役B', '一枚役A', '一枚役AB', '特殊リプレイ']: res_ += 1 elif r == 'チェリーB': r2 = random.choice(bonus_lottery) if r2 == 'ボーナス': res_ += 1 result.append(res_)
このコードを実行すると,乱数に左右されますが1万ゲームで何回ボーナスを引いたかを1万回やった結果がでます.
では各何回引いたのかを可視化してます.
plt.hist(result)

乱数次第,実際に打つ場合は引き次第でボーナス合計30回程度もあれば80回の場合もありますね.
次に単独ボーナスが1/172.46で成立している状況での抽選結果を見てみます.この確率はハナビのボーナス合算と同じになります.
この確率だと65536中380当たりがあることになります.
machine2 = ['ボーナス' for i in range(380)] + ['ハズレ' for i in range(65536-380)] result2 = [] for i in range(10000): res_ = 0 for i in range(10000): r = random.choice(machine2) if r == 'ボーナス': res_ += 1 result2.append(res_) plt.hist(result2)

グラフを見ただけだとよくわからないので,どれくらい荒れるのかの指標として分散で見てみます.大きい方が荒い,ということになります.
np.var(result) #今回は56.23921856 np.var(result2) #今回は56.033629749999996
というわけで分散の値だとほぼ変わらず.若干多数の役で抽選する場合の方が若干荒いんですが,ここは乱数次第で逆転することもあるのでほぼ同等とみていいと思います.
1万ゲームじゃなくてもっと少ないゲーム数なら?
1万ゲームだと1日中パチスロ打ってて達成できるゲーム数くらいなので,もう少し短めの3000ゲームの場合で見てみます.
machine = ['単独ボーナス' for i in range(140)] + ['一枚役A' for i in range(42)] + ['一枚役B' for i in range(108)] + ['一枚役AB' for i in range(34)] + ['特殊リプレイ' for i in range(42)] + ['チェリーB' for i in range(269)] machine += ['ハズレ' for i in range(65536-len(machine))] bonus_lottery = ['ボーナス' for i in range(14)] + ['ハズレ' for i in range(269-14)] result = [] for i in range(10000): res_ = 0 for i in range(3000): r = random.choice(machine) if r in ['単独ボーナス', '一枚役A', '一枚役B', '一枚役A', '一枚役AB', '特殊リプレイ']: res_ += 1 elif r == 'チェリーB': r2 = random.choice(bonus_lottery) if r2 == 'ボーナス': res_ += 1 result.append(res_) machine2 = ['ボーナス' for i in range(380)] + ['ハズレ' for i in range(65536-380)] result2 = [] for i in range(10000): res_ = 0 for i in range(3000): r = random.choice(machine2) if r == 'ボーナス': res_ += 1 result2.append(res_) np.var(result) np.var(result2)
実行した結果は以下のようにこちらもほぼ差がなく,むしろ単独ボーナスのみで抽選しているほうが荒めという判定になっています.

結論
本当は統計的に判断すべきでしょうが,今回のシミュレーションだとおそらく両者に差はないという結論になると思います.
ただし実際のパチスロと抽選方法が異なる可能性があるのと,できるだけ荒れるようにアルゴリズムを工夫するとも聞いたことがあるので実機でやっている場合とは異なる可能性はあります.
数学的に考えても多分荒さに差はでないと思います.