Série 3

Exercice 1 : Calcul de \(\pi\)

L'exemple traditionnel des méthodes de Monte-Carlo est le calcul de \(\pi\).

L'idée est simple. De manière répétée, on place des points uniformément au hasard dans un carré de dimension 1 par 1. On compte combien de ces points sont tombés dans un cercle de rayon 1 qui a pour centre un des coins du carré. La fraction des points qui tombent dans le cercle permet de calculer une estimation de \(\pi\).

En effet, l'intersection entre le cercle et le carré a une surface de \(\frac{\pi \cdot r^2}{4}\), avec \(r = 1\). Le carré quant à lui a une surface de \(1\). La proportion de points qui tombent dans le cercle devrait donc se reprocher de \(\frac{\pi}{4}\). Une fois cette proportion estimée par une simulation de Monte-Carlo, il est simple d'obtenir une estimation de \(\pi\).

Instructions

Concevez un script pour estimer la valeur de \(\pi\) grâce à la technique décrite plus haut. Essayez de changer le nombre d'itérations et observez l'influence sur le résultat obtenu.

Indices

Calculer un point aléatoire

Pour calculer un point aléatoire, une suffit de tirer aléatoirement une valeur pour l'abscisse et une autre valeur pour l'ordonnée.

La méthode random du module random permet de retourner une valeur aléatoire dans l'intervalle \([0, 1[\).

Déterminer si un point est dans le cercle

Pour savoir si un point tombe dans le cercle, il suffit de calculer la distance euclidienne entre le point et le centre du cercle. Si cette distance est inférieure ou égale au rayon du cercle, alors le point est à l'intérieur du cercle.

Pour rappel, la distance euclidienne entre deux points \((x_1, y_1)\) et \((x_2, y_2)\) est donné par la formule \(\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}\).

Dans le cas présent, comme un des points est à l'origine, la formule se simplifie grandement.

Exercice 2 : Blackjack

Pour cet exercice, nous allons aborder le jeu du Blackjack.

Le Blackjack est un jeu d'argent utilisant des cartes où un ou plusieurs joueurs affrontent un croupier. Le jeu est relativement simple. Pour participer au jeu, chaque joueur met en jeu un montant appelé une mise. Le croupier distribue une carte à chaque joueur, puis à lui-même. Le croupier dévoile sa première carte aux joueurs. Le croupier distribue ensuite une deuxième carte à chaque joueur et à lui-même. Le croupier ne dévoile pas sa seconde carte. Les cartes d'un joueur constituent sa main.

Chaque carte a une valeur qui est donnée par le tableau suivant :

Carte Valeur
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
Valet 10
Dame 10
Roi 10
As 1 ou 11 (au choix)

Ainsi, chaque main a une valeur qui est la somme des cartes qui la composent. Si une main contient un ou plusieurs As, le joueur à qui le jeu appartient décide de la valeur de chaque As indépendamment. Un As peut ainsi soit valoir 1, soit valoir 11.

Le but est d'avoir un meilleur jeu que celui du croupier sans toutefois dépasser la valeur de 21 points. À leur tour, chaque joueur peut demander des cartes au croupier afin d'augmenter la valeur de son jeu, en espérant toutefois ne pas dépasser les 21 points, auquel cas le joueur serait d'office éliminé et perdrait sa mise.

Blackjack

Un cas particulier se présente lorsque le joueur (ou le croupier) a une main initiale de deux cartes qui totalise directement 21 points, ce qui est possible avec un As et une carte entre le 10 et le Roi. On appelle cette main un Blackjack.

Actions possibles

À son tour de jouer, chaque joueur peut :

Stratégie du croupier

Une fois que chaque joueur a effectué ses actions, c'est au croupier de jouer. Il révèle sa carte cachée aux joueurs. Finalement, le croupier tire des cartes selon une stratégie bien définie. Tant que la valeur du jeu du croupier est en dessous ou égal à 16, il prend une carte supplémentaire. Dès que 17 points ou plus sont obtenus, le croupier s'arrête.

Détermination des gains

Une fois que le croupier a joué, arrive la détermination des gains. Les gains sont déterminés selon les étapes suivantes, à suivre dans l'ordre :

Instructions

Dans cet exercice, vous allez compléter un code existant pour implémenter un simulateur pour le Blackjack. Ce simulateur vous permettra d'estimer quel est le meilleur coup à jouer étant donné une main et une carte visible pour le croupier. Il vous permettra aussi d'estimer l'espérance de gain au Blackjack et de déterminer quelles sont les meilleures mains de départ.

Fichiers

Un ensemble de fichiers vous est fourni pour cet exercice. Vous pouvez télécharger l'archive ci-dessous.

Télécharger les fichiers de l'exercice.

Vous pouvez placer les fichiers dans un dossier blackjack dans votre espace de stockage.

Partie 1

En première partie d'exercice, implémentez les méthodes manquantes de la classe Hand située dans le fichier state.py. Les méthodes manquantes sont décrites ci-dessous.

get_non_bust_hand_values

La méthode get_non_bust_hand_values doit retourner la liste des valeurs possibles pour la main qui ne dépassent pas 21 points. Évitez les duplicats.

Indice : Quand une main n'a pas d'As, la situation est relativement simple car il n'y a qu'une seule valeur possible.

Indice : Quand une main a un ou plusieurs as, au maximum un seul de ces As pourra prendre une valeur de 11.

get_best_hand_value

La méthode get_best_hand_value doit retourner la plus haute valeur possible pour la main qui ne dépasse pas 21 points, ou None si cela n'est pas possible.

is_bust

La méthode is_bust doit indiquer si la main dépasse de toutes manières les 21 points.

is_blackjack

La méthode is_blackjack doit indiquer si la main est un Blackjack, c'est-à-dire si elle contient 2 cartes et peut arriver à 21 points.

Partie 2

Essayez le script main.py. Comparez les résultats obtenus à ceux présentés dans l'article Wikipédia sur le Blackjack.

Partie 3

Dans un nouveau fichier stats.py, faites en sorte d'estimer le gain moyen d'une partie de Blackjack.

Aller plus loin

Si cet exercice vous intéresse, il y a de noubreuses pistes à explorer pour explorer plus en profondeur le jeu du Blackjack. Ci-dessous sont listées quelques idées d'approfondissement.