P牙狼月虹ノ旅人(牙狼MAXX)のボーダー算出

お世話になっております、スログラミングです。

前回に引き続きボーダー算出を行っていきます。
機種はタイトルにあるとおり、P牙狼月虹ノ旅人(牙狼MAXX)です。
(メーカーサイトを見るといつの間にか名前が変わっていますね。)

ということで、P牙狼月虹ノ旅人(牙狼MAXX)のボーダー算出を行いますが、中身は2つの過去記事の組み合わせなので、いきなり結果から記載したいと思います。
P牙狼MAXXのシミュレーション:シミュレータの作成方法

今回のアジェンダはこちら。
1. 結果の確認
2. 今回作成したコード


1. 結果の確認

P牙狼月虹ノ旅人(牙狼MAXX)のボーダー算出結果はこちら。
ボーダーは17.8[回/k]となりました。


項目 条件
シミュレーション回数 通常時1000万回転
玉減り 右打ち中の玉減り無

2. 今回作成したコード

ボーダー算出に使用したプログラムはこちら。

    # coding: UTF-8
    # 乱数作成用
    import random
    # ボーダー算出用
    import numpy as np
    # スランプグラフ描画用
    import pylab
    
    # 試行回数
    loop = 10000000
    # 1kあたりの回転数の初期値
    回転数 = 10
    
    # 1k当りの回転数vs出率のデータ作成---ここから----
    
    # 結果用の箱の準備
    回転数リスト = []
    出率リスト = []
    
    # 1k当りの回転数を30まで変更しながらシミュレーション
    while 回転数 <= 30:
        # 大当たり確率の設定(左打ち)
        左3RRush = 319.7 / 0.50
        左3R通常 = 319.7 / 0.50
    
        # 乱数範囲の設定準備(左打ち)
        左3RRush範囲 = round(65536 / 左3RRush)
        左3R通常範囲 = round(65536 / 左3R通常)
    
        # 乱数範囲の設定(左打ち)
        左3RRush範囲_下 = 1
        左3RRush範囲_上 = 左3RRush範囲_下 + 左3RRush範囲 - 1
        左3R通常範囲_下 = 左3RRush範囲_上 + 1
        左3R通常範囲_上 = 左3R通常範囲_下 + 左3R通常範囲 - 1
    
        # 大当たり確率の設定(右打ち)
        右10RRush = 1.08 / 0.81
        右10R通常 = 1.08 / 0.19
    
        # 乱数範囲の設定準備(右打ち)
        右10RRush範囲 = round(65536 / 右10RRush)
        右10R通常範囲 = round(65536 / 右10R通常)
    
        # 乱数範囲の設定(右打ち)
        右10RRush範囲_下 = 1
        右10RRush範囲_上 = 右10RRush範囲_下 + 右10RRush範囲 - 1
        右10R通常範囲_下 = 右10RRush範囲_上 + 1
        右10R通常範囲_上 = 右10R通常範囲_下 + 右10R通常範囲 - 1
    
        # 結果用の箱やカウンタの準備
        Total = 0  # トータルの差玉を入れる
        ゲーム数 = 1  # 前回大当たりからの通常ゲーム数を入れる
    
        # ループ処理(loopで設定した回数だけシミュレーションを行う。)
        for i in range(loop):
            # 乱数の取得
            rand = random.randint(1, 65536)
    
            # 遊タイムの処理
            # 951回転から遊タイム突入。
            if 950 < ゲーム数 < 951 + 200:
                # Rush中のゲーム数をカウント
                ゲーム数_Rush = 1
    
                # Rush回数までループする処理
                while ゲーム数_Rush <= 200:
                    # 乱数の取得
                    rand2 = random.randint(1, 65536)
                    # Rush付き10Rの振り分けだったとき
                    if 右10RRush範囲_下 <= rand2 <= 右10RRush範囲_上:
                        Total = Total + 1500 - 10 * 10
                        ゲーム数_Rush = 1
                        # 大当たりしたのでゲーム数を1に戻す
                        ゲーム数 = 1
                    # 10R通常の振り分けだったとき
                    elif 右10R通常範囲_下 <= rand2 <= 右10R通常範囲_上:
                        Total = Total + 1500 - 10 * 10
                        ゲーム数_Rush = 1
                        # 大当たりしたのでゲーム数を1に戻す
                        ゲーム数 = 1
                        # Rushを抜ける
                        break
                    # はずれのとき
                    else:
                        ゲーム数_Rush = ゲーム数_Rush + 1
    
            # 遊タイム以外の処理
            else:
                # 当り判定+連荘処理
                # Rush付きの大当たりを引いた時の処理
                if 左3RRush範囲_下 <= rand <= 左3RRush範囲_上:
                    # 大当たりで獲得した玉数を加算(アタッカーに入れた玉数は減算する)
                    Total = Total + 450 - 3 * 10
    
                    # 大当たりしたのでゲーム数を1に戻す
                    ゲーム数 = 1
    
                    # Rush中の処理
                    # Rush中のゲーム数をカウント
                    ゲーム数_Rush = 1
    
                    # Rush回数までループする処理
                    while ゲーム数_Rush <= 200:
                        # 乱数の取得
                        rand2 = random.randint(1, 65536)
                        # Rush付き10Rの振り分けだったとき
                        if 右10RRush範囲_下 <= rand2 <= 右10RRush範囲_上:
                            Total = Total + 1500 - 10 * 10
                            ゲーム数_Rush = 1
                        # 10R通常の振り分けだったとき
                        elif 右10R通常範囲_下 <= rand2 <= 右10R通常範囲_上:
                            Total = Total + 1500 - 10 * 10
                            ゲーム数_Rush = 1
                            # Rushを抜ける
                            break
                        # はずれのとき
                        else:
                            ゲーム数_Rush = ゲーム数_Rush + 1
    
                # 通常当たりを引いた時の処理
                elif 左3R通常範囲_下 <= rand <= 左3R通常範囲_上:
                    # 大当たりで獲得した玉数を加算(アタッカーに入れた玉数は減算する)
                    Total = Total + 450 - 3 * 10
    
                    # 大当たりしたのでゲーム数を1に戻す
                    ゲーム数 = 1
    
            # 前回大当たりからのゲーム数をカウント
            ゲーム数 = ゲーム数 + 1
    
        # 1k当りの回転数ごとの出率を格納
        回転数リスト.append(回転数)
        出率リスト.append(Total / ((250 / 回転数) * loop) * 100)
    
        # 1k当りの回転数を増やす
        回転数 = 回転数 + 1
    
    # 1k当りの回転数vs出率のデータ作成---ここまで----
    
    # ボーダー算出---ここから----
    # 1k当りの回転数vs出率数を一次近似
    近似 = np.polyfit(回転数リスト, 出率リスト, 1)
    
    # 一次方程式から出率が100になる回転数を算出
    border = (100 - 近似[1]) / 近似[0]
    
    # グラフの描画
    pylab.scatter(回転数リスト, 出率リスト, label="シミュ値")   # 生データ
    
    近似線 = np.poly1d(近似)(回転数リスト) # 近似式から近似線を計算
    pylab.plot(回転数リスト, 近似線, label="近似線")    # 一次近似したデータ
    
    pylab.scatter(border, 100, label="ボーダー:" + str(round(border, 1)) + "[回/k]")   # ボーダー値
    
    pylab.title("牙狼月虹(牙狼MAXX)ボーダー" + "\n" + "(ラッシュ中の玉減り無)", fontname="MS Gothic")
    pylab.xlabel("回転数[回/1k]", fontname="MS Gothic")
    pylab.ylabel("出率[%]", fontname="MS Gothic")
    pylab.legend(prop={"family":"MS Gothic"})
    pylab.grid()
    
    pylab.show()
    # ボーダー算出---ここまで----


にほんブログ村 パチンコブログ パチンコ情報へ
にほんブログ村

コメント

このブログの人気の投稿

【WEBアプリ】Sキングハナハナ-30のベル確率予想&ベル確率逆算ツール&設定判別ツール

【WEBアプリ】ハナハナホウオウ天翔のベル確率を差枚数から逆算するツール

【WEBアプリ】ハナハナホウオウ天翔の設定判別ツール