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.
Die Spezifikationen der zu implementierenden Gacha sind wie folgt.
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 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. |
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.
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.
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.
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)
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)
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'))
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.
Starten Sie die Anwendung als python app.py wie in Letztes Mal.
Greifen Sie mit Ihrem Browser auf Port 5000 auf localhost zu.
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.
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.
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.
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