P大工の源さん 超韋駄天 LIGHTのボーダー算出

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

相変わらず韋駄天ばっかり打ってます。
たぶん人生で一番打ったパチンコ1位ですね。

で、打つからには当然勝ちたいわけですが、韋駄天ライトのボーダー情報が結構バラバラで困ってます。

そう!そんな時はPythonの出番ですね!

では早速Pythonでコーディングしていきましょう。

今回のアジェンダはこちら。
1. 算出方法
2. ボーダー算出部分のコード
3. 今回作成したコード
4. 結果の確認


1. 算出方法

今回は以下のフローでボーダーを算出していきます。
1.1k当りの回転数を変えながら出率を算出
2.1k当りの回転数と出率の傾向を近似
3.近似結果からボーダー(出率が100%になるところ)を算出


出率のシミュレーションは以前作成した319ver.の数値を129ver.に変えればOKですね。

また、近似と聞いて、こちらの過去記事を思い浮かべてくださった方。
正解です!やることは同じです。
要は、「シミュレーションの結果にばらつきがあるので、ばらつきを除いてシミュレーション結果の傾向だけを抽出しよう!」ということですね。
絵付きで説明してるので、ぜひ過去記事もご覧ください。

また、今回の評価条件は以下の形としています。
1.1k当りの回転数は10~30回転まで振る
2.出玉は通常時1000万回転後の結果を使用
3.右打ちの玉減りは無視

2. ボーダー算出部分のコード

ここから実際のコーディングを行っていきます。

出率の計算

フローチャートのループ処理の部分はいつもとほぼ同じなので割愛しますが、出率の計算方法に関しては説明しておきます。
スロットの情報サイトを見ていると出率(機械割)といった数値が記載してあるのでスロッターの皆様には馴染み深いかもしれません。
出率(機械割)とはなんぞやというと、出玉と入れた玉の比率です。
100玉入れて100玉出る台が出率100%、110玉出る台が機械割110%ですね。


入れた玉数は、1k(250玉)当りの回転数から算出できます。
ループ処理の流れもざっくり含んだ形で記載したプログラムはこちら。
最後の行が出率の計算式です。
1k(250玉)を1kあたりの回転数で割ることで、1回転に必要な玉数がわかります。
それに回転数を掛け算することで入れた玉数を算出可能です。
※今回の注意点として、出率を計算するために、ループ処理では差玉でなく出玉をシミュレートする必要があります。
    # 試行回数
    loop = 1000000
    # 1kあたりの回転数の初期値
    回転数 = 10

    # 出玉を入れる箱を0にする
    Total = 0
    
    # 1k当りの回転数を30まで変更しながらシミュレーション
    while 回転数 <= 30:
        #ループ処理
        for i in range(loop):
        ・・・
        ・・・

        # 1k当りの回転数ごとの出率を格納
        出率リスト.append(Total / ((250 / 回転数) * loop) * 100)

データの確認

まずは、何次の近似式を使用するかを確認する必要があります。
試しに、1k当りの回転数vs出率の結果をグラフ化したものがこちら。
グラフを見る限り、一次近似式を使用すれば良さそうですね。


近似式の作成

取得したデータを一次近似します。
一次近似式の作成は以下の一文でOKです。
最後の数字の部分が何次で近似するかの部分ですね。

    # 1k当りの回転数vs出率数を一次近似
    近似 = np.polyfit(回転数リスト, 出率リスト, 1)

回転数リストと出率リストにはこんな感じでデータが入っています。


ボーダーを算出

最後にボーダーを算出すれば完成ですが、ようは出率が100%になる回転数の値を求めればOKですね。
計算方法は以下の通りです。


出率の計算方法をコードで記載したものがこちら。
np.polyfitは配列形式で近似式の各項の係数をもっています。
今回の例では、以下の参照方法で必要な係数を取得できます。
一次の係数の値(:a) = 近似[1]
切片の値(:b) = 近似[0]

    # 一次方程式から出率が100になる回転数を算出
    border = (100 - 近似[1]) / 近似[0]

3. 今回作成したコード

最終的には以下のようなコードを作成しました。
いつものようにグラフを描く部分を追加しています。

    # coding: UTF-8
    # 乱数作成用
    import random
    # ボーダー算出用
    import numpy as np
    # スランプグラフ描画用
    import pylab
    
    # 試行回数
    loop = 10000000
    # 1kあたりの回転数の初期値
    回転数 = 10
    
    # 1k当りの回転数vs出率のデータ作成---ここから----
    
    # 結果用の箱の準備
    回転数リスト = []
    出率リスト = []
    
    # 1k当りの回転数を30まで変更しながらシミュレーション
    while 回転数 <= 30:
        # 大当たり確率の設定
        通常時9R時短 = 65536 / 1.000
        通常時3R時短 = 129.77 / 0.50
        通常時3R通常 = 129.77 / 0.50
        時短時9RBonus = 2.15 / 0.10
        時短時3RBonus = 2.15 / 0.90
    
        # 乱数範囲の設定準備
        通常時9R時短範囲 = round(65536 / 通常時9R時短)
        通常時3R時短範囲 = round(65536 / 通常時3R時短)
        通常時3R通常範囲 = round(65536 / 通常時3R通常)
        時短時9RBonus範囲 = round(65536 / 時短時9RBonus)
        時短時3RBonus範囲 = round(65536 / 時短時3RBonus)
    
        # 乱数範囲の設定(通常時)
        通常時9R時短範囲_下 = 1
        通常時9R時短範囲_上 = 通常時9R時短範囲_下 + 通常時9R時短範囲 - 1
        通常時3R時短範囲_下 = 通常時9R時短範囲_上 + 1
        通常時3R時短範囲_上 = 通常時3R時短範囲_下 + 通常時3R時短範囲 - 1
        通常時3R通常範囲_下 = 通常時3R時短範囲_上 + 1
        通常時3R通常範囲_上 = 通常時3R通常範囲_下 + 通常時3R通常範囲 - 1
    
        # 乱数範囲の設定(時短時)
        時短時9RBonus範囲_下 = 1
        時短時9RBonus範囲_上 = 時短時9RBonus範囲_下 + 時短時9RBonus範囲 - 1
        時短時3RBonus範囲_下 = 時短時9RBonus範囲_上 + 1
        時短時3RBonus範囲_上 = 時短時3RBonus範囲_下 + 時短時3RBonus範囲 - 1
    
        # 出玉を入れる箱を0にする
        Total = 0
    
        #ループ処理
        for i in range(loop):
            # 乱数の取得
            rand = random.randint(1,65536)
    
            # 当否判定処理
            # 時短付きの当りの場合
            if 通常時9R時短範囲_下 <= rand <= 通常時3R時短範囲_上:
                # 9Rなら9R分の出玉を追加
                if 通常時9R時短範囲_下 <= rand <= 通常時9R時短範囲_上:
                    Total = Total + 720 - 10 * 9
                # 3Rなら3R分の出玉を追加
                elif 通常時3R時短範囲_下 <= rand <= 通常時3R時短範囲_上:
                    Total = Total + 240 - 10 * 3
    
                # RUSHに突入させる
                j = 0   # 連続外れ回数
    
                # 4連続でハズレるまで計測
                while j < 4:
                    rand2 = random.randint(1,65536)
                    # count2 = count2 + 1
                    # 9Rなら9R分の出玉を追加
                    if 時短時9RBonus範囲_下 <= rand2 <= 時短時9RBonus範囲_上:
                        Total = Total + 720 - 10 * 9
                        j = 0
                    # 3Rなら3R分の出玉を追加
                    elif 時短時3RBonus範囲_下 <= rand2 <= 時短時3RBonus範囲_上:
                        Total = Total + 240 - 10 * 3
                        j = 0
                    # ハズレなら連続ハズレ回数を1増やす
                    else:
                        j = j + 1
    
            # 通常当りの場合
            elif 通常時3R通常範囲_下 <= rand <= 通常時3R通常範囲_上:
                Total = Total + 240 - 10 * 3
    
        # 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("韋駄天ライトボーダー" + "\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()
    # ボーダー算出---ここまで----

4. 結果の確認

作成したコードを実行した結果はこちら。


ボーダーは19.9[回/k]となりました。
近似も良い感じですし、感覚的にボーダー20くらいかなと思っていたので、結果に問題なさそうですね。

また、せっかくなので韋駄天ミドルのボーダーも算出してみました。
こちらは、ボーダーが20.1[回/k]となりました。


数値上はわずかに韋駄天ライトの方が甘いんですね。
今回作成したコードのRUSH部分さえいじれば色々な機種のボーダーを算出できそうなので、今後も気になる機種があったら計算してみます。


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

コメント

このブログの人気の投稿

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

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

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