1 Cette section présente une application directe de la théorie développée ci-avant
2 à la génération de nombres pseudo-aléatoires. On présente tout d'abord le générateur
3 basé sur des fonctions chaotiques (section~\ref{sub:prng:algo}),
4 puis comment intégrer la contrainte de \gls{distributionuniforme} (cf. glossaire)
6 dans le choix de la fonction à itérer (section~\ref{sub:prng:unif}).
9 \subsection{Générateur de nombres pseudo-aléatoires basé sur le chaos}
12 On peut penser à construire un générateur de nombres pseudo-aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
16 \KwIn{une fonction $f$, un nombre d'itérations $b$,
17 une configuration initiale $x^0$ ($n$ bits)}
18 \KwOut{une configuration $x$ ($n$ bits)}
20 $k\leftarrow b + \textit{Random}(b+1)$\;
21 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
24 $s\leftarrow{\textit{Set}(\textit{Random}(2^n))}$\;
25 %$s\leftarrow{\textit{XORshift}(n)}$\;
26 $x\leftarrow{F_f(s,x)}$\;
30 \caption{Algorithme de génération de nombres pseudo-aléatoires
31 à l'aide de la fonction chaotique $G_f$.}
36 Celui-ci prend en entrée: une fonction $f$; un entier $b$, qui assure que le
37 nombre d'itérations est compris entre $b+1 $ et $2b+1$ et une configuration
38 initiale $x^0$. Il retourne une nouvelle configuration $x$. En interne, il
39 exploite la fonction \linebreak $\textit{Set} : \{1,\ldots,2^n\} \rightarrow
40 \mathcal{P}(\{1,\ldots n\})$ qui donne l'ensemble dont la fonction
41 caractéristique serait représentée par le nombre donné en argument et un
42 algorithme de génération de nombres pseudo-aléatoires \textit{Random}$(l)$. Cet
43 algorithme est utilisé dans notre générateur pour construire la longueur de la
44 stratégie ainsi que les éléments qui la composent. Pratiquement, il retourne
45 des entiers dans $\llbracket 1 ; l \rrbracket$ selon une
46 \gls{distributionuniforme} %(cf. glossaire)
47 et utilise \textit{XORshift} qui est
48 une classe de générateurs de nombres pseudo-aléatoires très rapides conçus par
49 George Marsaglia~\cite{Marsaglia98}.
51 % L'algorithme \textit{XORshift} exploite itérativement
52 % la fonction \og \gls{xor}\fg{} $\oplus$ (cf. glossaire)
53 % sur des nombres obtenus grâce à des \glspl{decalageDeBits} (cf. glossaire).
55 L'algorithme \textit{XORshift}
56 exploite itérativement l'opérateur $\oplus$
57 sur des nombres obtenus grâce à des \glspl{decalageDeBits} (cf. glossaire)
59 Cet opérateur, défini dans $\Bool^{n}$,
60 applique la fonction \og \gls{xor} \fg{} (cf. glossaire)
61 aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
62 Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} détaillé
67 \KwIn{la configuration interne $z$ (un mot de 32-bit)}
68 \KwOut{$y$ (un mot de 32-bits)}
69 $z\leftarrow{z\oplus{(z\ll13)}}$\;
70 $z\leftarrow{z\oplus{(z\gg17)}}$\;
71 $z\leftarrow{z\oplus{(z\ll5)}}$\;
75 \caption{Une boucle de l'algorithme de \textit{XORshift}.}
79 Il reste à instancier une fonction $f$ dans
80 l'algorithme~\ref{CI Algorithm}.
81 %en adéquation avec l'approche développée
82 %en section~\ref{sec:sccg}.
83 La section suivante montre comment l'uniformité de la distribution
84 contraint cette instanciation.
86 \subsection{Un générateur à sortie uniformément distribuée}
89 Une matrice \emph{stochastique} est une matrice carrée
90 dont tous les éléments sont positifs ou nuls et dont
91 la somme de chaque ligne
93 Une matrice est \emph{doublement stochastique} si elle est stochastique et que la somme de chaque colonne est 1.
94 Enfin, une matrice stochastique de taille $n \times n$ est \emph{régulière}
95 si la propriété suivante est établie:
96 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
98 On énonce enfin le théorème suivant liant les
99 \glspl{vecteurDeProbabilite} (cf. glossaire)
100 et les \glspl{chaineDeMarkov} (cf. glossaire)
104 \begin{Theo}\label{th}
105 Si $M$ est une matrice stochastique régulière, alors $M$
106 possède un unique vecteur stationnaire de probabilités $\pi$
108 De plus, si $\pi^0$ est un \gls{vecteurDeProbabilite}
110 la suite $(\pi^{k})^{k \in \Nats}$ par
111 $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$
112 alors la \gls{chaineDeMarkov} $\pi^k$
113 converge vers $\pi$ lorsque $k$ tend vers l'infini.
117 Montrons sur un exemple jouet à deux éléments
118 que ce théorème permet de vérifier si la sortie d'un générateur de
119 nombres pseudo-aléatoires est uniformément distribuée ou non.
120 Soit alors $g$ et $h$ deux fonctions de $\Bool^2$
121 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
122 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
123 % Leurs graphes d'interactions donnés en figures \ref{fig:g:inter} et \ref{fig:h:inter}
124 % vérifient les hypothèses du théorème~\ref{th:Adrien}.
125 Leurs graphes d'itérations
126 sont fortement connexes, ce que l'on a pu déjà vérifier aux figures
127 \ref{fig:g:iter} et \ref{fig:h:iter}.
128 \textit{A priori}, ces deux fonctions pourraient être intégrées
129 dans un générateur de nombres pseudo-aléatoires. Montrons que ce n'est pas le cas pour $g$ et
130 que cela l'est pour $h$.
132 Comme le générateur \textit{Random} possède une sortie uniformément
133 distribuée, la stratégie est uniforme sur $\llbracket 1, 2^2 \rrbracket$,
135 pour tout sommet de $\Gamma(g)$ et de $\Gamma(h)$,
136 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant
137 de ce sommet, une probabilité $1/4$ d'être celui qui sera traversé.
138 En d'autres mots, $\Gamma(g)$ est le graphe orienté d'une chaîne de Markov.
139 Il est facile de vérifier que la \gls{matriceDeTransitions} (cf. glossaire)
141 est $M_g = \frac{1}{4} \check{M}_g$,
142 où $\check{M}_g$ est la \gls{matriceDAdjacence} (cf. glossaire)
143 donnée en figure~\ref{fig:g:incidence} (voir ci-après), et similairement pour $M_h$.
147 \subfloat[$\check{M}_g $]{
148 \begin{minipage}{0.25\textwidth}
162 \label{fig:g:incidence}
164 \subfloat[$\check{M}_h $]{
165 \begin{minipage}{0.25\textwidth}
178 \label{fig:h:incidence}
181 \caption{Graphe des fonctions candidates avec $n=2$.}
185 Les deux matrices $M_g$ et $M_h$ sont stochastiques. Pour
186 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de
187 $M^2_g$ ni de $M^2_h$ n'est nul.
188 De plus, les vecteurs de probabilités
189 $\pi_g=(\frac{1}{3}, \frac{1}{6},\frac{1}{3},\frac{1}{6})$ et
190 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$
191 vérifient $\pi_g M_g = \pi_g$ et
193 Alors d'après le théorème~\ref{th},
194 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a
195 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et
196 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$.
197 Ainsi, la chaîne de Markov associée à $h$ tend vers une
198 distribution uniforme, contrairement à celle associée à $g$.
199 On en déduit que $g$ ne devrait pas être itérée dans
200 un générateur de nombres pseudo-aléatoires.
202 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm},
203 pour peu que le nombre $b$ d'itérations entre deux mesures successives
204 de valeurs soit suffisamment grand de sorte que
205 le vecteur d'état de la chaîne de Markov
206 ait une distribution suffisamment proche de la distribution uniforme.
209 Considérons le lemme technique suivant:
210 \begin{Lemma}\label{lem:stoc}
211 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\Gamma(f)$ son graphe d'itérations, $\check{M}$ la matrice d'adjacence de $\Gamma(f)$, et $M$ la matrice
212 $2^n\times 2^n$ définie par
213 $M = \frac{1}{n}\check{M}$.
214 Alors $M$ est une matrice stochastique régulière si et seulement si
215 $\Gamma(f)$ est fortement connexe.
219 On remarque tout d'abord que $M$
220 est une matrice stochastique par construction.
221 Supposons $M$ régulière.
222 Il existe donc $k$ tel que $M_{ij}^k>0$ pour chaque $i,j\in \llbracket
223 1; 2^n \rrbracket$. L'inégalité $\check{M}_{ij}^k>0$ est alors établie.
224 Puisque $\check{M}_{ij}^k$ est le nombre de chemins de $i$ à $j$ de longueur $k$
225 dans $\Gamma(f)$ et puisque ce nombre est positif, alors
226 $\Gamma(f)$ est fortement connexe.
228 Réciproquement si $\Gamma(f)$
229 est fortement connexe, alors pour tous les sommets $i$ et $j$, un chemin peut être construit pour atteindre $j$ depuis $i$ en au plus $2^n$ étapes.
231 $k_{ij} \in \llbracket 1, 2^n \rrbracket$ tel que $\check{M}_{ij}^{k_{ij}}>0$.
232 Comme tous les multiples $l \times k_{ij}$ de $k_{ij}$ sont tels que
233 $\check{M}_{ij}^{l\times k_{ij}}>0$,
234 on peut conclure que, si
235 $k$ est le plus petit multiple commun de $\{k_{ij} \big/ i,j \in \llbracket 1, 2^n \rrbracket \}$ alors
236 $\forall i,j \in \llbracket 1, 2^n \rrbracket, \check{M}_{ij}^{k}>0$.
237 Ainsi, $\check{M}$ et donc $M$ sont régulières.
240 Ces résultats permettent de formuler et de prouver le théorème suivant:
243 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\Gamma(f)$ son
244 graphe d'itérations, $\check{M}$ sa matrice d'adjacence
245 et $M$ une matrice $2^n\times 2^n$ définie comme dans le lemme précédent.
246 Si $\Gamma(f)$ est fortement connexe, alors
247 la sortie du générateur de nombres pseudo-aléatoires détaillé par
248 l'algorithme~\ref{CI Algorithm} suit une loi qui
249 tend vers la distribution uniforme si
250 et seulement si $M$ est une matrice doublement stochastique.
253 $M$ est une matrice stochastique régulière (lemme~\ref{lem:stoc})
254 qui a un unique vecteur de probabilités stationnaire
256 Soit $\pi$ défini par
257 $\pi = \left(\frac{1}{2^n}, \hdots, \frac{1}{2^n} \right)$.
258 On a $\pi M = \pi$ si et seulement si
259 la somme des valeurs de chaque colonne de $M$ est 1,
260 \textit{i.e.} si et seulement si
261 $M$ est doublement stochastique.
266 %%% TeX-master: "main"