Die Geschichte der Verarbeitung A von Blackjack (Python)

Ich war süchtig nach dem Blackjack von Asobi Ich habe versucht, die Verteilung der Gesamtwerte der Eltern in einem Histogramm zu erhalten.

Zu dieser Zeit stolperte ich über den Prozess von A, Ich habe mich wie folgt damit befasst.

Fazit

Anstatt A als Basis 11 zu behandeln, Stellen Sie den Parameter "grace" ein. Wenn A subtrahiert wird, wird der Parameter um 1 erhöht. Wenn der Parameter 1 oder mehr ist, wenn er 21 überschreitet Reduzieren Sie 10 von der Gesamtsumme und kehren Sie zurück

Grundlagen der Blackjack-Funktion

Betrachten wir zunächst den Fall, dass A nur als einer behandelt wird.

Installieren Sie zuerst das Modul

import numpy as np
import matplotlib.pyplot as plt 
import numpy.random as random
import pandas as pd 
%matplotlib inline

Kartenziehfunktion Deal Eine Funktion, die Karten zieht und das Ergebnis zurückgibt, bis die Summe 17 erreicht. Dealer Normal_deck repräsentiert ein paar Karten

def deal(x,deck):
    x += random.choice(deck)
    return x
def dealer(x,deck):
    while x < 17 :
        x = deal(x,deck)
    return x
normal_deck = [1,2,3,4,5,6,7,8,9,10,10,10,10]*4

Jetzt beim Händler (insgesamt Eltern, Karte zu verwenden) Sie erhalten den Gesamtwert der endgültigen Elternkarte. Versuchen wir es etwa 100.000 Mal zu drehen und zeigen die Daten in einem Histogramm an. Dies ist ein Beispiel für das Ziehen einer Karte aus einem Bundesstaat, in dem der Gesamtwert der Eltern 10 beträgt.

ln =[]
for i in range(100000):
    ln.append(dealer(10,normal_deck))

bins= [17,18,19,20,21,22,23,24,25,26,27]
plt.hist(ln, bins=bins) 

Ergebnis image.png

Die vertikale Achse kann eine relative Frequenz oder verschiedene sein.

Version, die sich mit A befasst

Wenn A herauskommt, wird es als 11 berechnet. Wenn es jedoch 21 überschreitet,

Wenn ja, ging es gut.

Ich werde eine Funktion schreiben.

def deal_(deck):
    x = random.choice(deck)
    return x

Der vorherige Deal gab den Gesamtwert zurück. Dieses Mal wird der Wert der gezogenen Karte so zurückgegeben, wie er ist.

def dealer2(x,deck):
    
    #Teil einstellen
    if x == 1:
        para = 1 #Grace Einstellung
        x = 11
    else:
        para = 0
    #Ende des Einstellungsteils
    
    while x < 17 : #---------------------------
    # hit card part
        y = deal_(deck)
        #print(y)

        if y != 1: # not hit A case
            if x + y <=21:
                x += y
            elif para >= 1:
                para += -1
                x += y - 10 # x+Subtrahiere 10 von y
            else:
                x += y

        else: # hit A case
            para += 1
            if x  <= 10:
                x +=11
            elif para >=1:
                para += -1
                x += 1
            else:
                print('error')
                x += 1
   #--------------------------------------------------
    return x

Erläuterung

Teil einstellen

1 als grundlegend behandeln 11 Wenn die Up-Karte (Karte, die im Voraus gesehen werden kann) 1 ist, Setzen Sie den Gesamtwert auf 11 und den Parameter (Abs.) Auf 1. Setzen Sie den Parameter (para) auf 0, auch wenn die Karte nicht 1 ist.

Kartenzeichnungsteil

Ändern Sie abhängig davon, ob die gezogene Karte 1 ist (was A bedeutet).

--Wenn die Anzahl der gezogenen Karten 1 beträgt, Addiere 1 zu Para und addiere 11 zum Wert.

--Wenn die gezogene Karte nicht 1 ist, Grundsätzlich das gleiche wie in der Vorgängerversion.

Bitten Sie in beiden Fällen um eine Gnadenmaßnahme, falls Sie 21 Jahre überschreiten.

Grace Aktion

Wenn para 1 oder mehr ist, dh wenn A noch nicht als 1 verwendet wird Konvertieren Sie A als 11 in 1, dh der Gesamtwert beträgt -10.

Wenn es kein A gibt oder wenn alle in 1 umgewandelt werden, ist para 0, also Der Gesamtwert wird unverändert zurückgegeben.

Histogrammzeichnung

Schreiben wir ein Histogramm mit einer neuen Funktion. Dies ist ein Beispiel für den Beginn mit einem übergeordneten Gesamtwert von 13.

ln = []
bins = [17,18,19,20,21,22,23,24,25,26,27]
for i in range(100000):
     ln.append(dealer2(13, normal_deck))

plt.hist(ln, normed=True, bins=bins, align='left', rwidth=0.9)

Rückgabewert

array([0.09648, 0.09533, 0.0955 , 0.09558, 0.09561, 0.09664, 0.3286 ,
        0.03688, 0.0326 , 0.02678]),
 array([17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]),
 <a list of 10 Patch objects>)

image.png

Ich möchte jeden Wert kennen, also werde ich die Daten des Histogramms herausnehmen. Dieser Code gibt ein Histogramm mit einem anfänglichen Gesamtwert von x- und n-Versuchen zurück.

def check(x,n):
    ln = []
    bins = [17,18,19,20,21,22,23,24,25,26,27]
    
    for i in range(n):
        ln.append(dealer2(x, normal_deck))

    data = plt.hist(ln, normed=True, bins=bins, align='left', rwidth=0.9, cumulative=False)
    
    sum = 0
    for i in range(0,5):
        sum += data[0][i]
    print('Die Wahrscheinlichkeit, nicht zu platzen{:.2f} %'.format(sum*100))
    for i in range(0,10):
        print('{}Die Wahrscheinlichkeit zu werden{:.2f} %'.format(data[1][i],data[0][i]*100))
check(2,10000)

Rückgabewert

Die Wahrscheinlichkeit, nicht zu platzen, beträgt 64.64 %
Die Wahrscheinlichkeit, 17 zu werden, beträgt 13.44 %
Die Wahrscheinlichkeit, 18 zu werden, beträgt 13.28 %
Die Wahrscheinlichkeit, 19 zu werden, beträgt 13.03 %
Die Wahrscheinlichkeit, 20 zu werden, beträgt 12.86 %
Die Wahrscheinlichkeit, 21 zu werden, beträgt 12.03 %
Die Wahrscheinlichkeit, 22 zu werden, beträgt 15.13 %
Die Wahrscheinlichkeit, 23 zu werden, beträgt 6.38 %
Die Wahrscheinlichkeit, 24 zu werden, beträgt 5.50 %
Die Wahrscheinlichkeit, 25 zu werden, beträgt 4.57 %
Die Wahrscheinlichkeit, 26 zu werden, beträgt 3.78 %

image.png

Das ist es

Am Ende

Wenn Sie festlegen möchten, ob A im Ausgangszustand des übergeordneten Elements enthalten ist, können Sie dies tun: Ich habe es weggelassen, weil es unpraktisch erscheint.

Jedes Mal, wenn ich eine Karte ziehe oder wenn sie bereits herauskommt Ich möchte auch verhindern, dass diese Karte erscheint.

Recommended Posts

Die Geschichte der Verarbeitung A von Blackjack (Python)
Bildverarbeitung? Die Geschichte, Python für zu starten
Die Geschichte von Python und die Geschichte von NaN
Die Geschichte des Exportierens eines Programms
Die Geschichte der Manipulation globaler Python-Variablen
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
der Zen von Python
Verschiedene Verarbeitung von Python
Die Geschichte, dass die Lernkosten von Python niedrig sind
Holen Sie sich den Aufrufer einer Funktion in Python
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Kopieren Sie die Liste in Python
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Die Geschichte des Lesens von HSPICE-Daten in Python
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Ausgabe in Form eines Python-Arrays
Die Geschichte eines Mel-Icon-Generators
Berücksichtigung der Stärken und Schwächen von Python
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Die Geschichte des Starts eines Minecraft-Servers von Discord
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
[Python] Ein Programm, das die Anzahl der Täler zählt
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
Die Geschichte des Baus von Zabbix 4.4
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Werfen Sie einen Blick auf die Verarbeitung von LightGBM Tuner
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Untersuchen Sie die genaue Verarbeitung des Python-Datasets (SQLAlchemy-Wrapper).
Nachbearbeitung von Python (NG)
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Aufgaben zu Beginn eines neuen Python-Projekts
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Über die Funktionen von Python
Die Geschichte der automatischen Sprachkonvertierung von TypeScript / JavaScript / Python
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Die Kraft der Pandas: Python
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
Die Geschichte der Einrichtung eines VIP-Kanals im internen Chatwork
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Eine einfache Python-Implementierung der k-Neighborhood-Methode (k-NN)
Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python
Sakura Die Geschichte, wie die Python-Flasche im Internet funktioniert hat
Die Geschichte der Einführung von Jedi (automatisches Vervollständigungspaket von Python) in Emacs
Anders als der Importtyp von Python. Bedeutung von aus A Import B.
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python