Recompilé le 12 mars 2014 avec tth et réarrangé pour MathJax pour avoir un code HTML 5.0 standard et moins lourd. Si vous apercevez un problème, n'hésitez pas à m'envoyer un email merci.
Le but de cet exposé est de prouver que, contrairement à une idée reçue (cf
par exemple l'article de Ian
Stewart dans le "Pour La Science" de Juin 1996), les différentes cases du
Monopoly
ne sont
pas équiprobables. Nous avons fait des tests sur le Monopoly français. Nous
verrons même qu'il y a des
disparités entre les cases, entre les lotissements, et à l'intérieur des
lotissements.
Pour prouver cela, nous avons choisi la simulation. Nous avons
fait un programme en PERL, a priori exécutable sur
n'importe quelle machine UNIX afin de simuler des suites de tours.
Soyons clair, l'aspect financier n'est absolument pas pris
en compte. Il n'intervient pas d'ailleurs sur la suite de
déplacements que peut faire un joueur au cours d'une partie.
Nous avons par contre pris en compte tout ce qui intervenait pour
les déplacements : le tirage des cartes "Chance" et "Caisse de
Communauté", avec les effets sur la position, la prison au bout de trois
doubles et la case "Allez en prison".
Un rappel succinct des règles est fait dans la section . La section expose
les résultats pour chaque case, et la section pour chaque groupe. On conclut
ensuite en section . Le
programme proprement dit est rejeté en annexe (section ) pour ne pas
alourdir
l' exposé.
2 Rappel des règles du jeu du Monopoly
Nous allons seulement rappeler les règles qui comptent pour les
déplacements.
Par convention, on considèrera qu'il y a 41 cases : cela va de la case
"Départ" (numéro
0) à
la case "Rue de la Paix" (numéro 39), la case "Prison" ayant le numéro 40,
la
case "Simple Visite" ayant le numéro 10. Voici la liste détaillée des cases
: Case Départ, Belleville, Caisse de Communauté, Lecourbe, Impôts, Gare
Montparnasse, Vaugirard, Carte Chance, Courcelles, Républiques, Simple
Visite, La Villette, Cie Électricité, Neuilly, Paradis, Gare de Lyon,
Mozart, Caisse de Communauté, Saint-Michel, Pigalle, Parc Gratuit, Matignon,
Carte Chance, Malesherbes, Henri-Martin, Gare du Nord, Saint-Honoré, La
Bourse, Cie des Eaux, La Fayette, Allez en Prison, Breteuil, Foch, Caisse de
Communauté, Capucines, Gare Saint-Lazare, Carte Chance, Champs-Élysées, Taxe
de Luxe, La Paix, Prison.
Comme il peut y avoir des éditions différentes du Monopoly, nous allons
préciser aussi les couleurs des lotissements : les bruns (Belleville,
Lecourbe), les bleus clairs (Vaugirard, Courcelles, Républiques), les
violets (La Villette, Neuilly, Paradis), les oranges (Mozart, Saint-Michel,
Pigalle), les rouges (Matignon, Malesherbes, Henri-Martin), les jaunes
(Saint-Honoré, La Bourse, La Fayette), les verts (Breteuil, Foch,
Capucines), les bleus foncés (Champs-Élysées, La Paix).
Une partie commence sur la case "Départ". A chaque tour, le joueur lance
deux dés.
Au bout de trois doubles consécutifs, le joueur va en prison. S'il tombe sur
une
case "Chance" ou bien "Caisse de Communauté", il tire une carte dans la pile
correspondante, et ce tirage est éventuellement suivi d'un effet immédiat au
niveau de
la position. Quand on est en prison, on peut en sortir gratuitement en
faisant un double
dans les trois tours qui suivent celui de l'emprisonnement, sinon on doit
payer pour
sortir. On peut sortir avant la fin des trois tours en payant.
Voici la liste détaillée des cartes "Chance" : 1 envoie en prison, 1 envoie
vers l'avenue Henri-Martin, 1 envoie vers boulevard de la Villette, 1 envoie
vers la Rue de la Paix, 1 envoie vers la gare de Lyon, 1 envoie sur la case
Départ, 1 "Reculez de trois cases". Il y a 9 autres cartes "Chance" qui
n'ont aucune influence sur la position
Voici maintenant la liste détaillée des cartes "Caisse de Communauté" : 1
"Retournez à Belleville", 1 envoie en prison, 1 envoie sur la case Départ, 1
possibilité de tirer une carte "Chance" (alternative avec une amende). Il y
a 12 autres cartes "Caisse de Communauté" qui n'ont aucune influence sur la
position.
Nous allons considérer 4 types de stratégie pour la simulation en combinant
les deux options suivantes : 1) quand on tire la carte "Caisse de
Communauté" qui nous propose le choix entre
le tirage d'une carte "Chance" et le paiement d'une amende, on peut choisir
de tirer toujours
une carte "Chance" (option C), ou bien on peut choisir de toujours payer une
amende (option $\urcorner$C) ; 2) quand on est en prison, on peut choisir de
rester en prison et d'attendre de faire un double, pendant au maximom trois
tours évidemment (option P), ou bien on peut choisir de sortir tout de suite
(option $\urcorner$P). Ces options combinées font bien quatre stratégies.
Quand une simulation commence, l'ordinateur ne change pas de stratégie. Et
on peut objecter que tout
ceci est artificiel : par exemple, en fin de partie, quand beaucoup de
lotissements sont construits, on
préfère rester en prison, alors qu'en début de partie, on se dépèche
d'acheter, mais tout ceci n'est
pas grave car nous allons voir que le choix de telle ou telle stratégie
n'influe pas sur le "poids statistique" qu'a telle ou telle case.
Passons maintenant aux résultats obtenus.
3 Les résultats case par case
Il y a quatre simulations correspondant aux quatre combinaisons possibles de
stratégies. Les résultats concernant la simulation $N$ ($N$
variant de 1 à 4) sont dans les colonnes
$2N$ et $2N+1$. Par convention, on a supposé qu'une partie durait
100 tours.
Fixons $N$. La simulation $N$ consiste à effectuer 50 fois 1000
parties. Pour chaque case, on
obtient $50$ nombres entiers $c^1$, $c^2$, ...
$c^{50}$ qui signifient que pendant les 1000 premières parties,
on est passé $c^1$ fois
par cette case, dans les 1000 parties suivantes, on est passé $c^2$
fois par cette case, etc... (les exposants ne sont pas des puissances ici
mais des indices) Soit $C$ le nombre de tours effectivement joués dans
la simulation $N$. Le nombre tout en bas de
la colonne $2N$ est égal à $\left(\frac{C}{41*50}\right)$ : c'est la
valeur théorique
dans le cas équiprobable des nombres $c^1$, $c^2$,
etc...
Ces nombres ne figurent pas dans le tableau ci-dessus car ils auraient été
trop peu parlants.
Pour chaque case, on calcule alors la moyenne arithmétique et l'écart-type
de ces $50$ nombres. Rappelons que la moyenne arithmétique $m$ est
donnée par la formule : $$ m=\frac{c^1+c^2+\ldots+c^{50}}{50}
$$
et que l'écart-type $\sigma$ est donné par la formule : $$
\sigma^2=\frac{(c^1-m)^2+(c^2-m)^2+\ldots+(c^{50}-m)^2}{50}.
$$
Pour que la formule soit plus parlante, on n'a pas inscrit directement ces
deux nombres (mais on peut
les retrouver avec le tableau ci-après) mais plutôt les deux nombres
suivants (multipliés par $100$ dans le tableau) : $$
\widetilde{m}=\frac{m-\left(\frac{C}{41*50}\right)}{\left(\frac{C}{41*50}\right)}\hbox{,
}\widetilde{\sigma}=\frac{\sigma}{\left(\frac{C}{41*50}\right)}.
$$
Dans la suite de l'exposé, le couple $(\widetilde{m},\widetilde{\sigma})$
s'appellera le poids statistique de la case.
Ainsi, les tableaux ci-après permettent de savoir si, par rapport au cas
équiprobable, une case
est plutôt plus, plutôt moins ou plutôt pareillement fréquentée. Par
exemple, dans la simulation 1, on lit pour
Vaugirard que son poids statistique est (−10.6 %, 1.6 %). Cela signifie que
pour la stratégie CP, la case Vaugirard
est 10.6% moins fréquentée que dans le cas (imaginaire) équiprobable avec un
écart-type de
1.6%. Le poids statistique ne mesure donc pas la fréquentation statistique,
mais "l'écart" par
rapport à un hypothétique cas équiprobable.
Pour ce qui est du choix des valeurs 50 et 1000 (50 fois 1000 parties pour
chaque simulation), disons que d'autres choix de valeurs ne changent pas
fondamentalement les résultats des simulations sur ordinateur : la
convergence est très rapide.
Voici maintenant les tableaux de résultat. Pour des questions de commodité
et de clarté, on a fait un tableau par côté.
$$\begin{array}{|l|l|l|l|l|l|l|l|l|}
\hline
& \hbox{CP} && \hbox{${\urcorner}$CP} && \hbox{C${\urcorner}$P} && \hbox{${\urcorner}$C${\urcorner}$P}&\\
\hline
\hbox{Case Départ} & 17.3 & 1.7 & 16 & 1.5 & 17.4 & 1.4 & 17 & 1.7 \\ \hline
\hbox{Belleville} & -1.4 & 1.3 & -1.2 & 1.4 & -.9 & 1.3 & -.3 & 1.9 \\ \hline
\hbox{Caisse de Communauté} & -17.3 & 1.7 & -17.1 & 1.7 & -17.2 & 1.5 & -16.7 & 1.5 \\ \hline
\hbox{Lecourbe} & -15.9 & 1.9 & -15.6 & 1.8 & -16.2 & 1.4 & -15.4 & 2 \\ \hline
\hbox{Impôts} & -9.1 & 1.9 & -9.2 & 1.7 & -9 & 2.2 & -9 & 1.8 \\ \hline
\hbox{Gare Montparnasse} & -13.2 & 1.7 & -13.4 & 1.5 & -13.1 & 1.5 & -13.5 & 1.7 \\ \hline
\hbox{Vaugirard} & -10.6 & 1.6 & -10.4 & 1.9 & -11.2 & 1.5 & -10.8 & 1.6 \\ \hline
\hbox{Carte Chance} & -8.8 & 1.8 & -9.1 & 1.8 & -9.6 & 1.7 & -9.5 & 1.9 \\ \hline
\hbox{Courcelles} & -10.1 & 1.4 & -9 & 1.8 & -10.4 & 1.6 & -10 & 1.8 \\ \hline
\hbox{Républiques} & -11.6 & 1.8 & -11 & 1.5 & -11.5 & 1.9 & -10.9 & 1.7 \\ \hline
\hbox{Simple Visite} & -13.5 & 1.3 & -12.6 & 1.8 & -14.2 & 1.4 & -13.5 & 1.7 \\ \hline
\hbox{Prison} & 61.4 & 2.2 & 59.4 & 2.1 & 60.5 & 2 & 58.7 & 2.3 \\ \hline
\hbox{Nombre moyen par case}& 2467.1 & & 2465.5 & & 2624.3 & & 2618.9 & \\ \hline
\end{array}$$
$$\begin{array}{|l|l|l|l|l|l|l|l|l|}\hline
& \hbox{CP} && \hbox{${\urcorner}$CP} && \hbox{C${\urcorner}$P} && \hbox{${\urcorner}$C${\urcorner}$P}&\\ \hline
\hbox{La Villette} & 3.2 & 1.6 & 2.6 & 1.6 & 2.9 & 1.6 & 2.5 & 1.8 \\ \hline
\hbox{Cie électricité} & -6.7 & 1.8 & -6 & 2 & -13.1 & 1.4 & -12.8 & 1.7 \\ \hline
\hbox{Neuilly} & -12.8 & 1.9 & -12.9 & 1.9 & -10.4 & 1.6 & -9.8 & 1.8 \\ \hline
\hbox{Paradis} & -.9 & 2.1 & -1.1 & 1.5 & -5.1 & 1.6 & -5.5 & 1.5 \\ \hline
\hbox{Gare de Lyon} & 14 & 2.1 & 13.3 & 1.9 & 18.9 & 1.9 & 17.5 & 1.4 \\ \hline
\hbox{Mozart} & 8.2 & 2.1 & 8.1 & 1.6 & 6.4 & 1.9 & 6.5 & 1.8 \\ \hline
\hbox{Caisse de Communauté} & 5.6 & 2 & 5.4 & 2.2 & 13.2 & 1.9 & 13.3 & 1.9 \\ \hline
\hbox{Saint-Michel} & 13.9 & 1.7 & 14 & 2.1 & 11.7 & 1.9 & 11.2 & 2 \\ \hline
\hbox{Pigalle} & 12.5 & 1.8 & 12.1 & 1.9 & 16.3 & 1.8 & 16.1 & 1.9 \\ \hline
\hbox{Parc Gratuit} & 12.7 & 2.2 & 12.4 & 2.1 & 8.5 & 1.8 & 8.8 & 1.7 \\ \hline
\hbox{Nombre moyen par case}& 2467.1 & & 2465.5 & & 2624.3 & & 2618.9 & \\ \hline
\end{array}$$
$$\begin{array}{|l|l|l|l|l|l|l|l|l|}\hline
& \hbox{CP} && \hbox{${\urcorner}$CP} && \hbox{C${\urcorner}$P} && \hbox{${\urcorner}$C${\urcorner}$P}&\\ \hline
\hbox{Matignon} & 4.3 & 2.1 & 4.8 & 1.9 & 7.4 & 1.9 & 7.1 & 1.7 \\ \hline
\hbox{Carte Chance} & 12.4 & 2.2 & 12.6 & 2.1 & 5.7 & 1.7 & 6.1 & 1.8 \\ \hline
\hbox{Malesherbes} & 3.5 & 1.8 & 3.3 & 1.6 & 3.7 & 1.8 & 4.2 & 1.8 \\ \hline
\hbox{Henri-Martin} & 21.8 & 1.7 & 21.2 & 2.1 & 22.7 & 1.7 & 21.8 & 1.8 \\ \hline
\hbox{Gare du Nord} & 3.5 & 1.9 & 3.9 & 1.4 & 4.3 & 1.9 & 4.4 & 2.2 \\ \hline
\hbox{Saint-Honoré} & 3.8 & 1.9 & 3.3 & 1.9 & 4.2 & 1.9 & 4.1 & 1.5 \\ \hline
\hbox{La Bourse} & 2.9 & 1.5 & 2.4 & 1.4 & 2.5 & 1.6 & 3.1 & 1.8 \\ \hline
\hbox{Cie des Eaux} & .7 & 1.7 & .8 & 1.7 & .9 & 1.6 & 1 & 1.7 \\ \hline
\hbox{La Fayette} & -.8 & 1.8 & 0 & 2 & -.5 & 1.6 & -.1 & 1.7 \\ \hline
\hbox{Allez en Prison} & .3 & 1.9 & -.2 & 1.7 & .8 & 1.7 & .3 & 2 \\ \hline
\hbox{Nombre moyen par case}& 2467.1 & & 2465.5 & & 2624.3 & & 2618.9 & \\ \hline
\end{array}$$
$$\begin{array}{|l|l|l|l|l|l|l|l|l|}\hline
& \hbox{CP} && \hbox{${\urcorner}$CP} && \hbox{C${\urcorner}$P} && \hbox{${\urcorner}$C${\urcorner}$P}&\\ \hline
\hbox{Breteuil} & 1.2 & 1.9 & .8 & 1.8 & 1.5 & 1.5 & 1.2 & 1.7 \\ \hline
\hbox{Foch} & -1.5 & 1.7 & -2 & 1.6 & -1.7 & 2 & -1.2 & 1.7 \\ \hline
\hbox{Caisse de Communauté} & .4 & 2 & .1 & 1.9 & .6 & 1.7 & .8 & 2 \\ \hline
\hbox{Capucines} & -7.5 & 1.8 & -7 & 1.6 & -7.2 & 1.8 & -7.5 & 1.7 \\ \hline
\hbox{Gare Saint-Lazare} & -10.1 & 1.8 & -10 & 1.6 & -10.1 & 1.8 & -9.9 & 1.8 \\ \hline
\hbox{Carte Chance} & -14.5 & 1.8 & -13.9 & 1.8 & -13.9 & 1.6 & -14.2 & 1.5 \\ \hline
\hbox{Champs-élysées} & -18.6 & 1.6 & -18.8 & 1.8 & -18.4 & 1.5 & -18.4 & 1.8 \\ \hline
\hbox{Taxe de Luxe} & -18.8 & 1.5 & -17.8 & 1.6 & -18.2 & 1.9 & -17.9 & 1.7 \\ \hline
\hbox{La Paix} & 0 & 1.4 & -.3 & 1.5 & -.2 & 1.5 & -.8 & 1.4 \\ \hline
\hbox{Nombre moyen par case}& 2467.1 & & 2465.5 & & 2624.3 & & 2618.9 & \\ \hline
\end{array}$$
On voit que le nombre moyen théorique de passages par une case est plus bas
dans les deux premières combinaisons
de stratégie que dans les deux dernières. C'est tout à fait normal : dans
les deux premières combinaisons (CP et $\urcorner$CP), on reste en moyenne
plus longtemps en prison.
On peut observer des disparités d'une case à une autre, y compris à
l'intérieur d'un même lotissement. Les
tableaux ci-avant parlent d'eux-même mais disons que
parmi les cases appartenant à des lotissements, la plus intéressante est
l'avenue Henri-Martin qui est 20% plus fréquentée
qu'une case équiprobable, et la moins intéressante est l'avenue des
Champs-Élysées qui est presque 20% moins fréquentée qu'une case
équiprobable. Selon que l'on ait choisi l'option P ou l'option \urcornerP,
la probabilité de sortir de prison avec un double diffère. Les doubles
possibles sont 2, 4, 6, 8, 10 et 12. En partant de la prison, on tombe sur
les cases Cie d'Électricité, Paradis, Mozart, Saint-Michel, Parc Gratuit et
la case "Chance" juste après Matignon : toutes ces cases ont un poids
statistique égal ou plus élevé dans la stratégie P.
Toutes les cases des lotissements orange et rouge sont intéressantes, et on
peut dores et déjà dire que ce sont les lotissements les plus intéressants.
Cela sera confirmé ci-après quand on présentera les résultats par groupe.
4 Les résultats par groupe
Puisqu'il s'agit d'un article mathématique, nous allons quand même caser un
théorème. Pour cela,
nous allons commencer par introduire la notion de poids statistique d'un
groupe de cases.
Soient $N$ cases fixées ($N$ étant compris entre 1 et 41) : $N=3$
ou $N=2$ par exemple pour un lotissement. Imaginons que nous fassions
une simulation
sur ordinateur (donc 50 fois 1000 parties de 100 tours). Supposons qu'au
cours de cette
simulation, la case numéro $i$ du groupe ($i$ variant de $1$ à $N$)
soit fréquentée $c_i^1$ fois, puis
$c_i^2$ fois, ... puis $c_i^{50}$
fois (les exposants ne sont pas des puissances ici mais des indices). Notre
groupe de $N$ cases a été fréquenté $\sum_{i=1}^N c_i^1$
fois, puis $\sum_{i=1}^N c_i^2$ fois, ... puis $\sum_{i=1}^N c_i^{50}$ fois.
Supposons que le nombre total de tours joués pendant
cette simulation soit de $C$ : dans le cas équiprobable, chacun des
nombres précédents devrait alors être égal à $\frac{NC}{41*50}$ fois.
Notons $m$ la
moyenne arithmétique de cette série de 50 nombres et $\sigma$ son écart-type.
Posons alors $$\widetilde{m}=\frac{m -
\frac{NC}{41*50}}{\frac{NC}{41*50}}\hbox{,
}\widetilde{\sigma}=\frac{\sigma}{\left(\frac{NC}{41*50}\right)}.$$
Le couple $(\widetilde{m},\widetilde{\sigma})$ sera appelé le poids
statistique du groupe. Il a la même interprétation que celle donnée
ci-avant dans le cas d'une case et c'est une grandeur qui a le mérite d'être
parlante pour le joueur (et le lecteur). Par exemple, le poids statistique
du lotissement rouge est dans la simulation 1 (9.9 %, 1.1 %) (cf ci-après).
Cela signifie que le lotissement rouge est 9.9% de fois plus fréquenté qu'un
lotissement de $3$ cases dans le cas équiprobable.
Voici maintenant l'unique théorème de ce papier :
Proposition 1Soit un groupe de $N$ cases. Soit
$(\widetilde{m_i},\widetilde{\sigma_i})$ le poids statistique de la $i$-ème
case
du groupe ($i$ variant de 1 à $N$) et soit
$(\widetilde{m},\widetilde{\sigma})$ le poids statistique du groupe.
Alors $\widetilde{m}$ est la moyenne arithmétique des $\widetilde{m_i}$.
[Preuve de ce fabuleux théorème]
Avec les notations ci-avant, on note $m_i$ (resp. $\sigma_i$)
la moyenne arithmétique (resp. l'écart-type) de la série
$(c_i^1,c_i^2,\ldots, c_i^{50})$. On a donc pour chaque $i$ les
égalités $$\widetilde{m_i}=\frac{m_i - \frac{C}{41*50}}{\frac{C}{41*50}}.$$
Comme $\sum_{i=1}^N 50m_i = 50m$
alors
$$
\widetilde{m}=\frac{m - \frac{NC}{41*50}}{\frac{NC}{41*50}} =
\frac{\sum_{i=1}^N 50m_i - \frac{50NC}{41*50}}{\frac{50NC}{41*50}}=
\frac{\sum_{i=1}^N (m_i -
\frac{C}{41*50})}{\frac{NC}{41*50}}=\frac{\sum_{i=1}^N
\widetilde{m_i}}{N}.$$
Il n'y a malheureusement pas de relations simples entre $\widetilde{\sigma}$ et les $\widetilde{\sigma_i}$ : en général, la
variance (le carré de l'écart-type) d'une somme de variables aléatoires
indépendantes est la somme des variances de chaque variable aléatoire : mais
ici, chaque variable aléatoire correspondrait au nombre de passages par une
case donnée au bout de 100000 tours et ces variables aléatoires ne sont
clairement pas indépendantes.
Pour calculer le poids statistique d'un groupe, donc pas seulement les
moyennes arithmétiques mais aussi les écarts-type, il faut donc reprendre
les résultats bruts et faire un calcul direct. Le programme donné en annexe
(section ) se débrouille très bien pour faire tout ça. Voici finalement le
tableau des résultats par groupe (voir la section 2
pour la signification des couleurs, qui peuvent varier d'une édition du
Monopoly à une autre) :
$$\begin{array}{|l|l|l|l|l|l|l|l|l|}\hline
& \hbox{CP} && \hbox{${\urcorner}$CP} && \hbox{C${\urcorner}$P} && \hbox{${\urcorner}$C${\urcorner}$P}&\\ \hline
\hbox{Les gares} & -1.4 & 1 & -1.5 & .8 & 0 & .8 & -.3 & .9 \\ \hline
\hbox{Les Cies} & -3 & 1.4 & -2.6 & 1.3 & -6.1 & 1.2 & -5.8 & 1.2 \\ \hline
\hbox{Brun} & -8.7 & 1.1 & -8.4 & 1.1 & -8.6 & .9 & -7.9 & 1.2 \\ \hline
\hbox{Bleu clair} & -10.8 & .9 & -10.1 & 1 & -11 & .8 & -10.6 & .9 \\ \hline
\hbox{Violet} & -3.4 & .9 & -3.8 & .9 & -4.2 & .7 & -4.2 & .9 \\ \hline
\hbox{Orange} & 11.6 & .9 & 11.4 & 1 & 11.5 & 1 & 11.3 & 1 \\ \hline
\hbox{Rouge} & 9.9 & 1.1 & 9.8 & .8 & 11.3 & .9 & 11 & .9 \\ \hline
\hbox{Jaune} & 2 & .9 & 1.9 & .8 & 2.1 & .8 & 2.3 & .8 \\ \hline
\hbox{Vert} & -2.6 & .8 & -2.7 & .8 & -2.4 & .9 & -2.4 & .8 \\ \hline
\hbox{Bleu foncé} & -9.3 & 1 & -9.6 & 1 & -9.3 & .8 & -9.6 & 1 \\ \hline
\hbox{Nombre moyen par case}& 2467.1 & & 2465.5 & & 2624.3 & & 2618.9 & \\ \hline
\end{array}$$
Faisons quelques commentaires maintenant. Le groupe des quatre gares est
très légèrement moins fréquenté qu'un groupe idéal
qui serait composé de quatre cases équiprobables. Les lotissements les plus
intéressants (parmi
les lotissements de trois cases) sont clairement les lotissements rouge et
orange : tous les
joueurs de Monopoly en ont, je pense, l'intuition. Parmi les groupes de deux
cases, les bruns
et les bleus foncés sont au même niveau, et le groupe formé des deux
compagnies (eau et électricité)
est légèrement meilleur.
5 Conclusion
Contrairement à ce que déclare Ian Stewart dans le numéro de Juin 1996 de
"Pour La Science", les
cases du Monopoly ne sont donc pas équiprobables. En fait, dans son article,
Ian Stewart
ne tient compte que des jets de dés. Il ne tient pas compte des deux piles
de cartes ("Chance" et "Caisse de
Communauté") et des déplacements qu'elles engendrent, ni de la règle des
trois doubles
successifs. Il y a donc de légères fluctuations d'une case
à une autre et cela fait finalement tout le pigment du jeu (avec l'aspect
financier et l'aspect
jeu de société).
6 Annexe : le programme PERL
Il est difficile d'expliquer un programme. Je pense qu'il y a suffisamment
de commentaires
pour qu'il soit lisible. Il n'est certainement pas optimisé : sa seule
qualité est
qu'il fonctionne. Il se lance dans une ligne de commande. Le résultat se
trouve
dans le fichier $fichier_tex sous forme d'un tableau prêt à être
inséré dans un environnement array d'un fichier LATEX
. Une dernière remarque : il n'y a pas de fautes d'orthographes dans le
programme : on écrit bien rominet et pas gros minet.
#!/bin/perl -s
srand;
$melange = 10000; # nombre de transpositions aléatoires pour
# mélanger les cartes.
# nombre de tests effectué : $fois fois $coup/$duree_partie parties
# de $duree_partie chacune (cela signifie entre autre que la variable
# $position est remise \`a zéro tous les $duree_partie coups.
$fois = 50;
$coup = 100000;
$duree_partie = 100;
# choix des stratégies :
# $prison = 0 : on ne reste jamais en prison
# $prison = 1 : on reste en prison jusqu'au troisi\`eme tour ou bien
# jusqu'\`a l'obtention d'un double
#
# Il y a une carte "Caisse de Communauté" qui propose le choix
# suivant : payer une amende ou bien tirer une carte "Chance"
# $tirage_chance = 0 : ne jamais choisir de tirer une carte "Chance"
# $tirage_chance = 1 : toujours choisir de tirer une carte "Chance"
# nom du fichier tampon et des fichiers qui doivent contenir les
# calculs.
$fichier = "tableau.txt";
$fichier_tampon = "tableau_tmp.txt";
$fichier_tex = "tableau.tex";
# Nom des différentes cases
@case = ("Case Départ", # 0
"Belleville", # 1
"Caisse de Communauté", # 2
"Lecourbe", # 3
\"Impôts", # 4
"Gare Montparnasse", # 5
"Vaugirard", # 6
"Carte Chance", # 7
"Courcelles", # 8
"Républiques", # 9
"Simple Visite", # 10
"La Villette", # 11
"Cie électricité", # 12
"Neuilly", # 13
"Paradis", # 14
"Gare de Lyon", # 15
"Mozart", # 16
"Caisse de Communauté", # 17
"Saint-Michel", # 18
"Pigalle", # 19
"Parc Gratuit", # 20
"Matignon", # 21
"Carte Chance", # 22
"Malesherbes", # 23
"Henri-Martin", # 24
"Gare du Nord", # 25
"Saint-Honoré", # 26
"La Bourse", # 27
"Cie des Eaux", # 28
"La Fayette", # 29
\"Allez en Prison", # 30
"Breteuil", # 31
"Foch", # 32
"Caisse de Communauté", # 33
"Capucines", # 34
"Gare Saint-Lazare", # 35
"Carte Chance", # 36
"Champs-élysées", # 37
"Taxe de Luxe", # 38
"La Paix", # 39
"Prison", # 40
"Les gares", # 5 + 15 + 25 + 35 (41)
"Les Cies", # 12 + 28 (42)
"Brun", # 1 + 3 (43)
"Bleu clair", # 6 + 8 + 9 (44)
"Violet", # 11 + 13 + 14 (45)
\"Orange", # 16 + 18 + 19 (46)
"Rouge", # 21 + 23 + 24 (47)
"Jaune", # 26 + 27 + 29 (48)
"Vert", # 31 + 32 + 34 (49)
"Bleu foncé" # 37 + 39 (50)
);
# initialisation de $fichier_tex (qui va contenir le tableau).
&executer("rm $fichier_tex");
open(titi,">$fichier_tex");
for $i (0..50) {
print titi "\\hbox\{$case[$i]\} \n"
};
close(titi);
#fabrication d'un pattern
$pattern = "\^.*";
for $i (1..$fois) {
$pattern = $pattern."\\s(\\d+)"
};
$pattern = $pattern.".*\$";
$theorie = 0;
print "Stratégie CP\n";
$prison = 1; $tirage_chance = 1; &simulation;
print "Stratégie CnonP\n";
$prison = 1; $tirage_chance = 0; &simulation;
print "Stratégie nonCP\n";
$prison = 0; $tirage_chance = 1; &simulation;
print "Stratégie nonCnonP\n";
$prison = 0; $tirage_chance = 0; &simulation;
# On rajoute des \\ pour la syntaxe de l'environnement array
open(titi,"$fichier_tex");
open(rominet,">$fichier_tampon");
while(<titi>) {
s/(.+)$/$1 \\\\/;
print rominet $_;
};
close(rominet);
close(titi);
&executer("mv $fichier_tampon $fichier_tex");
###################################################################
###################################################################
sub simulation {
#simulation proprement dite
# initialisation de $fichier : il doit impérativement contenir 51
# lignes vides.
&executer("rm $fichier");
open(titi,">$fichier");
for $i (0..50) {
print titi " \n"
};
close(titi);
for $i (1..$fois) {
srand;
print "Simulation numéro $i\n";
$theorie = $theorie + &monopoly
};
$theorie = $theorie/$fois/41;
#Fabrication du tableau TeX correctement formatté.
open(titi,"$fichier");
open(tex,"$fichier_tex");
open(rominet,">$fichier_tampon");
$index = 0;
while(<titi>) {
/$pattern/;
for $i (1..$fois) {
$a[$i] = $$i};
$moyenne = 0;
for $i (1..$fois) {
$moyenne = $moyenne + $a[$i]};
$moyenne = $moyenne / $fois;
$grp = 1;
if ($index == 41) {
$grp = 4
};
if ($index == 42 || $index == 43 || $index == 50) {
$grp = 2
};
if ($index >= 44 && $index <= 49) {
$grp = 3
};
$c = int(1000*(($moyenne/($grp*$theorie))-1))/10;
$moyenne = int(10*$moyenne)/10;
$ecart_type = 0;
for $i (1..$fois) {
$ecart_type = $ecart_type + abs($a[$i]-$moyenne)
*abs($a[$i]-$moyenne)};
$ecart_type = sqrt($ecart_type/$fois);
$d = int(1000*$ecart_type/($grp*$theorie))/10;
$ecart_type = int(10*$ecart_type)/10;
$ligne_tex = <tex>;
$ligne_tex =~ s/(.+)$/$1 \& $c \& $d/;
print rominet "$ligne_tex";
$index += 1
};
$theorie = int(10*$theorie)/10;
$ligne_tex = <tex>;
$ligne_tex =~ s/(.*)$/$1 $theorie \& \&\n/;
print rominet "$ligne_tex";
close(titi);
close(rominet);
close(tex);
&executer("mv $fichier_tampon $fichier_tex");
};
###################################################################
###################################################################
sub executer {
open(execution,"$_[0] |");
<execution>;
close(execution)
};
# +1 modulo 16
sub p16 {
local($i) = $_[0];
$i += 1;
if ($i == 16) {return 0};
return $i};
###################################################################
###################################################################
sub jouer_coup {
local($pos) = $_[0];
local($de1) = $_[1];
local($de2) = $_[2];
local($tirage1);
local($tirage2);
if ($de1 == $de2) {
$nombre_double +=1
};
if ($de1 != $de2) {
$nombre_double = 0
};
if ($nombre_double ==3) {
$nombre_double = 0;
$frequentation[40] +=1;
return 96
};
if ($pos >= 96) {
if ($pos == 96 && $de1 != $de2 && $prison == 1) {
$pos = 97}
elsif ($pos == 97 && $de1 != $de2 && $prison == 1) {
$pos = 98}
else {
$pos = 10 + $de1 + $de2}
}
else {
$pos += $de1 + $de2;
if ($pos >= 40) {
$pos -= 40
}
};
if ($pos <= 39) {
$frequentation[$pos] +=1};
if ($pos >= 96) {return $pos};
if ($case[$pos] eq "Caisse de Communauté") {
$tirage1 = $communaute[$pointeur_communaute];
$pointeur_communaute = &p16($pointeur_communaute);
if ($tirage1 == 95) {
if ($tirage_chance == 1) {
$tirage2 = $chance[$pointeur_chance];
$pointeur_chance = &p16($pointeur_chance);
if ($tirage2 == 96) {
$frequentation[40] +=1;
return 96};
if ($tirage2 == 99) {return $pos}
elsif ($tirage2 == -3) {
return &jouer_coup($pos,-3,0)}
else {
return &jouer_coup($tirage2,0,0)
}
}
else {
return $pos}
};
if ($tirage1 == 99) {
return $pos};
if ($tirage1 == 96) {
$frequentation[40] +=1;
return 96};
&jouer_coup($tirage1,0,0)
};
if ($case[$pos] eq "Carte Chance") {
$tirage2 = $chance[$pointeur_chance];
$pointeur_chance = &p16($pointeur_chance);
if ($tirage2 == 96) {
$frequentation[40] +=1;
return 96};
if ($tirage2 == 99) {return $pos}
elsif ($tirage2 == -3) {
return &jouer_coup($pos,-3,0)}
else {
return &jouer_coup($tirage2,0,0)}};
if ($case[$pos] eq \"Allez en Prison") {
$frequentation[40] +=1;
return 96};
return $pos
};
###################################################################
###################################################################
sub monopoly {
local(@communaute) = (1,96,0,95,
99,99,99,99,99,99,99,99,99,99,99,99);
local(@chance) = (96,24,11,39,15,0,-3,
99,99,99,99,99,99,99,99,99);
local($i);
local($j);
local($c1);
local($c2);
local($ligne);
local($tmp);
local($coup_reel);
local($position) = 0; # on commence sur la case départ.
# 96 est par convention le premier tour en prison.
# 97 est par convention le deuxi\`eme tour en prison.
# 98 est par convention le troisi\`eme tour en prison.
# 10 est la simple visite.
# 95 représente le tirage de la carte "Caisse de Communauté"
# qui propose de choisir entre une amende et le tirage d'une
# carte "Chance"
# 99 signifie : aucune action (au niveau des déplacements)
# -3 correspond \`a la carte "Chances" : reculez de trois cases.
local($pointeur_chance) = 0;
local($pointeur_communaute) = 0;
# dans le tableau ci-dessous, le 41-i\`eme élément
# représente la fréquentation en prison. Les 10
# derni\`eres cases sont fictives et correspondent \`a des
# groupes intéressants
# cf plus haut pour la signification.
local(@frequentation) = (0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,
0,0,0,0,0,0,0,0,0,0);
# Mélange des cartes :
print "Mélange des cartes Chances...\n";
srand;
$i = 0;
while($i<$melange){
$c1 = int(16*rand);
$c2 = int(16*rand);
$tmp = $chance[$c1];
$chance[$c1]=$chance[$c2];
$chance[$c2]=$tmp;
$i += 1};
print "Mélange des cartes Caisse de Communauté...\n";
srand;
$i = 0;
while($i<$melange){
$c1 = int(16*rand);
$c2 = int(16*rand);
$tmp = $communaute[$c1];
$communaute[$c1]=$communaute[$c2];
$communaute[$c2]=$tmp;
$i += 1};
print "C'est parti pour une série de $coup coups...\n";
$i = 0;
$j = 0;
$nombre_double = 0;
srand;
while($i<$coup) {
$i +=1; $j += 1;
if ($j == $duree_partie) {
$position = 0;
$j = 0
};
$position = &jouer_coup($position,int(6*rand) + 1,
int(6*rand) + 1)
};
# mettre les fréquentations des différents groupes ICI !
$frequentation[41] = $frequentation[5] + $frequentation[15] +
$frequentation[25] + $frequentation[35];
$frequentation[42] = $frequentation[12] + $frequentation[28];
$frequentation[43] = $frequentation[1] + $frequentation[3];
$frequentation[50] = $frequentation[37] + $frequentation[39];
$frequentation[44] = $frequentation[6] + $frequentation[8]
+ $frequentation[9];
$frequentation[45] = $frequentation[11] + $frequentation[13]
+ $frequentation[14];
$frequentation[46] = $frequentation[16] + $frequentation[18]
+ $frequentation[19];
$frequentation[47] = $frequentation[21] + $frequentation[23]
+ $frequentation[24];
$frequentation[48] = $frequentation[26] + $frequentation[27]
+ $frequentation[29];
$frequentation[49] = $frequentation[31] + $frequentation[32]
+ $frequentation[34];
print "Stockage des résultats intermédiaires...\n";
$ligne = 0;
open(titi,"$fichier");
open(rominet,">$fichier_tampon");
while(<titi>) {
s/(.+)$/$1 $frequentation[$ligne]/;
print rominet $_;
$ligne += 1
};
close(rominet);
close(titi);
&executer("cp $fichier_tampon $fichier");
<titi>;
close(titi);
$coup_reel = 0;
for $i (0..40) {
$coup_reel = $coup_reel + $frequentation[$i]
};
return($coup_reel)
};