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.
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
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
Die vertikale Achse kann eine relative Frequenz oder verschiedene sein.
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
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.
Ä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.
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.
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>)
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 %
Das ist es
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