1 Au bout d'un nombre $b$ d'itérations,
2 si la fonction, notée $G_{f_u}$ (ou bien $G_{f_g}$)
3 présentée au chapitre~\ref{chap:carachaos},
4 a de \og bonnes\fg{} propriétés chaotiques,
5 le mot $x^b$ devrait \og sembler ne plus dépendre\fg{} de $x^0$.
6 On peut penser à exploiter une de ces fonctions $G_f$
7 comme un générateur aléatoire.
8 Enfin, un bon générateur aléatoire se doit de
9 fournir des nombres selon une {distributionuniforme}
10 La suite de ce document donnera,
11 dans le cas où le graphe d'itérations est fortement connexe,
12 une condition nécessaire est suffisante pour que
13 cette propriété soit satisfaite.
16 Cette section présente une application directe de la théorie développée ci-avant
17 à la génération de nombres pseudo aléatoires.
18 On présente tout d'abord le générateur
19 basé sur des fonctions chaotiques (section~\ref{sub:prng:algo}),
20 puis comment intégrer la contrainte de distributionuniforme
22 dans le choix de la fonction à itérer (section~\ref{sub:prng:unif}).
23 L'approche est évaluée dans la dernière section.
27 \subsection{ Générateur de nombres pseudo aléatoires basé sur le chaos}\label{sub:prng:algo}
33 On peut penser à construire un générateur de nombres pseudo
34 aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
38 \KwIn{une fonction $f$, un nombre d'itérations $b$,
39 une configuration initiale $x^0$ ($n$ bits)}
40 \KwOut{une configuration $x$ ($n$ bits)}
42 $k\leftarrow b + \textit{Random}(b+1)$\;
43 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
46 $s\leftarrow{\textit{Random}(n)}$\;
47 %$s\leftarrow{\textit{XORshift}(n)}$\;
48 $x\leftarrow{F_f(s,x)}$\;
52 \caption{Algorithme de génération de nombres pseudo aléatoires
53 à l'aide de la fonction chaotique $G_f$}
58 Celui-ci prend en entrée: une fonction $f$;
59 un entier $b$, qui assure que le nombre d'itérations
60 est compris entre $b+1 $ et $2b+1$ et une configuration initiale $x^0$.
61 Il retourne une nouvelle configuration $x$.
62 En interne, il exploite un algorithme de génération
63 de nombres pseudo aléatoires
65 Cet algorithme est utilisée dans notre générateur pour construire la longueur
66 de la stratégie ainsi que les éléments qui la composent.
67 Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$
68 selon une distributionuniforme et utilise
69 \textit{XORshift} qui est une classe de générateurs de
70 nombres pseudo aléatoires
71 très rapides conçus par George Marsaglia.
73 % L'algorithme \textit{XORshift} exploite itérativement
74 % la fonction \og {xor}\fg{} $\oplus$ (cf. glossaire)
75 % sur des nombres obtenus grâce à des pl{decalageDeBits} (cf. glossaire).
77 L'algorithme \textit{XORshift}
78 exploite itérativement l'opérateur $\oplus$
79 sur des nombres obtenus grâce à des decalages de bits.
80 Cet opérateur, défini dans $\Bool^{n}$,
81 applique la fonction \og xor \fg{}
82 aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
83 Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné
88 \KwIn{la configuration interne $z$ (un mot de 32-bit)}
89 \KwOut{$y$ (un mot de 32-bits)}
90 $z\leftarrow{z\oplus{(z\ll13)}}$\;
91 $z\leftarrow{z\oplus{(z\gg17)}}$\;
92 $z\leftarrow{z\oplus{(z\ll5)}}$\;
96 \caption{Une boucle de l'algorithme de \textit{XORshift}}
102 Il reste à instancier une fonction $f$ dans
103 l'algorithme~\ref{CI Algorithm}
104 en adéquation avec l'approche développée
105 en section~\ref{sec:sccg}.
106 La section suivante montre comment l'uniformité de la distribution a
107 contraint cette instanciation.
109 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
111 Une matrice stochastique est une matrice carrée
112 dont tous les éléments sont positifs ou nuls et dont
113 la somme de chaque ligne
115 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
116 Enfin, une matrice stochastique de taille $n \times n$ est régulière
117 si la propriété suivante est établie:
118 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
120 On énonce enfin le théorème suivant liant les
122 et les chaineDeMarkov:
126 \begin{Theo}\label{th}
127 Si $M$ est une matrice stochastique régulière, alors $M$
128 possède un unique vecteur stationnaire de probabilités $\pi$
130 De plus, si $\pi^0$ est un {vecteurDeProbabilite}
132 la suite $(\pi^{k})^{k \in \Nats}$ par
133 $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$
134 alors la {chaineDeMarkov} $\pi^k$
135 converge vers $\pi$ lorsque $k$ tend vers l'infini.
139 Montrons sur un exemple jouet à deux éléments
140 que ce théorème permet de vérifier si la sortie d'un générateur de
141 nombres pseudo aléatoires est uniformément distribuée ou non.
142 Soit alors $g$ et $h$ deux fonctions de $\Bool^2$
143 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
144 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
145 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
146 vérifient les hypothèses du théorème~\ref{th:Adrien}.
147 Leurs graphes d'itérations
148 sont donc fortement connexes, ce que l'on a pu déjà vérifier aux figures
149 \ref{fig:g:iter} et \ref{fig:h:iter}.
150 \textit{A priori}, ces deux fonctions pourraient être intégrées
151 dans un générateur de nombres pseudo aléatoires. Montrons que ce n'est pas le cas pour $g$ et
152 que cela l'est pour $h$.
155 Comme le générateur \textit{Random} possède une sortie uniformément
156 distribuée, la stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
158 pour tout sommet de $\Gamma(g)$ et de $\Gamma(h)$,
159 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant
160 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
161 En d'autres mots, $\Gamma(g)$ est le graphe orienté d'une chaîne de Markov.
162 Il est facile de vérifier que la {matriceDeTransitions}
164 est $M_g = \frac{1}{2} \check{M}_g$,
165 où $\check{M}_g$ est la {matriceDAdjacence} donnée en
166 figure~\ref{fig:g:incidence} (voir ci-après), et similairement pour $M_h$.
170 \subfloat[$\check{M}_g $.]{
171 \begin{minipage}{0.25\textwidth}
185 \label{fig:g:incidence}
187 \subfloat[$\check{M}_h $.]{
188 \begin{minipage}{0.25\textwidth}
201 \label{fig:h:incidence}
204 \caption{Graphe des fonctions candidates avec $n=2$}
208 Les deux matrices $M_g$ et $M_h$ sont stochastiques. Pour
209 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de
210 $M^5_g$ ni de $M^3_h$ n'est nul.
211 De plus, les vecteurs de probabilités
212 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
213 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$
214 vérifient $\pi_g M_g = \pi_g$ et
216 Alors d'après le théorème~\ref{th},
217 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a
218 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et
219 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$.
220 Ainsi la chaîne de Markov associé à $h$ tend vers une
221 distribution uniforme, contrairement à celle associée à $g$.
222 On en déduit que $g$ ne devrait pas être itérée dans
223 un générateur de nombres pseudo aléatoires.
225 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm},
226 pour peu que le nombre $b$ d'itérations entre deux mesures successives
227 de valeurs soit suffisamment grand de sorte que
228 le vecteur d’état de la chaîne de Markov
229 ait une distribution suffisamment proche de la distribution uniforme.
232 Considérons le lemme technique suivant:
233 \begin{Lemma}\label{lem:stoc}
234 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
235 $2^n\times 2^n$ définie par
236 $M = \frac{1}{n}\check{M}$.
237 Alors $M$ est une matrice stochastique régulière si et seulement si
238 $\Gamma(f)$ est fortement connexe.
242 On remarque tout d'abord que $M$
243 est une matrice stochastique par construction.
244 Supposons $M$ régulière.
245 Il existe donc $k$ tel que $M_{ij}^k>0$ pour chaque $i,j\in \llbracket
246 1; 2^n \rrbracket$. L'inégalité $\check{M}_{ij}^k>0$ est alors établie.
247 Puisque $\check{M}_{ij}^k$ est le nombre de chemins de $i$ à $j$ de longueur $k$
248 dans $\Gamma(f)$ et puisque ce nombre est positif, alors
249 $\Gamma(f)$ est fortement connexe.
251 Réciproquement si $\Gamma(f)$
252 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.
254 $k_{ij} \in \llbracket 1, 2^n \rrbracket$ tels que $\check{M}_{ij}^{k_{ij}}>0$.
255 Comme tous les multiples $l \times k_{ij}$ de $k_{ij}$ sont tels que
256 $\check{M}_{ij}^{l\times k_{ij}}>0$,
257 on peut conclure que, si
258 $k$ est le plus petit multiple commun de $\{k_{ij} \big/ i,j \in \llbracket 1, 2^n \rrbracket \}$ alors
259 $\forall i,j \in \llbracket 1, 2^n \rrbracket, \check{M}_{ij}^{k}>0$.
260 Ainsi, $\check{M}$ et donc $M$ sont régulières.
263 Ces résultats permettent formuler et de prouver le théorème suivant:
266 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\Gamma(f)$ son
267 graphe d'itérations , $\check{M}$ sa matrice d'adjacence
268 et $M$ une matrice $2^n\times 2^n$ définie comme dans le lemme précédent.
269 Si $\Gamma(f)$ est fortement connexe, alors
270 la sortie du générateur de nombres pseudo aléatoires détaillé par
271 l'algorithme~\ref{CI Algorithm} suit une loi qui
272 tend vers la distribution uniforme si
273 et seulement si $M$ est une matrice doublement stochastique.
276 $M$ est une matrice stochastique régulière (Lemme~\ref{lem:stoc})
277 qui a un unique vecteur de probabilités stationnaire
279 Soit $\pi$ défini par
280 $\pi = \left(\frac{1}{2^n}, \hdots, \frac{1}{2^n} \right)$.
281 On a $\pi M = \pi$ si et seulement si
282 la somme des valeurs de chaque colonne de $M$ est 1,
283 \textit{i.e.} si et seulement si
284 $M$ est doublement stochastique.
288 \subsection{Expérimentations}
290 On considère le graphe d'interactions $G(f)$ donné en figure~\ref{fig:G}.
291 Il vérifie le théorème~\ref{th:Adrien}:
292 toutes les fonctions $f$ possédant un tel graphe d'interactions
293 ont un graphe d'itérations $\Gamma(f)$ fortement connexe.
294 Pratiquement, un algorithme simple de satisfaction de contraintes
295 a trouvé 520 fonctions $f$ non isomorphes de graphe d'interactions $G(f)$,
296 dont seulement 16 d'entre elles possédent une matrice doublement stochastique.
298 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en
299 définissant les images des éléments de la liste
300 0, 1, 2,\ldots, 14, 15 en respectant l'ordre.
301 Expliquons enfin comment a été calculé le nombre de la troisième
302 colonne utilisé comme le paramètre $b$
303 dans l'algorithme~\ref{CI Algorithm}.
305 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur la base canonique de $\R^{2^{n}}$.
306 Chacun des éléments $v_j$, $1 \le j \le 2^n$,
307 du vecteur $e_i M_f^t$ représente la probabilité
308 d'être dans la configuration $j$ après $t$ étapes du processus de Markov
309 associé à $\Gamma(f)$ en partant de la configuration $i$.
311 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
312 \}$ représente le plus petit nombre d'itérations où la distance de
313 ce vecteur au vecteur $\pi=(\frac{1}{2^n},\ldots,\frac{1}{2^n})$
314 -- autrement dit, où la déviation par rapport à la distribution uniforme --
316 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
319 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket}
322 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
329 \subfloat[Graphe d'interactions]{
330 \begin{minipage}{0.20\textwidth}
332 \includegraphics[width=3.5cm]{images/Gi.pdf}
337 \subfloat[Fonctions doublement stochastiques]{
338 \begin{minipage}{0.75\textwidth}
341 \begin{tabular}{|c|c|c|}
343 {Nom}& {Définition}&{$b$} \\
345 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0 & 206\\
347 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1
350 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
353 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
356 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
359 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
362 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
365 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
368 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
371 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
374 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
377 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
380 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
383 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
386 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
389 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
396 \label{fig:listfonction}
399 \caption{Candidates pour le générateur avec $n=4$}
403 La qualité des séquences aléatoires a été évaluée à travers la suite
404 de tests statistiques développée pour les générateurs de nombres
405 pseudo aléatoires par le
406 \emph{National Institute of Standards and Technology} (NIST).
407 % Pour les 15 tests, le seuil $\alpha$ est fixé à $1\%$:
409 % qui est plus grande que $1\%$ signifie
410 % que la chaîne est considérée comme aléatoire avec une confiance de $99\%$.
411 % Le tableau~\ref{fig:TEST} donne une vision synthétique de toutes
412 % les expérimentations.
413 L'expérience a montré notamment que toutes ces fonctions
414 passent avec succès cette batterie de tests.
421 % \begin{tabular}{|*{17}{c|}}
423 % {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}$ \\
425 % 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 \\
427 % 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 \\
429 % 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 \\
431 % 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 \\
433 % 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 \\
435 % 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 \\
437 % 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 \\
439 % 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 \\
441 % 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 \\
443 % 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 \\
445 % 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 \\
447 % 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 \\
449 % 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 \\
451 % 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 \\
453 % 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 \\
457 % \caption{Test de NIST réalisé sur des instances de générateurs}\label{fig:TEST}