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 \gls{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. On présente tout d'abord le générateur
18 basé sur des fonctions chaotiques (section~\ref{sub:prng:algo}),
19 puis comment intégrer la contrainte de \gls{distributionuniforme}
20 (cf. glossaire) de la sortie
21 dans le choix de la fonction à itérer (section~\ref{sub:prng:unif}).
22 L'approche est évaluée dans la dernière section.
26 \subsection{ Générateur de nombres pseudo aléatoires basé sur le chaos}\label{sub:prng:algo}
32 On peut penser à construire un générateur de nombres pseudo
33 aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
37 \KwIn{une fonction $f$, un nombre d'itérations $b$,
38 une configuration initiale $x^0$ ($n$ bits)}
39 \KwOut{une configuration $x$ ($n$ bits)}
41 $k\leftarrow b + \textit{Random}(b+1)$\;
42 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
45 $s\leftarrow{\textit{Random}(n)}$\;
46 %$s\leftarrow{\textit{XORshift}(n)}$\;
47 $x\leftarrow{F_f(s,x)}$\;
51 \caption{Algorithme de génération de nombres pseudo aléatoires
52 à l'aide de la fonction chaotique $G_f$}
57 Celui-ci prend en entrée: une fonction $f$;
58 un entier $b$, qui assure que le nombre d'itérations
59 est compris entre $b+1 $ et $2b+1$ et une configuration initiale $x^0$.
60 Il retourne une nouvelle configuration $x$.
61 En interne, il exploite un algorithme de génération
62 de nombres pseudo aléatoires
64 Cet algorithme est utilisée dans notre générateur pour construire la longueur
65 de la stratégie ainsi que les éléments qui la composent.
66 Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$
67 selon une \gls{distributionuniforme} (cf. glossaire) et utilise
68 \textit{XORshift} qui est une classe de générateurs de
69 nombres pseudo aléatoires
70 très rapides conçus par George Marsaglia.
72 % L'algorithme \textit{XORshift} exploite itérativement
73 % la fonction \og \gls{xor}\fg{} $\oplus$ (cf. glossaire)
74 % sur des nombres obtenus grâce à des \glspl{decalageDeBits} (cf. glossaire).
76 L'algorithme \textit{XORshift}
77 exploite itérativement l'opérateur $\oplus$
78 sur des nombres obtenus grâce à des \glspl{decalageDeBits} (cf. glossaire).
79 Cet opérateur, défini dans $\Bool^{n}$,
80 applique la fonction \og \gls{xor} \fg{} (cf. glossaire)
81 aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
82 Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné
87 \KwIn{la configuration interne $z$ (un mot de 32-bit)}
88 \KwOut{$y$ (un mot de 32-bits)}
89 $z\leftarrow{z\oplus{(z\ll13)}}$\;
90 $z\leftarrow{z\oplus{(z\gg17)}}$\;
91 $z\leftarrow{z\oplus{(z\ll5)}}$\;
95 \caption{Une boucle de l'algorithme de \textit{XORshift}}
101 Il reste à instancier une fonction $f$ dans
102 l'algorithme~\ref{CI Algorithm}
103 en adéquation avec l'approche développée
104 en section~\ref{sec:sccg}.
105 La section suivante montre comment l'uniformité de la distribution a
106 contraint cette instanciation.
108 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
110 Une matrice stochastique est une matrice carrée
111 dont tous les éléments sont positifs ou nuls et dont
112 la somme de chaque ligne
114 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
115 Enfin, une matrice stochastique de taille $n \times n$ est régulière
116 si la propriété suivante est établie:
117 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
119 On énonce enfin le théorème suivant liant les
120 \glspl{vecteurDeProbabilite} (cf. glossaire)
121 et les \glspl{chaineDeMarkov} (cf. glossaire):
125 \begin{Theo}\label{th}
126 Si $M$ est une matrice stochastique régulière, alors $M$
127 possède un unique vecteur stationnaire de probabilités $\pi$
129 De plus, si $\pi^0$ est un \gls{vecteurDeProbabilite}
131 la suite $(\pi^{k})^{k \in \Nats}$ par
132 $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$
133 alors la \gls{chaineDeMarkov} $\pi^k$
134 converge vers $\pi$ lorsque $k$ tend vers l'infini.
138 Montrons sur un exemple jouet à deux éléments
139 que ce théorème permet de vérifier si la sortie d'un générateur de
140 nombres pseudo aléatoires est uniformément distribuée ou non.
141 Soit alors $g$ et $h$ deux fonctions de $\Bool^2$
142 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
143 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
144 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
145 vérifient les hypothèses du théorème~\ref{th:Adrien}.
146 Leurs graphes d'itérations
147 sont donc fortement connexes, ce que l'on a pu déjà vérifier aux figures
148 \ref{fig:g:iter} et \ref{fig:h:iter}.
149 \textit{A priori}, ces deux fonctions pourraient être intégrées
150 dans un générateur de nombres pseudo aléatoires. Montrons que ce n'est pas le cas pour $g$ et
151 que cela l'est pour $h$.
154 Comme le générateur \textit{Random} possède une sortie uniformément
155 distribuée, la stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
157 pour tout sommet de $\Gamma(g)$ et de $\Gamma(h)$,
158 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant
159 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
160 En d'autres mots, $\Gamma(g)$ est le graphe orienté d'une chaîne de Markov.
161 Il est facile de vérifier que la \gls{matriceDeTransitions} (cf. glossaire)
163 est $M_g = \frac{1}{2} \check{M}_g$,
164 où $\check{M}_g$ est la \gls{matriceDAdjacence} (cf. glossaire) donnée en
165 figure~\ref{fig:g:incidence} (voir ci-après), et similairement pour $M_h$.
169 \subfloat[$\check{M}_g $.]{
170 \begin{minipage}{0.25\textwidth}
184 \label{fig:g:incidence}
186 \subfloat[$\check{M}_h $.]{
187 \begin{minipage}{0.25\textwidth}
200 \label{fig:h:incidence}
203 \caption{Graphe des fonctions candidates avec $n=2$}
207 Les deux matrices $M_g$ et $M_h$ sont stochastiques. Pour
208 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de
209 $M^5_g$ ni de $M^3_h$ n'est nul.
210 De plus, les vecteurs de probabilités
211 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
212 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$
213 vérifient $\pi_g M_g = \pi_g$ et
215 Alors d'après le théorème~\ref{th},
216 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a
217 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et
218 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$.
219 Ainsi la chaîne de Markov associé à $h$ tend vers une
220 distribution uniforme, contrairement à celle associée à $g$.
221 On en déduit que $g$ ne devrait pas être itérée dans
222 un générateur de nombres pseudo aléatoires.
224 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm},
225 pour peu que le nombre $b$ d'itérations entre deux mesures successives
226 de valeurs soit suffisamment grand de sorte que
227 le vecteur d’état de la chaîne de Markov
228 ait une distribution suffisamment proche de la distribution uniforme.
231 Considérons le lemme technique suivant:
232 \begin{Lemma}\label{lem:stoc}
233 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
234 $2^n\times 2^n$ définie par
235 $M = \frac{1}{n}\check{M}$.
236 Alors $M$ est une matrice stochastique régulière si et seulement si
237 $\Gamma(f)$ est fortement connexe.
241 On remarque tout d'abord que $M$
242 est une matrice stochastique par construction.
243 Supposons $M$ régulière.
244 Il existe donc $k$ tel que $M_{ij}^k>0$ pour chaque $i,j\in \llbracket
245 1; 2^n \rrbracket$. L'inégalité $\check{M}_{ij}^k>0$ est alors établie.
246 Puisque $\check{M}_{ij}^k$ est le nombre de chemins de $i$ à $j$ de longueur $k$
247 dans $\Gamma(f)$ et puisque ce nombre est positif, alors
248 $\Gamma(f)$ est fortement connexe.
250 Réciproquement si $\Gamma(f)$
251 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.
253 $k_{ij} \in \llbracket 1, 2^n \rrbracket$ tels que $\check{M}_{ij}^{k_{ij}}>0$.
254 Comme tous les multiples $l \times k_{ij}$ de $k_{ij}$ sont tels que
255 $\check{M}_{ij}^{l\times k_{ij}}>0$,
256 on peut conclure que, si
257 $k$ est le plus petit multiple commun de $\{k_{ij} \big/ i,j \in \llbracket 1, 2^n \rrbracket \}$ alors
258 $\forall i,j \in \llbracket 1, 2^n \rrbracket, \check{M}_{ij}^{k}>0$.
259 Ainsi, $\check{M}$ et donc $M$ sont régulières.
262 Ces résultats permettent formuler et de prouver le théorème suivant:
265 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\Gamma(f)$ son
266 graphe d'itérations , $\check{M}$ sa matrice d'adjacence
267 et $M$ une matrice $2^n\times 2^n$ définie comme dans le lemme précédent.
268 Si $\Gamma(f)$ est fortement connexe, alors
269 la sortie du générateur de nombres pseudo aléatoires détaillé par
270 l'algorithme~\ref{CI Algorithm} suit une loi qui
271 tend vers la distribution uniforme si
272 et seulement si $M$ est une matrice doublement stochastique.
275 $M$ est une matrice stochastique régulière (Lemme~\ref{lem:stoc})
276 qui a un unique vecteur de probabilités stationnaire
278 Soit $\pi$ défini par
279 $\pi = \left(\frac{1}{2^n}, \hdots, \frac{1}{2^n} \right)$.
280 On a $\pi M = \pi$ si et seulement si
281 la somme des valeurs de chaque colonne de $M$ est 1,
282 \textit{i.e.} si et seulement si
283 $M$ est doublement stochastique.
287 \subsection{Expérimentations}
289 On considère le graphe d'interactions $G(f)$ donné en figure~\ref{fig:G}.
290 Il vérifie le théorème~\ref{th:Adrien}:
291 toutes les fonctions $f$ possédant un tel graphe d'interactions
292 ont un graphe d'itérations $\Gamma(f)$ fortement connexe.
293 Pratiquement, un algorithme simple de satisfaction de contraintes
294 a trouvé 520 fonctions $f$ non isomorphes de graphe d'interactions $G(f)$,
295 dont seulement 16 d'entre elles possédent une matrice doublement stochastique.
297 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en
298 définissant les images des éléments de la liste
299 0, 1, 2,\ldots, 14, 15 en respectant l'ordre.
300 Expliquons enfin comment a été calculé le nombre de la troisième
301 colonne utilisé comme le paramètre $b$
302 dans l'algorithme~\ref{CI Algorithm}.
304 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur la base canonique de $\R^{2^{n}}$.
305 Chacun des éléments $v_j$, $1 \le j \le 2^n$,
306 du vecteur $e_i M_f^t$ représente la probabilité
307 d'être dans la configuration $j$ après $t$ étapes du processus de Markov
308 associé à $\Gamma(f)$ en partant de la configuration $i$.
310 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
311 \}$ représente le plus petit nombre d'itérations où la distance de
312 ce vecteur au vecteur $\pi=(\frac{1}{2^n},\ldots,\frac{1}{2^n})$
313 -- autrement dit, où la déviation par rapport à la distribution uniforme --
315 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
318 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket}
321 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
328 \subfloat[Graphe d'interactions]{
329 \begin{minipage}{0.20\textwidth}
331 \includegraphics[width=3.5cm]{images/Gi.pdf}
336 \subfloat[Fonctions doublement stochastiques]{
337 \begin{minipage}{0.75\textwidth}
340 \begin{tabular}{|c|c|c|}
342 {Nom}& {Définition}&{$b$} \\
344 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0 & 206\\
346 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1
349 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
352 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
355 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
358 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
361 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
364 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
367 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
370 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
373 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
376 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
379 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
382 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
385 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
388 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
395 \label{fig:listfonction}
398 \caption{Candidates pour le générateur avec $n=4$}
402 La qualité des séquences aléatoires a été évaluée à travers la suite
403 de tests statistiques développée pour les générateurs de nombres
404 pseudo aléatoires par le
405 \emph{National Institute of Standards and Technology} (NIST).
406 % Pour les 15 tests, le seuil $\alpha$ est fixé à $1\%$:
408 % qui est plus grande que $1\%$ signifie
409 % que la chaîne est considérée comme aléatoire avec une confiance de $99\%$.
410 % Le tableau~\ref{fig:TEST} donne une vision synthétique de toutes
411 % les expérimentations.
412 L'expérience a montré notamment que toutes ces fonctions
413 passent avec succès cette batterie de tests.
420 % \begin{tabular}{|*{17}{c|}}
422 % {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}$ \\
424 % 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 \\
426 % 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 \\
428 % 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 \\
430 % 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 \\
432 % 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 \\
434 % 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 \\
436 % 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 \\
438 % 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 \\
440 % 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 \\
442 % 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 \\
444 % 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 \\
446 % 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 \\
448 % 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 \\
450 % 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 \\
452 % 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 \\
456 % \caption{Test de NIST réalisé sur des instances de générateurs}\label{fig:TEST}