パチスロのシミュレーターを作った際に使用した関数「numpy.random.choice()」についての忘備録です。
スロットの毎回転での子役抽選振り分けに使える関数はないかなーと探してみたところ、numpyのrandom.choice()が一番簡単そうという結論に至りました。
このページではスロットの子役抽選を例に具体的な使い方を説明していきます。
具体例
マイジャグラー3という機種のスロットを5回転させた場合に、どのような子役が当たるのかという簡単なプログラムです。
以下の実行ボタンをクリックしてみてください。
はずれやブドウ、リプレイあたりの表示が並んでいると思います。運がいい方はBIGやREGULARが出ているかもしれません。
numpy.random.choice()を使うと、このようなプログラムを作ることができます。
解説
numpy.random.choice()の基本形
基本形は以下の形です。
1 2 3 |
# example numpy.random.choice(a, size=None, replace=True, p=None) |
- a:配列
- size:整数または要素数2の配列(省略可)
- replace:TrueまたはFalse(省略可)
- p:配列(aと要素の数が同じで、要素の合計値が1。省略可)
a
aには取り出す要素を配列で渡します。例では子役名をリスト(koyaku_list)で渡しています。
size
sizeは抽選する回数です。整数で指定すればその回数だけ抽選して戻り値は1行のリスト、要素数2の配列[3,2]のようにすると3行2列のリストが戻り値となります。
例では5回転分抽選したかったので5を渡しています。
省略した場合はNoneが渡され、リストではなく要素が1つそのままの形式で戻り値となります。
replace
重複抽選を認めるかどうかです。Trueで認める、Falseで認めない。
要は高校数学でよく出てくる「袋の中から取り出した球を袋に戻す」のがTrue、「袋の中に戻さない」のがFalseです。
スロットでは同じ役が回転の度に何度も出てくるのでTrueです。
省略した場合はTrueとなります。
p
aで渡した配列の要素それぞれの抽選確率を、リストで渡します。
注意点が2つあります。
1つ目はaの要素数とpの要素数は同じでなければいけません。
2つ目はpの要素の合計値は1にならなければなりません。
例ではprob_listとしてそれぞれの子役に対応した出現確率を渡しています。pの最初の272/65536がaの最初のBIGの確率、次がREGULARの確率とそれぞれに対応するようになっています。
またはずれの場合の確率もきちんと入れておかなければ、pの合計が1になりません。
省略した場合は、aの要素の出現確率がすべて均等になります。
NumPyによるデータ分析入門 ―配列操作、線形代数、機械学習のためのPythonプログラミング | Amazon.co.jp
使用プログラム
paiza.ioの埋め込みテストとして作ったマイジャグラー3のシミュレーターで実際に使っています。
コメントを残す