Annonce

Bienvenue sur le site support de mes ouvrages d'introduction à SAS

La 4ème édition de mon ouvrage est toujours disponible !

Où trouver cet ouvrage ?


#1 21-09-2011 13:07:15

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

[archive] Jouons au poker avec SAS !

Bonjour

Je cherchais au départ à construire un exemple simple permettant d'illustrer l'utilisation des ARRAY multidimensionnelles et je me suis aussi souvenu que l'année dernière, j'avais dit à certains de mes étudiants qui souhaitaient améliorer (en s'amusant) leurs connaissances en langage base SAS, de s'amuser à retrouver les probabilités du poker en simulant (avec SAS) des tirages dans un jeu de cartes.

Je dois donc une correction à ces étudiants !

Nous allons voir qu'effectivement, nous allons avoir besoin d'array, que l'on peut retrouver ces probabilités mais que nous avons là un "exemple" peut être pas si simple que cela à suivre.... Nous allons donc procéder par étapes.

Prenons quatre joueurs de poker et invitons les à jouer 100 000 parties

Sous le terme 'probabilités du poker', on considère en fait les probabilités d'obtenir avec cinq cartes, une paire, deux paires, un brelan etc. etc. Ces probabilités peuvent être obtenues par dénombrement et les valeurs exactes peuvent être observées ici :
http://fr.wikipedia.org/wiki/Probabilit%C3%A9_au_poker

Pour obtenir (in fine) des approximations de ces probabilités, nous allons distribuer 5 cartes à 4 joueurs 100 000 fois de suite. Cela devient très simple quand on connait CALL RANPERM.

Code:

data poker(keep=c1-c20);
      array carte{52} c1-c52 (1:52);
      seed = 38924889392;
      do n=1 to 100000;
         call ranperm(seed, of c1-c52);
         output;
      end;
run;

L'instruction ARRAY permet de créer 52 variables (C1-C52) auxquelles on attribue les valeurs initiales 1 à 52. La routine RANPERM ordonne une permutation au hasard entre ces différentes valeurs et vous obtenez au terme de la boucle une table de 100 000 observations. Au moyen de l'option de table KEEP=, nous ne conservons que les variables C1 à C20 : C1-C5 sont les cartes données au premier joueur, C6-C10, les cartes du second joueur, etc.

Nos quatres joueurs ont tous des cartes forcément différentes.

Regardons nos cartes !

Avec cinq cartes, la première chose à faire, c'est les regarder !
Bien entendu, le fait que pour l'instant, vos cartes ne soient symbolisées que par des chiffres entre 1 et 52 ne facilite pas cette tâche...

Regardons les 5 premières observations de la table (uniquement pour le premier joueur).

Code:

   Obs    c1    c2    c3    c4    c5

     1    32    43    15    27     2
     2    13    19    23    36    32
     3    37    45    52    19    31
     4    38    10     5    46    51
     5     6    14    22    36    26

ce n'est pas très sympa... et c'est encore moins sympa quand on réfléchit à la carte à associer à chaque chiffre entre 1 et 52.

En fait, 1 doit correspondre à une carte 2 (admettons de trèfle), 2 à un trois de trèfle,..., 13 correspond à l'as de trèfle
14 correspond au 2 de pique, 15 au trois de pique etc. etc. 26 correspondra à l'as de pique, 39 à l'as de cœur et 52 à l'as de carreau.

Un telle correspondance est nécessaire si l'on veut correctement voir si dans un jeu, il n'y a pas une suite à l'as (10, V, D, R et A) ou si l'on veut constater qu'une paire d'as, c'est mieux qu'une paire de 2...

Maintenant, si on veut "regarder" ses cartes et donc voir ces valeurs 1 à 52 associées à quelque chose directement lisible et compréhensible, il n'y a rien de mieux qu'un FORMAT !

La prochaine fois, nous montrerons comment obtenir ce résultat :

http://www.sas-sr.com/img/poker1.JPG

à suivre...

Ce sujet est maintenant archivé - seuls les utilisateurs inscrits de www.sas-sr.com peuvent consulter l'intégralité du sujet
pour vous identifier, suivez ce lien
pour vous inscrire, suivez ce lien

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS