L'histoire du traitement A du blackjack (python)

J'étais accro au blackjack d'Asobi J'ai essayé d'obtenir la distribution des valeurs totales des parents dans un histogramme.

À ce moment-là, je suis tombé sur le processus de A, Je l'ai traité comme suit.

Conclusion

Au lieu de traiter A comme de base 11, Définissez le paramètre "grace". Lorsque A est soustrait, le paramètre est incrémenté de 1. Si le paramètre est égal ou supérieur à 1 lorsqu'il dépasse 21 Réduisez 10 du total et retournez

Principes de base de la fonction Blackjack

Considérons d'abord le cas de traiter A comme un seul.

Installez d'abord le module

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

Offre de fonction de dessin de carte Une fonction qui tire des cartes et renvoie le résultat jusqu'à ce que le total atteigne 17. Croupier Normal_deck représentant un tas de cartes

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

Maintenant chez le concessionnaire (total des parents, carte à utiliser) Vous obtiendrez la valeur totale de la carte parent finale. Essayons de le tourner environ 100 000 fois et d'afficher les données dans un histogramme. Voici un exemple de tirage d'une carte dans un état où la valeur totale des parents est de 10.

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) 

résultat image.png

L'axe vertical peut être une fréquence relative ou différente.

Version traitant de A

Quand A sort, il est calculé comme 11. Cependant, lorsqu'il dépasse 21, --Si A apparaît, faites -10 et continuez le calcul. --Si A n'est pas affiché, le calcul s'arrête

Si c'est le cas, cela s'est bien passé.

J'écrirai une fonction.

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

L'accord précédent a renvoyé la valeur totale, Cette fois, la valeur de la carte tirée est retournée telle quelle.

def dealer2(x,deck):
    
    #Partie de réglage
    if x == 1:
        para = 1 #Réglage de grâce
        x = 11
    else:
        para = 0
    #Fin de la partie réglage
    
    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+Soustraire 10 de 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

La description

Partie de réglage

Traiter 1 comme élémentaire 11 Si la carte supérieure (carte visible à l'avance) est 1, Réglez la valeur totale sur 11 et le paramètre (para) sur 1. Réglez le paramètre (para) sur 0 même si la carte upcard n'est pas 1.

Partie de dessin de carte

Changez selon que la carte tirée est 1 (signifiant A).

--Si le nombre de cartes tirées est de 1, Ajoutez 1 à para et ajoutez 11 à la valeur.

--Si la carte tirée est différente de 1, Fondamentalement le même que la version précédente.

Dans les deux cas, demandez une action de grâce au cas où vous dépassez 21.

Action de grâce

Si para vaut 1 ou plus, c'est-à-dire si A n'est pas encore utilisé comme 1 Convertissez A utilisé comme 11 en 1, c'est-à-dire que la valeur totale est -10.

S'il n'y a pas de A, ou si tous sont convertis en 1, para vaut 0, donc La valeur totale est renvoyée telle quelle.

Dessin d'histogramme

Écrivons un histogramme en utilisant une nouvelle fonction. Voici un exemple de démarrage avec une valeur parent totale de 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)

Valeur de retour

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

Je veux connaître chaque valeur, je vais donc retirer les données de l'histogramme. Ce code renvoie un histogramme avec une valeur totale initiale de x et n essais.

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('La probabilité de ne pas éclater{:.2f} %'.format(sum*100))
    for i in range(0,10):
        print('{}La probabilité de devenir{:.2f} %'.format(data[1][i],data[0][i]*100))
check(2,10000)

Valeur de retour

La probabilité de ne pas éclater est de 64.64 %
La probabilité de devenir 17 est de 13.44 %
La probabilité de devenir 18 est de 13.28 %
La probabilité de devenir 19 est de 13.03 %
La probabilité de devenir 20 est de 12.86 %
La probabilité de devenir 21 est de 12.03 %
La probabilité de devenir 22 est de 15.13 %
La probabilité de devenir 23 est de 6.38 %
La probabilité de devenir 24 est de 5.50 %
La probabilité de devenir 25 est de 4.57 %
La probabilité de devenir 26 est de 3.78 %

image.png

C'est tout

À la fin

Si vous souhaitez définir si A est inclus dans l'état initial du parent, vous pouvez le faire, Je l'ai omis parce que cela semble irréalisable.

Chaque fois que je pioche une carte, ou si elle sort déjà Je veux également empêcher cette carte d'apparaître.

Recommended Posts

L'histoire du traitement A du blackjack (python)
Traitement d'image? L'histoire du démarrage de Python pour
L'histoire de Python et l'histoire de NaN
L'histoire de l'exportation d'un programme
L'histoire de la manipulation des variables globales Python
L'histoire de la création d'un pilote standard pour db avec python.
Une fonction qui mesure le temps de traitement d'une méthode en python
L'histoire de la création d'un module qui ignore le courrier avec python
le zen de Python
Divers traitements de Python
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Récupérer l'appelant d'une fonction en Python
Afficher le résultat du traitement de la géométrie en Python
Copiez la liste en Python
Écrire une note sur la version python de python virtualenv
L'histoire de la lecture des données HSPICE en Python
[Python] Une compréhension approximative du module de journalisation
Sortie sous la forme d'un tableau python
L'histoire de la création d'un générateur d'icônes mel
Prise en compte des forces et faiblesses de Python
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
Recevez une liste des résultats du traitement parallèle en Python avec starmap
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
L'histoire du lancement d'un serveur Minecraft depuis Discord
Une histoire qui réduit l'effort de fonctionnement / maintenance
[Python] Un programme qui compte le nombre de vallées
python3 Mesurez la vitesse de traitement.
L'histoire de la construction de Zabbix 4.4
L'histoire de Python sans opérateurs d'incrémentation et de décrémentation.
Découpez une partie de la chaîne à l'aide d'une tranche Python
Jetez un œil au traitement de LightGBM Tuner
Points Python du point de vue d'un programmeur en langage C
L'histoire de la création d'un réseau neuronal de génération musicale
L'histoire de FileNotFound en Python open () mode = 'w'
Examiner le traitement de fermeture de l'ensemble de données Python (wrapper SQLAlchemy)
Post-traitement de python (NG)
Une histoire sur le changement du nom principal de BlueZ
Tâches au démarrage d'un nouveau projet python
Le problème Zip 4 Gbyte est une histoire du passé
Une histoire qui a analysé la livraison de Nico Nama.
Un mémorandum sur la mise en œuvre des recommandations en Python
À propos des fonctionnalités de Python
L'histoire de la conversion automatique du langage de TypeScript / JavaScript / Python
[Python] Un programme qui compare les positions des kangourous.
Note Python: Le mystère de l'attribution d'une variable à une variable
Le pouvoir des pandas: Python
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)
L'histoire de la création d'un canal VIP dans le chatwork en interne
Découvrez la largeur apparente d'une chaîne en python
Une implémentation Python simple de la méthode k-voisinage (k-NN)
L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python
Sakura L'histoire du fonctionnement de la bouteille Python sur Internet
L'histoire de l'introduction de Jedi (package de complétion automatique de python) dans emacs
Différent du type d'importation de python. Signification de depuis A import B
L'histoire du champ de modèle Django disparaissant de la classe
[Note] Importation de fichiers dans le répertoire parent en Python