Vous êtes ici : Accueil > Equipes de travail > LaTeX > Le rat et le fromage
Publié : 26 mai 2011

Le rat et le fromage

Arbres et Probabilités

La rédaction du code Tikz/LaTeX associé aux diagrammes en arbre ou plus généralement aux graphes en rebute sans doute plus d’un. Le manuel Tikz n’est pas avare d’exemples sur le sujet [1], mais un manuel n’est jamais conçu pour réaliser le travail à la place de l’utilisateur ! Il faut bien avouer que le code générant un arbre a (presque) nécessairement un caractère ou récursif ou comportant de nombreux emboîtements, ce qui rend la lecture, pardon le décryptage, ardu ! Le tout est de s’y mettre.

Voici donc un exemple pratique qui aidera celles et ceux qui se lanceraient dans l’aventure. Il s’agit d’un exercice puisé dans le manuel “Transmath Terminale D”, R.Barra- J.Malaval- A.Tricroire, Nathan 1987.

Au cours d’une expérience sur le comportement des animaux, des rats doivent choisir entre quatres portes d’apparences identiques, dont l’une est dite bonne (elle donne dans une cage contenant un fromage) et les trois autres mauvaises (elles donnent sur des cages vides).

PDF

A chaque fois que le rat choisit une mauvaise porte, il est reconduit à son point de départ et ce jusqu’à ce qu’il trouve la bonne porte.
Supposons que le rat ait une mémoire parfaite. A chaque nouvelle expérience, il évite les portes choisies auparavant et il choisit de façons équiprobables entre les portes qu’il n’a pas encore essayées.

Déterminer la probabilité de l’événement S_k="le rat sort à la k-ième fois".

Cet exercice plaisant est en général apprécié des élèves. La solution n’appelle pas de commentaire particuliers. C’est bien sûr le code associé à l’arbre qui nous intéressera plus particulièrement [2] :

PDF

\begin{tikzpicture}[
        scale=0.75,
        level 1/.style={sibling distance=60mm,level distance=30mm},
        level 2/.style={sibling distance=20mm,level distance=30mm},
        level 3/.style={sibling distance=10mm,level distance=20mm},
        MyNode/.style={fill=brown!40!yellow!30!,thick,draw=black,rounded corners,align=center},
        MyNodeA/.style={fill=blue!10!,thick,draw=black,rounded corners,align=center},
        MyProba/.style={black},
        MyEdge/.style={<->,>=triangle 45,dashed},
        edge from parent/.style={blue,thick,draw,font=\footnotesize},
        ]
        \node[MyNode,text width=0.5cm,align=center](racine) {$\times$}[grow'=east]
                child {node[MyNodeA](ma){${A}$ }  
                        edge from parent node[left]{$1/4$}
                        }
                child {node[MyNode](mb){$B$}
                        child {node[MyNodeA]{$A$} edge from parent node[above]{$1/3$}}
                        child {node[MyNode]{$C$}
                                child {node[MyNodeA]{$A$} edge from parent node[above]{$1/2$}}
                                child {node[MyNode]{$D$}
                                        child {node[MyNodeA]{$A$} edge from parent node[above]{$1$}}
                                        edge from parent node[below]{$1/2$}
                                        }
                                edge from parent node[above]{$1/3$}
                                }
                        child {node[MyNode]{$D$}
                                child {node[MyNodeA]{$A$} edge from parent node[above]{$1/2$}}
                                child {node[MyNode]{$C$}
                                        child {node[MyNodeA]{$A$} edge from parent node[above]{$1$}}
                                        edge from parent node[below]{$1/2$}
                                        }
                                edge from parent node[above]{$1/3$}
                                }
                        edge from parent node[left]{$1/4$}
                        }
                child{node[MyNode] (mc){$C$}
                        child {node[MyNodeA](na){$A$} edge from parent node[above]{$1/3$}}
                        child {node[MyNode](nc){$B$}
                                child {node[MyNodeA]{$A$} edge from parent node[above]{$1/2$}}
                                child {node[MyNode]{$D$}
                                        child {node[MyNodeA]{$A$} edge from parent node[above]{$1$}}
                                        edge from parent node[below]{$1/2$}
                                        }
                                edge from parent node[above]{$1/3$}
                                }
                        child {node[MyNode](nd){$D$}
                                child {node[MyNodeA]{$A$} edge from parent node[above]{$1/2$}}
                                child {node[MyNode]{$B$}
                                        child {node[MyNodeA]{$A$} edge from parent node[above]{$1$}}
                                        edge from parent node[below]{$1/2$}
                                        }
                                edge from parent node[above]{$1/3$}
                                }
                        edge from parent node[left]{$1/4$}
                        }
                child{node[MyNode](md){$D$}
                        child {node[MyNodeA](na){$A$} edge from parent node[above]{$1/3$}}
                        child {node[MyNode](nc){$B$}
                                child {node[MyNodeA]{$A$} edge from parent node[above]{$1/2$}}
                                child {node[MyNode]{$C$}
                                        child {node[MyNodeA]{$A$} edge from parent node[above]{$1$}}
                                        edge from parent node[below]{$1/2$}
                                        }
                                edge from parent node[above]{$1/3$}
                                }
                        child {node[MyNode](nd){$C$}
                                child {node[MyNodeA]{$A$} edge from parent node[above]{$1/2$}}
                                child {node[MyNode]{$B$}
                                        child {node[MyNodeA]{$A$} edge from parent node[above]{$1$}}
                                        edge from parent node[below]{$1/2$}
                                        }
                                edge from parent node[above]{$1/3$}
                                }
                        edge from parent node[left]{$1/4$}
                        }
                ;
\end{tikzpicture}

On observera

  • la structure emboîtée des nœuds toujours liés par une relation Parent-Enfant (child)
  • la manière dont les probabilités sont placées sur les branches : ce sont des “nodes” [3] qui remontent de l’enfant vers le parent (edge from parent)
  • la facilité avec laquelle on peut régler l’écartement entre noeuds d’un même niveau (sibling distance = distance entre jumeaux) et la distance entre niveaux (level distance). Tout ceci pour éviter le chevauchement des branches et des noeuds.
  • la possibilité de définir de nombreux styles au sein d’une même figure (ici un arbre) mais c’est là une caractéristique très générale de Tikz qui rappelle les CSS de l’Html.

Documents joints

Notes

[1Section 16 : Nodes and Edges , Section 18 : Making Trees Grow

[2on suppose que le fromage est derrière la porte A

[3Attention, sous Tikz, node a un sens plus général que noeud d’un arbre