ハナビの設定判別ツール作成
今回はハナビの設定判別ツールをPythonで作成します。
そのため、今回は新しい情報というよりは作り方の趣味や思想の話になってしまいます旨、ご了承ください。
ハナビの設定判別ツールを作るにあたって気になるところといえば、花火チャレンジと花火GAME(以下まとめてRTと記載することがあります。)の回転数のカウント方法だと思います。
できるだけ実戦時のカウント値をそのまま入力できるプログラムを作りたいわけですが、例えば実戦中のカウント方法として以下の方法が考えられます。
1. 消化したRTのG数をカウント
メリット:G数の把握が楽
特に毎回回数が変動する花火チャレンジでデータカウンタの数字をそのまま入れるだけでOK。
デメリット:カウンターの数字が大きくなるので、カウンターをポチポチするのが大変
2. 消化できなかったRTのG数をカウント
メリット:カウンターの数字が小さいので、カウンターをポチポチするのが楽
デメリット:RTの残G数の確認が面倒
残G数を見ておくか、データカウンタの数字から毎回引き算しないとダメ。
どのようなツールにするかは使用者の好み次第ですが、今回は自分用のツールなので、私個人の好みで「2. 消化できなかったRTのG数をカウント」する方法で作成していきます。
計算方法としては、花火チャレンジと花火GAMEそれぞれ、BB1回あたり20Gついてくるので、「BB回数 * 20 - RTの残G数」で計算できます。
二項分布確率の算出のコードにあてはめると以下のようになります。
花火チャンレンジ中のはずれの二項分布確率 = binom.pmf(花火チャレンジ中のはずれ回数, BB * 20 - 花火チャレンジの残G数, 花火チャレンジ中のはずれの設計上の確率)
花火GAMEの場合も同様の計算方法でOKです。
こちらが実際に作成したハナビの設定判別ツールのコードです。
※花火GAME中のRTリプレイにも設定差があるようですが、目押し精度に自信がないので項目から除外しています。
# coding: UTF-8
from scipy.stats import binom
def S_EST(回転数, BB, RB, チェリー, 並行氷, 風鈴, BB中斜め風鈴, BB中はずれ, HCはずれ, HGはずれ, HCマイナス, HGマイナス):
# 設定値データを定義
header = ['Machine', 'Setting', 'BB', 'RB', 'Cherry', 'Ice', 'Bell', 'BB_Bell', 'BB_Hazure', 'HC_Hazure', 'HG_Hazure']
set1 = ['HNB', '1', '312.1', '385.5', '18.045', '52.85', '15.66', '10.67', '16384', '7.07', '13.36']
set2 = ['HNB', '2', '303.4', '368.2', '18', '52.85', '15.3', '8.26', '16384', '6.61', '11.81']
set5 = ['HNB', '5', '292.6', '348.6', '17.96', '48.05', '14.97', '10.67', '481.9', '6.16', '10.44']
set6 = ['HNB', '6', '277.7', '324.4', '17.93', '48.05', '14.65', '8.26', '481.9', '5.81', '9.48']
SetData = [header, set1, set2, set5, set6]
# 設定段階分の確率算出値データをSetDataから読み込んでfor文を回す。
# ヘッダーを無視するために、iは1から。
S_EST = []
for i in range(1, len(SetData[:])):
All_EST = 0
# それぞれの二項分布確率算出。空欄の場合はその項を無視
if 回転数:
BB_EST = binom.pmf(BB, 回転数, 1.0 / float(SetData[i][2]))
All_EST = BB_EST
if 回転数:
RB_EST = binom.pmf(RB, 回転数, 1.0 / float(SetData[i][3]))
if All_EST == 0:
All_EST = RB_EST
else:
All_EST = All_EST * RB_EST
if 回転数 and チェリー != -1:
Cherry_EST = binom.pmf(チェリー, 回転数, 1.0 / float(SetData[i][4]))
if All_EST == 0:
All_EST = Cherry_EST
else:
All_EST = All_EST * Cherry_EST
if 回転数 and 並行氷 != -1:
Ice_EST = binom.pmf(並行氷, 回転数, 1.0 / float(SetData[i][5]))
if All_EST == 0:
All_EST = Ice_EST
else:
All_EST = All_EST * Ice_EST
if 回転数 and 風鈴 != -1:
Bell_EST = binom.pmf(風鈴, 回転数, 1.0 / float(SetData[i][6]))
if All_EST == 0:
All_EST = Bell_EST
else:
All_EST = All_EST * Bell_EST
if BB and BB中斜め風鈴 != -1:
BBBell_EST = binom.pmf(BB中斜め風鈴, BB * 24, 1.0 / float(SetData[i][7]))
if All_EST == 0:
All_EST = BBBell_EST
else:
All_EST = All_EST * BBBell_EST
if BB and BB中はずれ != -1:
BBHazure_EST = binom.pmf(BB中はずれ, BB * 24, 1.0 / float(SetData[i][8]))
if All_EST == 0:
All_EST = BBHzaure_EST
else:
All_EST = All_EST * BBHazure_EST
if BB and HCはずれ != -1:
HCHazure_EST = binom.pmf(HCはずれ, BB * 20 - HCマイナス, 1.0 / float(SetData[i][9]))
if All_EST == 0:
All_EST = HCHazure_EST
else:
All_EST = All_EST * HCHazure_EST
if BB and HGはずれ != -1:
HGHazure_EST = binom.pmf(HGはずれ, BB * 20 - HGマイナス, 1.0 / float(SetData[i][10]))
if All_EST == 0:
All_EST = HGHazure_EST
else:
All_EST = All_EST * HGHazure_EST
S_EST.append(All_EST)
# 結果の表示
for i in range(len(S_EST)):
print("設定", SetData[i + 1][1], ":", round(S_EST[i] / sum(S_EST) * 100,1), "%")
if __name__ == "__main__":
# 実践データ
# カウントしていない場合は-1を入力
回転数 = 606
BB = 1
RB = 2
チェリー = 41
並行氷 = 12
風鈴 = 47
BB中斜め風鈴 = 1
BB中はずれ = -1
HCはずれ = -1
HGはずれ = -1
HCマイナス = -1
HGマイナス = -1
S_EST(回転数, BB, RB, チェリー, 並行氷, 風鈴, BB中斜め風鈴, BB中はずれ, HCはずれ, HGはずれ, HCマイナス, HGマイナス)
このプログラムを実行した時の結果はこちら。
設定 1 : 23.6 % 設定 2 : 18.5 % 設定 5 : 33.8 % 設定 6 : 24.1 %
無事に設定判別結果が出力されていますね。
にほんブログ村
にほんブログ村
コメント
コメントを投稿