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}
5 (cf. glossaire) de la sortie
6 dans le choix de la fonction à itérer (section~\ref{sub:prng:unif}).
7 L'approche est évaluée dans la dernière section.
10 \subsection{ Générateur de nombres pseudo aléatoires basé sur le chaos}\label{sub:prng:algo}
16 On peut penser à construire un générateur de nombres pseudo
17 aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
21 \KwIn{une fonction $f$, un nombre d'itérations $b$,
22 une configuration initiale $x^0$ ($n$ bits)}
23 \KwOut{une configuration $x$ ($n$ bits)}
25 $k\leftarrow b + \textit{Random}(b+1)$\;
26 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
29 $s\leftarrow{\textit{Random}(n)}$\;
30 %$s\leftarrow{\textit{XORshift}(n)}$\;
31 $x\leftarrow{F_f(s,x)}$\;
35 \caption{Algorithme de génération de nombres pseudo aléatoires
36 à l'aide de la fonction chaotique $G_f$}
41 Celui-ci prend en entrée: une fonction $f$;
42 un entier $b$, qui assure que le nombre d'itérations
43 est compris entre $b+1 $ et $2b+1$ et une configuration initiale $x^0$.
44 Il retourne une nouvelle configuration $x$.
45 En interne, il exploite un algorithme de génération
46 de nombres pseudo aléatoires
48 Cet algorithme est utilisée dans notre générateur pour construire la longueur
49 de la stratégie ainsi que les éléments qui la composent.
50 Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$
51 selon une \gls{distributionuniforme} (cf. glossaire) et utilise
52 \textit{XORshift} qui est une classe de générateurs de
53 nombres pseudo aléatoires
54 très rapides conçus par George Marsaglia.
56 % L'algorithme \textit{XORshift} exploite itérativement
57 % la fonction \og \gls{xor}\fg{} $\oplus$ (cf. glossaire)
58 % sur des nombres obtenus grâce à des \glspl{decalageDeBits} (cf. glossaire).
60 L'algorithme \textit{XORshift}
61 exploite itérativement l'opérateur $\oplus$
62 sur des nombres obtenus grâce à des \glspl{decalageDeBits} (cf. glossaire).
63 Cet opérateur, défini dans $\Bool^{n}$,
64 applique la fonction \og \gls{xor} \fg{} (cf. glossaire)
65 aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
66 Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné
71 \KwIn{la configuration interne $z$ (un mot de 32-bit)}
72 \KwOut{$y$ (un mot de 32-bits)}
73 $z\leftarrow{z\oplus{(z\ll13)}}$\;
74 $z\leftarrow{z\oplus{(z\gg17)}}$\;
75 $z\leftarrow{z\oplus{(z\ll5)}}$\;
79 \caption{Une boucle de l'algorithme de \textit{XORshift}}
85 Il reste à instancier une fonction $f$ dans
86 l'algorithme~\ref{CI Algorithm}
87 en adéquation avec l'approche développée
88 en section~\ref{sec:sccg}.
89 La section suivante montre comment l'uniformité de la distribution a
90 contraint cette instanciation.
92 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
94 Une matrice stochastique est une matrice carrée
95 dont tous les éléments sont positifs ou nuls et dont
96 la somme de chaque ligne
98 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
99 Enfin, une matrice stochastique de taille $n \times n$ est régulière
100 si la propriété suivante est établie:
101 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
103 On énonce enfin le théorème suivant liant les
104 \glspl{vecteurDeProbabilite} (cf. glossaire)
105 et les \glspl{chaineDeMarkov} (cf. glossaire):
109 \begin{Theo}\label{th}
110 Si $M$ est une matrice stochastique régulière, alors $M$
111 possède un unique vecteur stationnaire de probabilités $\pi$
113 De plus, si $\pi^0$ est un \gls{vecteurDeProbabilite}
115 la suite $(\pi^{k})^{k \in \Nats}$ par
116 $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$
117 alors la \gls{chaineDeMarkov} $\pi^k$
118 converge vers $\pi$ lorsque $k$ tend vers l'infini.
122 Montrons sur un exemple jouet à deux éléments
123 que ce théorème permet de vérifier si la sortie d'un générateur de
124 nombres pseudo aléatoires est uniformément distribuée ou non.
125 Soit alors $g$ et $h$ deux fonctions de $\Bool^2$
126 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
127 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
128 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
129 vérifient les hypothèses du théorème~\ref{th:Adrien}.
130 Leurs graphes d'itérations
131 sont donc fortement connexes, ce que l'on a pu déjà vérifier aux figures
132 \ref{fig:g:iter} et \ref{fig:h:iter}.
133 \textit{A priori}, ces deux fonctions pourraient être intégrées
134 dans un générateur de nombres pseudo aléatoires. Montrons que ce n'est pas le cas pour $g$ et
135 que cela l'est pour $h$.
138 Comme le générateur \textit{Random} possède une sortie uniformément
139 distribuée, la stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
141 pour tout sommet de $\Gamma(g)$ et de $\Gamma(h)$,
142 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant
143 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
144 En d'autres mots, $\Gamma(g)$ est le graphe orienté d'une chaîne de Markov.
145 Il est facile de vérifier que la \gls{matriceDeTransitions} (cf. glossaire)
147 est $M_g = \frac{1}{2} \check{M}_g$,
148 où $\check{M}_g$ est la \gls{matriceDAdjacence} (cf. glossaire) donnée en
149 figure~\ref{fig:g:incidence} (voir ci-après), et similairement pour $M_h$.
153 \subfloat[$\check{M}_g $.]{
154 \begin{minipage}{0.25\textwidth}
168 \label{fig:g:incidence}
170 \subfloat[$\check{M}_h $.]{
171 \begin{minipage}{0.25\textwidth}
184 \label{fig:h:incidence}
187 \caption{Graphe des fonctions candidates avec $n=2$}
191 Les deux matrices $M_g$ et $M_h$ sont stochastiques. Pour
192 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de
193 $M^5_g$ ni de $M^3_h$ n'est nul.
194 De plus, les vecteurs de probabilités
195 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
196 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$
197 vérifient $\pi_g M_g = \pi_g$ et
199 Alors d'après le théorème~\ref{th},
200 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a
201 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et
202 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$.
203 Ainsi la chaîne de Markov associé à $h$ tend vers une
204 distribution uniforme, contrairement à celle associée à $g$.
205 On en déduit que $g$ ne devrait pas être itérée dans
206 un générateur de nombres pseudo aléatoires.
208 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm},
209 pour peu que le nombre $b$ d'itérations entre deux mesures successives
210 de valeurs soit suffisamment grand de sorte que
211 le vecteur d’état de la chaîne de Markov
212 ait une distribution suffisamment proche de la distribution uniforme.
215 Considérons le lemme technique suivant:
216 \begin{Lemma}\label{lem:stoc}
217 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
218 $2^n\times 2^n$ définie par
219 $M = \frac{1}{n}\check{M}$.
220 Alors $M$ est une matrice stochastique régulière si et seulement si
221 $\Gamma(f)$ est fortement connexe.
225 On remarque tout d'abord que $M$
226 est une matrice stochastique par construction.
227 Supposons $M$ régulière.
228 Il existe donc $k$ tel que $M_{ij}^k>0$ pour chaque $i,j\in \llbracket
229 1; 2^n \rrbracket$. L'inégalité $\check{M}_{ij}^k>0$ est alors établie.
230 Puisque $\check{M}_{ij}^k$ est le nombre de chemins de $i$ à $j$ de longueur $k$
231 dans $\Gamma(f)$ et puisque ce nombre est positif, alors
232 $\Gamma(f)$ est fortement connexe.
234 Réciproquement si $\Gamma(f)$
235 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.
237 $k_{ij} \in \llbracket 1, 2^n \rrbracket$ tels que $\check{M}_{ij}^{k_{ij}}>0$.
238 Comme tous les multiples $l \times k_{ij}$ de $k_{ij}$ sont tels que
239 $\check{M}_{ij}^{l\times k_{ij}}>0$,
240 on peut conclure que, si
241 $k$ est le plus petit multiple commun de $\{k_{ij} \big/ i,j \in \llbracket 1, 2^n \rrbracket \}$ alors
242 $\forall i,j \in \llbracket 1, 2^n \rrbracket, \check{M}_{ij}^{k}>0$.
243 Ainsi, $\check{M}$ et donc $M$ sont régulières.
246 Ces résultats permettent formuler et de prouver le théorème suivant:
249 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\Gamma(f)$ son
250 graphe d'itérations , $\check{M}$ sa matrice d'adjacence
251 et $M$ une matrice $2^n\times 2^n$ définie comme dans le lemme précédent.
252 Si $\Gamma(f)$ est fortement connexe, alors
253 la sortie du générateur de nombres pseudo aléatoires détaillé par
254 l'algorithme~\ref{CI Algorithm} suit une loi qui
255 tend vers la distribution uniforme si
256 et seulement si $M$ est une matrice doublement stochastique.
259 $M$ est une matrice stochastique régulière (Lemme~\ref{lem:stoc})
260 qui a un unique vecteur de probabilités stationnaire
262 Soit $\pi$ défini par
263 $\pi = \left(\frac{1}{2^n}, \hdots, \frac{1}{2^n} \right)$.
264 On a $\pi M = \pi$ si et seulement si
265 la somme des valeurs de chaque colonne de $M$ est 1,
266 \textit{i.e.} si et seulement si
267 $M$ est doublement stochastique.
271 \subsection{Expérimentations}
273 On considère le graphe d'interactions $G(f)$ donné en figure~\ref{fig:G}.
274 Il vérifie le théorème~\ref{th:Adrien}:
275 toutes les fonctions $f$ possédant un tel graphe d'interactions
276 ont un graphe d'itérations $\Gamma(f)$ fortement connexe.
277 Pratiquement, un algorithme simple de satisfaction de contraintes
278 a trouvé 520 fonctions $f$ non isomorphes de graphe d'interactions $G(f)$,
279 dont seulement 16 d'entre elles possédent une matrice doublement stochastique.
281 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en
282 définissant les images des éléments de la liste
283 0, 1, 2,\ldots, 14, 15 en respectant l'ordre.
284 Expliquons enfin comment a été calculé le nombre de la troisième
285 colonne utilisé comme le paramètre $b$
286 dans l'algorithme~\ref{CI Algorithm}.
288 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur la base canonique de $\R^{2^{n}}$.
289 Chacun des éléments $v_j$, $1 \le j \le 2^n$,
290 du vecteur $e_i M_f^t$ représente la probabilité
291 d'être dans la configuration $j$ après $t$ étapes du processus de Markov
292 associé à $\Gamma(f)$ en partant de la configuration $i$.
294 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
295 \}$ représente le plus petit nombre d'itérations où la distance de
296 ce vecteur au vecteur $\pi=(\frac{1}{2^n},\ldots,\frac{1}{2^n})$
297 -- autrement dit, où la déviation par rapport à la distribution uniforme --
299 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
302 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket}
305 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
312 \subfloat[Graphe d'interactions]{
313 \begin{minipage}{0.20\textwidth}
315 \includegraphics[width=3.5cm]{images/Gi.pdf}
320 \subfloat[Fonctions doublement stochastiques]{
321 \begin{minipage}{0.75\textwidth}
324 \begin{tabular}{|c|c|c|}
326 {Nom}& {Définition}&{$b$} \\
328 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0 & 206\\
330 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1
333 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
336 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
339 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
342 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
345 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
348 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
351 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
354 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
357 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
360 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
363 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
366 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
369 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
372 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
379 \label{fig:listfonction}
382 \caption{Candidates pour le générateur avec $n=4$}
386 La qualité des séquences aléatoires a été évaluée à travers la suite
387 de tests statistiques développée pour les générateurs de nombres
388 pseudo aléatoires par le
389 \emph{National Institute of Standards and Technology} (NIST).
390 % Pour les 15 tests, le seuil $\alpha$ est fixé à $1\%$:
392 % qui est plus grande que $1\%$ signifie
393 % que la chaîne est considérée comme aléatoire avec une confiance de $99\%$.
394 % Le tableau~\ref{fig:TEST} donne une vision synthétique de toutes
395 % les expérimentations.
396 L'expérience a montré notamment que toutes ces fonctions
397 passent avec succès cette batterie de tests.
404 % \begin{tabular}{|*{17}{c|}}
406 % {Propriété}& $\mathcal{F}_{1}$ &$\mathcal{F}_{2}$ &$\mathcal{F}_{3}$ &$\mathcal{F}_{4}$ &$\mathcal{F}_{5}$ &$\mathcal{F}_{6}$ &$\mathcal{F}_{7}$ &$\mathcal{F}_{8}$ &$\mathcal{F}_{9}$ &$\mathcal{F}_{10}$ &$\mathcal{F}_{11}$ &$\mathcal{F}_{12}$ &$\mathcal{F}_{13}$ &$\mathcal{F}_{14}$ &$\mathcal{F}_{15}$ &$\mathcal{F}_{16}$ \\
408 % Fréquence &77.9 &15.4 &83.4 &59.6 &16.3 &38.4 &20.2 &29.0 &77.9 &21.3 &65.8 &85.1 &51.4 &35.0 &77.9 &92.4 \\
410 % Fréquence / bloc &88.3 &36.7 &43.7 &81.7 &79.8 &5.9 &19.2 &2.7 &98.8 &1.0 &21.3 &63.7 &1.4 &7.6 &99.1 &33.5 \\
412 % Somme cummulée &76.4 &86.6 &8.7 &66.7 &2.2 &52.6 &20.8 &80.4 &9.8 &54.0 &73.6 &80.1 &60.7 &79.7 &76.0 &44.7 \\
414 % Exécution &5.2 &41.9 &59.6 &89.8 &23.7 &76.0 &77.9 &79.8 &45.6 &59.6 &89.8 &2.4 &96.4 &10.9 &72.0 &11.5 \\
416 % Longue exécution &21.3 &93.6 &69.9 &23.7 &33.5 &30.4 &41.9 &43.7 &30.4 &17.2 &41.9 &51.4 &59.6 &65.8 &11.5 &61.6 \\
418 % Rang &1.0 &41.9 &35.0 &45.6 &51.4 &20.2 &31.9 &83.4 &89.8 &38.4 &61.6 &4.0 &21.3 &69.9 &47.5 &95.6 \\
420 % Fourrier Rapide &40.1 &92.4 &97.8 &86.8 &43.7 &38.4 &76.0 &57.5 &36.7 &35.0 &55.4 &57.5 &86.8 &76.0 &31.9 &7.6 \\
422 % Sans superposition &49.0 &45.7 &50.5 &51.0 &48.8 &51.2 &51.6 &50.9 &50.9 &48.8 &45.5 &47.3 &47.0 &49.2 &48.6 &46.4 \\
424 % Avec Superposition &27.6 &10.9 &53.4 &61.6 &16.3 &2.7 &59.6 &94.6 &88.3 &55.4 &76.0 &23.7 &47.5 &91.1 &65.8 &81.7 \\
426 % Universelle &24.9 &35.0 &72.0 &51.4 &20.2 &74.0 &40.1 &23.7 &9.1 &72.0 &4.9 &13.7 &14.5 &1.8 &93.6 &65.8 \\
428 % Entropie approchée &33.5 &57.5 &65.8 &53.4 &26.2 &98.3 &53.4 &63.7 &38.4 &6.7 &53.4 &19.2 &20.2 &27.6 &67.9 &88.3 \\
430 % Suite aléatoire &29.8 &35.7 &40.9 &36.3 &54.8 &50.8 &43.5 &46.0 &39.1 &40.8 &29.6 &42.0 &34.8 &33.8 &63.0 &46.3 \\
432 % Suite aléatoire variante &32.2 &40.2 &23.0 &39.6 &47.5 &37.2 &56.9 &54.6 &53.3 &31.5 &23.0 &38.1 &52.3 &57.1 &47.7 &40.8 \\
434 % Série &56.9 &58.5 &70.4 &73.2 &31.3 &45.9 &60.8 &39.9 &57.7 &21.2 &6.4 &15.6 &44.7 &31.4 &71.7 &49.1 \\
436 % Complexité linéaire &24.9 &23.7 &96.4 &61.6 &83.4 &49.4 &49.4 &18.2 &3.5 &76.0 &24.9 &97.2 &38.4 &38.4 &1.1 &8.6 \\
440 % \caption{Test de NIST réalisé sur des instances de générateurs}\label{fig:TEST}