[PYTHON] Machen Sie einen seltenen Gacha-Simulator mit Flask

Gestern hat mit dem Python-Webframework Flask ein einfaches Antwortsystem erstellt. Das allein ist zu langweilig, deshalb würde ich gerne NumPy verwenden, um etwas zu machen, das ich ein wenig genießen kann.

"Gacha" ist ein Mechanismus, mit dem Sie zufällig Gegenstände usw. erhalten können, indem Sie einmal für heutzutage beliebte soziale Spiele und Online-Spiele bezahlen. 10 aufeinanderfolgende Gachas sind ein Mechanismus, um 10 seltene Gachas in einem Versuch zu zeichnen. In Social Games, die behaupten, kostenlos zu sein, ist dies ein Mechanismus, um von einer solchen Artikelabrechnung zu profitieren.

Der Zweck der Simulation besteht auf der Managementseite darin, den Spielgeist zu inspirieren, der den Spieler dazu bringt, viel zu verlangen. Überprüfen Sie, ob die Gacha bereitgestellt werden kann, der Spieler Die Seite dort ist das Ziel, wie gefühlt oder im Voraus erfolgreich zu sein, wie viel Wahrscheinlichkeit vor dem Einschalten des Echtgeldes sogenanntes Echtgeld (das Ergebnis durch Abkühlung des Kopfes).

Bisher wurde die Population aus einigen Exemplaren unter Verwendung von Guess Statistics und Visualisierung ausgewählt. Ich habe geraten, aber es lohnt sich auch, die Teile auszuprobieren, die allein aus der Theorie schwer vorstellbar sind.

Gacha-Spezifikationen

Die Spezifikationen der zu implementierenden Gacha sind wie folgt.

Art und Preis

Es gibt zwei Arten von Gacha, "seltene Gacha" und "10 aufeinanderfolgende seltene Gacha". Seltene Gacha kostet 300 Yen pro Zeit und 10 aufeinanderfolgende seltene Gacha kosten 3.000 Yen pro Zeit. Sie erhalten eine Karte für jede Ziehung.

Seltenheit

Seltenheit wird als Seltenheit übersetzt. Je höher die Seltenheit, desto höher der Wert.

Abgesehen davon scheint das Wort Seltenheit genauer ausgesprochen zu werden.

Art Erläuterung
R Nur selten. Das am wenigsten wertvolle.
SR Sehr selten. Der Wert ist so hoch wie er ist.
UR Ultimativ selten. Es ist das wertvollste und es ist der Zweck des Spielers, es zu erhalten.

Gewinnwahrscheinlichkeit

Die Gewinnwahrscheinlichkeit für seltene Gacha ist wie folgt.

R SR UR
94.85% 5.04% 0.12%

Die Gewinnwahrscheinlichkeit von 10 aufeinanderfolgenden seltenen Gachas ist wie folgt.

R SR UR
90.28% 9.29% 0.45%

In 10 aufeinanderfolgenden seltenen Gachas gewinnt SR jedoch immer den letzten als Bonus. Auf den ersten Blick scheint dies eine Vorzugsbehandlung zu sein, aber umgekehrt bedeutet dies, dass die UR in der Endrunde niemals gewinnen wird.

Auch die probabilistische Notation ergibt nicht 100%. Dies liegt daran, dass eine dritte Ziffer unter dem Dezimalpunkt liegt und "aufgerundet" ist. Der Grund für die Annahme einer Aufrundung anstelle einer Aufrundung ist, dass die Gesamtsumme für 10 Stationen 100,02% beträgt. Wenn jedoch angenommen wird, dass die dritte Ziffer der drei Seltenheitstypen abgerundet ist, kann ein solcher Gesamtwert nicht erhalten werden. Weil es keine gibt.

Arten von Preisen

Der Zweck des Benutzers besteht darin, die UR zu erhalten. Es gibt 12 Arten von Karten für diese UR, von Werbegeschenk 1 bis Werbegeschenk 12. Wenn der UR gewinnt, ist einer dieser Preise gleiche Wahrscheinlichkeit Es muss zu E3% 81% AE% E5% 8E% 9F% E7% 90% 86) verfügbar sein.

Gacha-Implementierung

Zufällige Generierung

NumPy generiert Zufallszahlen von Mersenne Twister. Zufällige Generierung mit NumPy hier Und hier hat einen Artikel auf Japanisch.

Erstellen Sie vorerst eine Extraktionsfunktion für jede Rarität. Implementieren Sie den gewichteten Extraktor wie folgt.

Kartenauswurf durch Gewichtung

def turn_rare():
    """Drehen Sie die seltene Gacha"""
    result = []
    #Runden Sie die dritte Ziffer auf 94 auf.85%, 5.04%, 0.12%
    weight = [0.94849, 0.0504, 0.00111]
    result.append(pickup_rare(weight))
    return result

def turn_10rare():
    """Drehe 10 aufeinanderfolgende seltene Gachas"""
    result = []
    #Runden Sie die dritte Ziffer auf 90 auf.28%, 9.29%, 0.45%
    weight = [0.90278, 0.09281, 0.00441]
    #9 Lotterie
    for v in range(0, 9):
        result.append(pickup_rare(weight))
    #SR gewinnt immer den letzten
    result.append("SR")
    return result

Das Obige nimmt den Wert an, der für die Managementseite unter den auf die dritte Ziffer aufgerundeten Werten am vorteilhaftesten ist.

Beschreiben Sie anschließend den Vorgang des Auswerfens der Karte gemäß dem angegebenen Gewicht.

def pickup_rare(weight):
    """Seltene Gacha nach Gewicht auswerfen"""
    rarities = ["R", "SR", "UR"]
    picked_rarity = np.random.choice(rarities, p=weight)

    #Wenn der UR gewinnt, entscheiden Sie, welchen Preis Sie vergeben möchten
    if picked_rarity == "UR":
        picked_rarity = "".join((picked_rarity, "(", pickup_premium(), ")"))

    return picked_rarity

def pickup_premium():
    """Entlastung UR-Preise bei gleicher Wahrscheinlichkeit"""
    ur = ["Werbegeschenk 1", "Werbegeschenk 2", "Werbegeschenk 3", "Werbegeschenk 4", "Werbegeschenk 5", "Werbegeschenk 6", "Werbegeschenk 7",
          "Werbegeschenk 8", "Werbegeschenk 9", "Werbegeschenk 10", "Werbegeschenk 11", "Werbegeschenk 12"]
    return np.random.choice(ur)

Wertobjekt, das Preis und Anzahl der Male enthält

Das Wertobjekt ist ein Objekt, das einen Wert enthält.

Dieses Mal behalten wir die Häufigkeit, mit der die Gacha gedreht wurde, und den berechneten Betrag. Es ist ein Ärger, also kombinieren Sie sie zu einem Objekt.

class VO(object):
    def __init__(self):
        self._count = 0 #Anzahl
        self._price = 0 #Rechnungsbetrag

    def getcount(self):
        return self._count

    def setcount(self, count):
        self._count = count

    def getprice(self):
        return self._price

    def setprice(self, price):
        self._price = price

    count = property(getcount, setcount)
    price = property(getprice, setprice)

Routing des Prozesses des Drehens der Gacha

Der Rest besteht darin, das Flask-Routing zu implementieren.

@app.route('/')
def index():
    title = "Herzlich willkommen"
    message = "Klicken Sie auf die Schaltfläche, um die Gacha zu drehen"
    return render_template('index.html',
                           message=message, title=title)

@app.route('/post', methods=['POST', 'GET'])
def post():
    time = datetime.datetime.today().strftime("%H:%M:%S")
    message = ""
    if request.method == 'POST':
        result = []
        if 'rare' in request.form:
            title = "Ich drehte die Gacha!"
            vo.price = vo.price + 300
            vo.count = vo.count + 1
            result = turn_rare()
        if '10rare' in request.form:
            title = "Ich drehte die Gacha!"
            vo.price = vo.price + 3000
            vo.count = vo.count + 1
            result = turn_10rare()
        if 'reset' in request.form:
            title = "Zurücksetzen"
            vo.price = 0
            vo.count = 0
            result = ""
            message = "Zurücksetzen"
        return render_template('index.html',
                               result=result, title=title,
                               time=time, vo=vo,
                               message=message)
    else:
        return redirect(url_for('index'))

Aussicht

Bereiten Sie zum Schluss den Bildschirm vor.

<div class="form">
  <div class="container">
    <div class="row">
      <div class="col-md-12">
        <p class="lead">
          {% if result %}
            {{ time }}Ich drehte die Gacha!<br>
            {{ vo.count }}Gesamtbetrag{{ vo.price }}Kreis<br>
Ergebnis ist
            {% for v in result %}
              {{ v }}
            {% endfor %}
war!
          {% else %}
            {{ message }}
          {% endif %}
        </p>
        <form action="/post" method="post" name="rare" class="form-inline">
          <button type="submit" name="rare" class="btn btn-default">Drehen Sie die seltene Gacha</button>
        </form>
        <form action="/post" method="post" name="10rare" class="form-inline">
          <button type="submit" name="10rare" class="btn btn-default">Drehe 10 aufeinanderfolgende seltene Gachas</button>
        </form>
        <form action="/post" method="post" name="reset" class="form-inline">
          <button type="submit" name="reset" class="btn btn-default">Zurücksetzen</button>
        </form>
      </div>
    </div>
  </div>
</div>

Dies ist abgeschlossen.

Versuchen Sie, die Gacha zu drehen

Starten Sie die Anwendung als python app.py wie in Letztes Mal.

Greifen Sie mit Ihrem Browser auf Port 5000 auf localhost zu.

1.png

Wenn Sie in diesem Zustand die seltene Gacha drücken, können Sie 300 Yen bezahlen, und wenn Sie die seltene Gacha der 10er-Serie drücken, können Sie 3.000 Yen bezahlen, um die Gacha zu drehen. Als ich als Test 10 Stationen gedrückt habe, habe ich 2 SRs erhalten, wie unten gezeigt.

2.png

Wie viele Versuche können Sie die UR bekommen? Bitte probieren Sie es aus.

Übrigens konnte ich in dieser Simulation 16 Mal UR für 10 aufeinanderfolgende seltene Gachas für eine Gesamtladung von 48.000 Yen erhalten.

3.png

Es ist eine gute Idee zu überdenken, ob diese Gebühr den Preis wirklich wert ist.

Zuvor [Comp Gacha](http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3 % 83% 88% E3% 82% AC% E3% 83% 81% E3% 83% A3) wurde zu einem Problem, aber zum Beispiel, um diese Simulation zur Vorbereitung aller 12 Arten von Gacha UR zu verwenden Es kann interessant sein zu versuchen, wie viel es kosten wird.

Darüber hinaus ist die Wahrscheinlichkeit, dass Gacha dieses Mal veröffentlicht wird, ein willkürlich festgelegter Wert und hat nichts mit tatsächlichen Diensten zu tun.

Zusammenfassung

Dieses Mal habe ich das soziale Spiel Gacha als Thema verwendet, aber es ist sehr sinnvoll, die Berechnung auf der Grundlage der ** Wirtschaftstheorie ** auf diese Weise leicht überprüfen zu können.

Die Wirtschaftstheorie beispielsweise in der mikroökonomischen Theorie leitet sich hypothetisch aus dem menschlichen Verhalten ab. Um objektiv zu überprüfen, ob die Theorie die Realwirtschaft gut erklärt, verwenden Sie mathematische Formeln, um ein ** Wirtschaftsmodell ** zu erstellen.

Das quantifizierte Modell wird als ** ökonometrisches Modell ** bezeichnet und einer empirischen Analyse unterzogen.

Die Kombination von Python + Flask, die die Implementierung eines Simulationssystems einfach und hochfunktional macht, wird eine wichtige Hilfe bei der Weiterentwicklung der empirischen Analyse sein.

Der Quellcode für diesen Artikel ist unter [hier] verfügbar (https://github.com/ynakayama/flask-hello/tree/gacha-simulator).

Recommended Posts

Machen Sie einen seltenen Gacha-Simulator mit Flask
Erstellen Sie mit Flask einen einfachen Punktbildgenerator
Machen Sie mit LINE + Flask einen morphologischen Analyse-Bot
Machen Sie eine Lotterie mit Python
Machen Sie ein Feuer mit kdeplot
So erstellen Sie mit Flask einen BOT für Cisco Webex-Teams
Machen Sie einen Sound mit Jupyter Notebook
Erstellen eines Flask-Servers mit Docker
Machen wir einen Blockbruch mit wxPython
Erstellen Sie ein Empfehlungssystem mit Python
Machen Sie einen Filter mit einer Django-Vorlage
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Erstellen Sie mit PySide einen Modelliterator
Machen Sie eine schöne Grafik mit Plotly
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 1 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV
Erstellen Sie eine Notebook-Pipeline mit Kedro + Papermill
Machen Sie mit matplotlib eine teilweise gezoomte Figur
Machen Sie ein Zeichnungsquiz mit kivy + PyTorch
Lassen Sie uns mit Python langsam sprechen
Erstellen Sie einen Kaskadenklassifizierer mit Google Colaboratory
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
Erstellen Sie eine einfache Web-App mit Flasche
Machen Sie eine Logikschaltung mit Perceptron (Multilayer Perceptron)
Machen Sie Ja Nein Popup mit Kivy
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Erstellen Sie eine GIF-Animation mit Ordnerüberwachung
Erstellen Sie ein Webframework mit Python! (1)
Erstellen Sie einen Webdienst mit Docker + Flask
Machen wir mit Pylearn 2 eine dreiäugige KI
Erstellen Sie eine Desktop-App mit Python mit Electron
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Ich habe mit Python einen Neuronensimulator erstellt
Lassen Sie uns mit Flask eine Webanwendung zur Konvertierung von A nach B erstellen! Von Grund auf neu ...
Machen Sie Twitter Trend Bot mit Heroku + Python
Stellen Sie ein Überwachungsgerät mit einem Infrarotsensor her
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
Ich möchte ein Spiel mit Python machen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Erstellen Sie ein Bulletin Board mit Heroku, Flask, SQL Alchemy
Starten Sie einen Webserver mit Python und Flask
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Versuchen Sie, mit Python eine Diedergruppe zu bilden
[Chat De Tornado] Erstellen Sie einen Chat mit WebSocket in Tornado
Machen Sie Urlaubsdaten mit Pandas zu einem Datenrahmen
Erstellen Sie mit Amazon Lex einen LINE WORKS-Bot
(Memorandum) Erstellen Sie mit matplodlib ein 3D-Streudiagramm
Mattermost Bot mit Python gemacht (+ Flask)
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.