1 On a vu dans le chapitre précédent que pour avoir
3 uniforme, il est nécessaire que la matrice d'adjacence du graphe d'itération du
4 système soit doublement stochastique. Nous présentons dans cette partie
5 des méthodes effectives permettant de générer de telles matrices.
6 La première est basée sur la programmation logique par contraintes
7 (Section~\ref{sec:plc}).
8 Cependant celle-ci souffre de ne pas passer à l'échelle et ne fournit pas
9 une solution en un temps raisonnable dès que la fonction à engendrer
10 porte sur un grand nombre de bits.
11 Une approche plus pragmatique consiste à supprimer un cycle hamiltonien dans le
12 graphe d'itérations $\textsc{giu}(\neg)$ (section~\ref{sec:hamiltonian}).
13 Pour obtenir plus rapidement une distribution uniforme, l'idéal serait
14 de supprimer un cycle hamiltonien qui nierait autant de fois chaque bit.
15 Cette forme de cycle est dit équilibré. La section~\ref{sub:gray} établit le
16 lien avec les codes de Gray équilibrés, étudiés dans la littérature.
17 La section suivante présente une démarche de génération automatique de code de Gray équilibré (section~\ref{sec:induction}).
18 La vitesse avec laquelle l'algorithme de PRNG converge en interne vers
19 une distribution uniforme est étudiée théoriquement et pratiquement à la
20 section~\ref{sec:mixing}.
21 L'extension du travail aux itérations généralisées est présentée à la
22 section~\ref{sec:prng:gray:general}.
23 Finalement, des instances de PRNGS engendrés selon les méthodes détaillées dans
24 ce chapitre sont présentés en section~\ref{sec:prng;gray:tests}.
25 Les sections~\ref{sec:plc} à~\ref{sub:gray} ont été publiées
29 % This aim of this section is to show
30 % that finding DSSC matrices from a hypercube
31 % is a typical finite domain satisfaction
32 % problem, classically denoted as
33 % Constraint Logic Programming on Finite Domains (CLPFD).
34 % This part is addressed in the first section. Next, we analyse the first
35 % results to provide a generation of DSSC matrices with small mixing times.
37 \section{Programmation logique par contraintes sur des domaines finis}\label{sec:plc}
38 Tout d'abord, soit ${\mathsf{N}}$ le nombre d'éléments.
39 Pour éviter d'avoir à gérer des fractions, on peut considérer que
40 les matrices (d'incidence) à générer ont des lignes et des colonnes dont les
41 sommes valent ${\mathsf{N}}$ à chaque fois.
42 On cherche ainsi toutes les matrices $M$ de taille $2^{\mathsf{N}}\times 2^{\mathsf{N}}$ telles que
45 \item $M_{ij}$ vaut 0 si $j$ n'est pas un voisin de $i$, \textit{i.e.},
46 il n'y a pas d'arc de $i$ à $j$ dans le graphe $\textsc{giu}(f)$;
48 \item $0 \le M_{ii} \le {\mathsf{N}}$: le nombre de boucles autour de chaque
49 configuration $i$ est inférieur à ${\mathsf{N}}$;
51 \item pour $j \neq i$, $0 \le M_{ij} \le 1$: on construit l'arc de $i$ à $j$
52 si et seulement si $M_{ij}$ vaut 1 (et 0 sinon)
53 \item pour chaque indice de ligne $i$, $1 \le i\le 2^{\mathsf{N}}$, ${\mathsf{N}} = \sum_{1 \le j\le 2^{\mathsf{N}}} M_{ij}$:
54 la matrice est stochastique à droite;
55 \item pour chaque indice de colonne $j$,
56 $1 \le j\le 2^{\mathsf{N}}$, ${\mathsf{N}} = \sum_{1 \le i\le 2^{\mathsf{N}}} M_{ij}$:
57 la matrice est stochastique à gauche;
58 \item Toutes les éléments de la somme $\sum_{1\le k\le 2^{\mathsf{N}}}M^k$ sont strictement positif, \textit{i.e.}, le graphe $\textsc{giu}(f)$ est fortement connexe;
60 Ce problème s'exprime sur des domaines finis entiers avec des opérateurs
61 arithmétiques simples (sommes et produits). Il pourrait théoriquement être
62 traité par des démarches de programmation logique par contrainte
63 sur des domaines finis (comme en PROLOG).
64 L'algorithme donné en Figure~\ref{fig:prolog}
65 est en effet le c{\oe}ur du programme PROLOG
66 qui pourrait être utilisé pour instancier toutes les solutions,
67 ici pour $\mathsf{N} = 2$. Dans ce code,
68 \verb+mmult(+$X,Y,R$\verb+)+ et
69 \verb+summ(+$X,Y,R$\verb+)+
70 valent True si et seulement si $R$
71 est le produit matriciel (ou la somme matricielle)
72 entre $X$ and $Y$ respectivement.
73 Il n'est pas difficile d'adapter ce code à n'importe quelle valeur
74 entière naturelle $\mathsf{N}$.
78 \lstset{language=prolog}
81 M=[[M0_0, M0_1, 0, M0_3], [M1_0, M1_1, 0, M1_3],
82 [M2_0, 0, M2_2, M2_3], [0, M3_1, M3_2, M3_3]],
83 [M0_0, M1_1, M2_2, M3_3] ins 0..2,
84 [M0_1, M0_3, M1_0, M1_3, M2_0, M2_3, M3_1, M3_2]
86 M0_0+ M0_1+ M0_2 #=2, M1_0+ M1_1+ M1_3 #=2,
87 M2_0+ M2_2+ M2_3 #=2, M3_1+ M3_2+ M3_3 #=2,
88 M0_0+ M1_0+ M2_0 #=2, M0_1+ M1_1+ M3_1 #=2,
89 M0_2+ M2_2+ M3_2 #=2, M1_3+ M2_3+ M3_3 #=2,
99 \caption{Code PROLOG permettant de trouver toutes les matrices DSSC pour $n=2$}\label{fig:prolog}
102 Enfin, on définit la relation $\mathcal{R}$, qui est établie pour les deux
103 fonctions $f$ et $g$ si leurs graphes
104 respectifs $\textsc{giu}(f)$ et $\textsc{giu}(g)$
106 C'est évidemment une relation d'équivalence.
110 %\subsection{Analyse de l'approche}\label{sub:prng:ana}
111 Exécutée sur un ordinateur personnel, PROLOG trouve
112 en moins d'une seconde les
113 49 solutions pour $n=2$,
114 dont 2 seulement ne sont pas équivalentes,
115 en moins d'une minute les 27642 solutions dont seulement 111 ne
116 sont pas équivalentes pour $n=3$.
117 Cependant, l'approche ne permet pas d'engendrer toutes les solutions
119 Cette approche, basée sur une démarche de type \emph{générer, tester} ne peut
120 pas être retenue pour $n$ de grande taille, même
121 en s'appuyant sur l'efficience de l'algorithme de backtrack natif de PROLOG.
123 Cependant, pour des valeurs de $n$ petites, nous avons
124 comparé les fonctions non équivalentes selon leur proportion
125 à engendrer des temps de mélange petits (cf. équation~(\ref{eq:mt:ex})).
130 \begin{xpl}\label{xpl:mixing:3}
131 Le tableau~\ref{table:mixing:3} fournit les 5 fonctions booléennes
132 qui ont les temps de mélange les plus petits pour $\varepsilon=10^{-5}$.
136 \begin{array}{|l|l|l|}
138 \textrm{Name} & \textrm{Image} & \textrm{MT}\\
140 f^a & (x_2 \oplus x_3, x_1 \oplus \overline{x_3},\overline{x_3}) & 16 \\
142 f^* & (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
143 \overline{x_1}.\overline{x_3} + x_1x_2) & 17 \\
145 f^b & (\overline{x_1}(x_2+x_3) + x_2x_3,\overline{x_1}(\overline{x_2}+\overline{x_3}) + \overline{x_2}.\overline{x_3}, & \\
146 & \qquad \overline{x_3}(\overline{x_1}+x_2) + \overline{x_1}x_2) & 26 \\
148 f^c & (\overline{x_1}(x_2+x_3) + x_2x_3,\overline{x_1}(\overline{x_2}+\overline{x_3}) + \overline{x_2}.\overline{x_3}, & \\
149 & \overline{x_3}(\overline{x_1}+x_2) + \overline{x_1}x_2) & 29 \\
151 f^d & (x_1\oplus x_2,x_3(\overline{x_1}+\overline{x_2}),\overline{x_3}) & 30 \\
153 % [3, 4, 7, 0, 1, 6, 5, 2], #16
154 % [3, 4, 7, 0, 2, 6, 5, 1], #17
155 % [3, 6, 7, 5, 2, 0, 1, 4], #26
156 % [3, 4, 7, 5, 2, 6, 1, 0], #29
157 % [3, 2, 5, 6, 7, 0, 1, 4]] #30
161 \caption{Les 5 fonctions booléennes $n=3$ aux temps de mélange les plus faibles.}\label{table:mixing:3}
165 Une analyse syntaxique de ces fonctions ne permet pas, à priori,
166 de déduire des règles permettant de construire de nouvelles
167 fonction dont le temps de mélange serait faible.
168 Cependant, le graphe $\textsc{giu}(f^*)$
169 (donné à la Figure~\ref{fig:iteration:f*})
170 est le $3$-cube dans lequel le cycle
171 $000,100,101,001,011,111,110,010,000$
172 a été enlevé. Dans cette figure, le graphe $\textsc{giu}(f)$ est
173 en continu tandis que le cycle est en pointillés.
174 Ce cycle qui visite chaque n{\oe}ud exactement une fois est un
175 \emph{cycle hamiltonien}.
176 La matrice de Markov correspondante est donnée à
177 la figure~\ref{fig:markov:f*}.
178 On s'intéresse par la suite à la génération de ce genre de cycles.
186 \subfigure[Graphe $\textsc{giu}(f^*)$.
187 \label{fig:iteration:f*}]{
188 \begin{minipage}{0.55\linewidth}
190 \includegraphics[width=\columnwidth]{images/iter_f0d}%
193 \subfigure[Matrice de Markov associée à $\textsc{giu}(f^*)$
194 \label{fig:markov:f*}]{%
195 \begin{minipage}{0.35\linewidth}
200 M=\dfrac{1}{3} \left(
201 \begin{array}{llllllll}
216 % $ \dfrac{1}{4} \left(
217 % \begin{array}{cccccccc}
218 % 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
220 % 1 & 1 & 0 & 0 & 1 & 1 & 0 & 0 \\
222 % 0 & 0 & 1 & 1 & 0 & 0 & 1 & 1 \\
224 % 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
226 % 1 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\
228 % 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
230 % 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
232 % 0 & 1 & 0 & 1 & 0 & 1 & 0 & 1 \\
234 % \end{array} \right) $
242 \caption{Représentations de $f^*(x_1,x_2,x_3)=
243 (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
244 \overline{x_1}.\overline{x_3} + x_1x_2)$.}\label{fig1}
254 % fortement connexes et doublement stochastiques}\label{sec:gen:dblstc}
261 \section{Suppression des cycles hamiltoniens}
262 \label{sec:hamiltonian}
264 Dans un premier temps, nous montrons %en section~\ref{sub:removing:theory}
266 suppression d'un cycle hamiltonien produit bien des matrices doublement
267 stochastiques. Nous établissons ensuite le lien avec les codes de Gray
270 %\subsubsection{Aspects théoriques}
271 %\label{sub:removing:theory}
273 Nous donnons deux résultats complémentaires, reliant la suppression d'un cycle
274 hamiltonien du $n$-cube, les matrices doublement stochastiques et la forte
275 connexité du graphe d'itérations.
277 \begin{theorem}\label{th:supprCH}
278 La suppression d'un cycle hamiltonien dans une matrice de Markov $M$, issue du
279 $n$-cube, produit une matrice doublement stochastique.
283 Un cycle hamiltonien passe par chaque n{\oe}ud une et une seule fois.
284 Pour chaque n{\oe}ud $v$ dans le $n$-cube $C_1$,
285 une arête entrante $(o,v)$ et une arête sortante $(v,e)$
287 Considérons un autre $n$-cube $C_2$ auquel on ajoute les arêtes
288 pour le rendre complet. La matrice de Markov $M$ correspondante est
289 remplie de $\frac{1}{2^n}$ et est doublement stochastique.
290 Comme on enlève exactement une arête sortante $(v,e)$
291 à chaque n{\oe}ud $v$ dans $C_1$, on enlève ainsi dans
292 $C_2$ les $2^{n-1}$ arêtes issues de $v$ et
293 relatives aux parties de $\{1,\ldots,n\}$ qui
294 contiennent $e$. Cela revient à annuler
295 dans la matrice $M$ les $2^{n-1}$ coefficients correspondants et ajouter
296 $1/2$ à l'élément $M_{vv}$.
297 La matrice $M$ reste stochastique.
298 On effectue un raisonnement similaire pour les arêtes entrantes:
299 comme on enlève exactement une arête entrante $(o,v)$ pour chaque
300 n{\oe}ud $v$ dans $C_1$, dans $C_2$, ce sont exactement
301 $2^{n-1}$ arêtes menant à $v$ qui sont enlevées.
302 Dans $M$ les $2^{n-1}$ coefficients correspondants sont mis à 0 et
303 $M_{vv}$ vaut alors $\frac{2^{n-1} +1}{2}$.
304 $M$ est donc doublement stochastique.
309 \begin{theorem}\label{th:grapheFC}
310 Le graphe d'itérations issu du $n$-cube, auquel un cycle hamiltonien est
311 enlevé, est fortement connexe.
316 On considère les deux $n$-cubes $C_1$ et $C_2$ définis
317 dans la preuve du théorème~\ref{th:supprCH}.
318 Dans $C_1$ on considère le cycle inverse $r$ du cycle
320 Aucun arc n'appartient à la fois à $r$ et à $c$:
321 en effet, sinon $c$ contiendrait un n{\oe}ud deux fois.
322 Ainsi aucune arête de $r$ n'est enlevée dans $C_1$.
323 Le cycle $r$ est évidement un cycle hamiltonien et contient tous les n{\oe}uds.
324 Tous les n{\oe}uds de $C_1$ dans lequel $c$ a été enlevé sont accessibles
325 depuis n'importe quel n{\oe}ud. Le graphe des itérations $\textsf{giu}$ qui
326 étend le précédent graphe est ainsi fortement connexe.
332 %Les preuves, relativement directes, sont laissées en exercices au lecteur.
333 Générer un cycle hamiltonien dans le
334 $n$-cube revient à trouver un \emph{code de Gray cyclique}. On
335 rappelle qu'un code de Gray est une séquence de mots binaires de taille
336 fixe ($\mathsf{N}$), dont les éléments successifs ne différent que par un seul bit. Un
337 code de Gray est \emph{cyclique} si le premier élément et le dernier ne
338 différent que par un seul bit.
340 \section{Lien avec les codes de Gray cycliques (totalement) équilibrés}
343 Un minorant du nombre de codes de Gray ($\left(\frac{n*\log2}{e \log
344 \log n}\times(1 - o(1))\right)^{2^n}$), donnée dans~\cite{Feder2009NTB},
345 indique une explosion combinatoire pour notre recherche. Afin de contourner
346 cette difficulté, nous nous restreignons aux codes induisant un graphe
347 d'itérations $\textsc{giu}(f)$ \emph{uniforme}. Cette uniformité se traduit par des
348 nombres d'arcs équilibrés entre les \emph{dimensions} du graphe, la dimension
349 $i$ correspondant aux seules variations du bit $i$ (parmi les $n$ bits au
350 total). Cette approche revient à chercher des codes de Gray cycliques
353 On formalise un code de Gray équilibré comme suit.
354 Soit $L = w_1, w_2, \dots, w_{2^n}$ la séquence d'un code de Gray cyclique à
355 $n$ bits. Soit $S = s_1, s_2, \dots, s_{2^n}$ la séquence des transitions où
356 $s_i$, $1 \le i \le 2^n$ est l'indice du seul bit qui varie entre les mots
357 $w_i$ et $w_{i+1}$. Enfin, soit $\textit{TC}_n : \{1,\dots, n\} \rightarrow
358 \{0, \ldots, 2^n\}$ la fonction qui au paramètre $i$ associe le \emph{nombre
359 de transitions} présentes dans la séquence $L$ pour le bit $i$, c'est-à-dire
360 le nombre d'occurrences de $i$ dans $S$.
362 Le code $L$ est \textbf{équilibré} si $\forall
363 i,j\in\{1,...,n\},~|\textit{TC}_n(i) - \textit{TC}_n(j)| \le 2$. Il est
364 \textbf{totalement équilibré} si $\forall
365 i\in\{1,...,n\},~\textit{TC}_n(i)=\frac{2^n}{n}$.
368 On peut donc déjà déduire qu'il ne peut exister des codes de Gray totalement
369 équilibrés que pour les systèmes ayant un nombre d'éléments $n=2^k, k>0$. De
370 plus, comme dans tout code de Gray cyclique, $\textit{TC}_n(i)$ est pair
371 $\forall i\in\{1,...,n\}$, alors les systèmes ayant un nombre d'éléments
372 différent de $2^k$, ne peuvent avoir que des codes de Gray équilibrés avec
373 $\textit{TC}_n(i)=\lfloor\frac{2^n}{n}\rfloor$ ou
374 $\textit{TC}_n(i)=\lceil\frac{2^n}{n}\rceil, \forall i\in\{1,...,n\}$ et
375 vérifiant $\sum_{i=1}^n\textit{TC}_n(i) = 2^n$.
378 Soit $L^*=000,100,101,001,011,111,110,010$ le code de Gray correspondant au
379 cycle hamiltonien enlevé de $f^*$. Sa séquence des transitions est \linebreak
380 $S=3,1,3,2,3,1,3,2$ et les nombres de transitions sont $\textit{TC}_3(1)=
381 \textit{TC}_3(2)=2$ et $\textit{TC}_3(3)=4$. Un tel code est équilibré.
383 Si l'on considère maintenant $L^4=$ 0000, 0010, 0110, 1110, 1111, 0111, 0011,
384 0001, 0101, 0100, 1100, 1101, 1001, 1011, 1010, 1000, un code de Gray
385 cyclique. En construisant la séquence $S=$ 2,3,4,1,4,3,2,3,1,4,1,3,2,1,2,4,
386 on constate que $\forall
387 i\in\{1,..,4\},~\textit{TC}_4(i)=4$ et donc que
388 ce code est totalement équilibré.
391 \section{Génération de codes de Gray équilibrés par induction}
392 \label{sec:induction}
394 De nombreuses approches ont été développées pour résoudre le problème de construire
395 un code de Gray dans un $\mathsf{N}$-cube~\cite{Robinson:1981:CS,DBLP:journals/combinatorics/BhatS96,ZanSup04},
396 selon les propriétés que doit vérifier ce code.
398 Dans les travaux~\cite{Robinson:1981:CS}, les auteurs
399 proposent une approche inductive de construction de code de Gray équilibrés
400 (on passe du $\mathsf{N}-2$ à $\mathsf{N}$)
401 pour peu que l'utilisateur fournisse une sous-séquence possédant certaines
402 propriétés à chaque pas inductif.
403 Ce travail a été renforcé dans ~\cite{DBLP:journals/combinatorics/BhatS96}
404 où les auteurs donnent une manière explicite de construire une telle sous-séquence.
405 Enfin, les auteurs de~\cite{ZanSup04} présentent une extension de l'algorithme de
406 \emph{Robinson-Cohn}. La présentation rigoureuse de cette extension leur permet
407 principalement de prouver que si $\mathsf{N}$ est une puissance de 2,
408 le code de Gray équilibré engendré par l'extension est toujours totalement équilibré et
409 que $S_{\mathsf{N}}$ est la séquence de transition d'un code de Gray de $\mathsf{N}$ bits
410 si $S_{\mathsf{N}-2}$ l'est aussi..
411 Cependant les auteurs ne prouvent pas que leur approche fournit systématiquement
412 un code de Gray (totalement) équilibré.
413 Cette section montre que ceci est vrai en rappelant tout d'abord
414 l'extension de l'algorithme de \emph{Robinson-Cohn} pour un
415 code de Gray avec $\mathsf{N}-2$ bits
416 défini à partir de la séquence $S_{\mathsf{N}-2}$.
419 \item \label{item:nondet}Soit $l$ un entier positif pair. Trouver des sous-séquences
420 $u_1, u_2, \dots , u_{l-2}, v$ (possiblement vides) de $S_{\mathsf{N}-2}$
421 telles que $S_{\mathsf{N}-2}$ est la concaténation de
423 s_{i_1}, u_0, s_{i_2}, u_1, s_{i_3}, u_2, \dots , s_{i_l-1}, u_{l-2}, s_{i_l}, v
425 où $i_1 = 1$, $i_2 = 2$, et $u_0 = \emptyset$ (la séquence vide).
426 \item\label{item:u'} Remplacer dans $S_{\mathsf{N}-2}$ les séquences $u_0, u_1, u_2, \ldots, u_{l-2}$
428 $\mathsf{N} - 1, u'(u_1,\mathsf{N} - 1, \mathsf{N}) , u'(u_2,\mathsf{N}, \mathsf{N} - 1), u'(u_3,\mathsf{N} - 1,\mathsf{N}), \dots, u'(u_{l-2},\mathsf{N}, \mathsf{N} - 1)$
429 respectivement, où $u'(u,x,y)$ est la séquence $u,x,u^R,y,u$ telle que
430 $u^R$ est $u$, mais dans l'ordre inverse. La séquence obtenue est ensuite notée $U$.
431 \item\label{item:VW} Construire les séquences $V=v^R,\mathsf{N},v$, $W=\mathsf{N}-1,S_{\mathsf{N}-2},\mathsf{N}$. Soit alors $W'$ définie comme étant égale à $W$ sauf pour les
432 deux premiers éléments qui ont été intervertis.
433 \item La séquence de transition $S_{\mathsf{N}}$ est la concaténation $U^R, V, W'$.
436 L'étape~(\ref{item:nondet}) n'est pas constructive: il n'est pas précisé
437 comment sélectionner des sous-séquences qui assurent que le code obtenu est équilibré.
438 La théorème suivante montre que c'est possible et sa preuve,
439 donnée en annexes~\ref{anx:generateur}, explique comment le faire.
441 \begin{restatable}[Existence d'un code de Gray équilibré]{theorem}{theograyequilibre}
442 \label{prop:balanced}
443 Soit $\mathsf{N}$ dans $\Nats^*$, et $a_{\mathsf{N}}$ défini par
444 $a_{\mathsf{N}}= 2 \left\lfloor \dfrac{2^{\mathsf{N}}}{2\mathsf{N}} \right\rfloor$.
445 il existe une séquence $l$ dans l'étape~(\ref{item:nondet}) de l'extension
446 de l'algorithme de \emph{Robinson-Cohn} extension telle que
447 le nombres de transitions $\textit{TC}_{\mathsf{N}}(i)$
448 sont tous $a_{\mathsf{N}}$ ou $a_{\mathsf{N}}+2$
449 pour chaque $i$, $1 \le i \le \mathsf{N}$.
452 Ces fonctions étant générées, on s'intéresse à étudier à quelle vitesse
453 un générateur les embarquant converge vers la distribution uniforme.
454 C'est l'objectif de la section suivante.
456 \section{Quantifier l'écart par rapport à la distribution uniforme}\label{sec:mixing}
457 On considère ici une fonction construite comme à la section précédente.
458 On s'intéresse ici à étudier de manière théorique les
459 itérations définies à l'équation~(\ref{eq:asyn}) pour une
461 Tout d'abord, celles-ci peuvent être interprétées comme une marche le long d'un
462 graphe d'itérations $\textsc{giu}(f)$ tel que le choix de tel ou tel arc est donné par la
464 On remarque que ce graphe d'itération est toujours un sous graphe
465 du ${\mathsf{N}}$-cube augmenté des
466 boucles sur chaque sommet, \textit{i.e.}, les arcs
467 $(v,v)$ pour chaque $v \in \Bool^{\mathsf{N}}$.
468 Ainsi, le travail ci dessous répond à la question de
469 définir la longueur du chemin minimum dans ce graphe pour
470 obtenir une distribution uniforme.
471 Ceci se base sur la théorie des chaînes de Markov.
473 générale à ce sujet on pourra se référer
474 au livre~\cite{LevinPeresWilmer2006},
475 particulièrement au chapitre sur les temps d'arrêt.
483 On considère par exemple le graphe $\textsc{giu}(f)$ donné à la
484 \textsc{Figure~\ref{fig:iteration:f*}.} et la fonction de
485 probabilités $p$ définie sur l'ensemble des arcs comme suit:
489 = \frac{1}{2} + \frac{1}{6} \textrm{ si $e=(v,v)$ avec $v \in \Bool^3$,}\\
490 = \frac{1}{6} \textrm{ sinon.}
494 La matrice $P$ de la chaîne de Markov associée à $f^*$
497 P=\dfrac{1}{6} \left(
498 \begin{array}{llllllll}
512 On remarque que dans cette marche on reste sur place avec une probabilité égale
513 à $\frac{1}{2}+\frac{1}{2\mathsf{N}}$ et l'on passe d'un sommet à son voisin
514 lorsque c'est possible avec une probabilité $\frac{1}{2\mathsf{N}}$.
515 Les probabilités usuelles que l'on appliquerait aux transitions de
516 l'algorithme~\ref{CI Algorithm} serait quant à elles uniformément égales
517 à $\frac{1}{\mathsf{N}}$.
518 Cette manière paresseuse d'itérer (puisqu'on reste plus souvent sur place) n'est donc pas équivalente à celle issue de l'algorithme.
520 Cependant, l'étude théorique de référence~\cite{LevinPeresWilmer2006}
521 considère cette marche comme cadre. S'inspirant de
522 celle-ci, le travail suivant se replace donc dans ce cadre théorique.
525 Tout d'abord, soit $\pi$ et $\mu$ deux distributions sur
526 $\Bool^{\mathsf{N}}$.
527 La distance de \og totale variation\fg{} entre $\pi$ et $\mu$
528 est notée $\tv{\pi-\mu}$ et est définie par
529 $$\tv{\pi-\mu}=\max_{A\subset \Bool^{\mathsf{N}}} |\pi(A)-\mu(A)|.$$
531 $$\tv{\pi-\mu}=\frac{1}{2}\sum_{X\in\Bool^{\mathsf{N}}}|\pi(X)-\mu(X)|.$$
533 $\nu$ est une distribution on $\Bool^{\mathsf{N}}$, on a
534 $$\tv{\pi-\mu}\leq \tv{\pi-\nu}+\tv{\nu-\mu}.$$
536 Soit $P$ une matrice d'une chaîne de Markov sur $\Bool^{\mathsf{N}}$.
537 $P(X,\cdot)$ est la distribution induite par la $X^{\textrm{ème}}$ colonne
539 Si la chaîne de Markov induite par
540 $P$ a une distribution stationnaire $\pi$, on définit alors
541 $$d(t)=\max_{X\in\Bool^{\mathsf{N}}}\tv{P^t(X,\cdot)-\pi}$$
545 $$t_{\rm mix}(\varepsilon)=\min\{t \mid d(t)\leq \varepsilon\}.$$
547 Intuitivement, $t_{\rm mix}(\varepsilon)$ est le nombre d'itérations nécessaire
548 pour être proche de la distribution stationnaire à $\varepsilon$ prêt,
549 peut importe la configuration de départ. On a le théorème suivant démontré en annexes~\ref{anx:generateur}.
552 \begin{restatable}[Temps de mixage sans chemin hamiltonien]{theorem}{theotpsmix}
553 \label{theo:tmps:mix}
554 On considère un $\mathsf{N}$-cube dans lequel un chemin hamiltonien a été supprimé et la fonction de
555 probabilités $p$ définie sur l'ensemble des arcs comme suit:
559 = \frac{1}{2} + \frac{1}{2\mathsf{N}} \textrm{ si $e=(v,v)$ avec $v \in \Bool^{\mathsf{N}}$,}\\
560 = \frac{1}{2\mathsf{N}} \textrm{ sinon.}
565 La chaîne de Markov associée converge vers la distribution uniforme et
568 \forall \varepsilon >0,\, t_{\rm mix}(\varepsilon) \le 32 {\mathsf{N}}^2+ 16{\mathsf{N}}\ln ({\mathsf{N}}+1) = O(N^2).
574 Sans entrer dans les détails de la preuve, on remarque aussi
575 que le calcul de ce majorant impose uniquement que
576 pour chaque n{\oe}ud du $\mathsf{N}$-cube
577 un arc entrant et un arc sortant sont supprimés.
578 Le fait qu'on enlève un cycle hamiltonien et que ce dernier
579 soit équilibré n'est pas pris en compte.
580 En intégrant cette contrainte, ce majorant pourrait être réduite.
582 En effet, le temps de mixage est en $\Theta(N\ln N)$ lors d'une
583 marche aléatoire classique paresseuse dans le $\mathsf{N}$-cube.
584 On peut ainsi conjecturer que cet ordre de grandeur reste le même
585 dans le contexte du $\mathsf{N}$-cube privé d'un chemin hamiltonien.
587 On peut évaluer ceci pratiquement: pour une fonction
588 $f: \Bool^{\mathsf{N}} \rightarrow \Bool^{\mathsf{N}}$ et une graine initiale
589 $x^0$, le code donné à l'algorithme~\ref{algo:stop} retourne le
590 nombre d'itérations suffisant tel que tous les éléments $\ell\in \llbracket 1,{\mathsf{N}} \rrbracket$ sont équitables. Il permet de déduire une approximation de $E[\ts]$
591 en l'instanciant un grand nombre de fois: pour chaque nombre $\mathsf{N}$,
592 $ 3 \le \mathsf{N} \le 16$, 10 fonctions ont été générées comme dans
593 ce chapitre. Pour chacune d'elle, le calcul d'une approximation de $E[\ts]$
594 est exécuté 10000 fois avec une graine aléatoire. La Figure~\ref{fig:stopping:moy}
595 résume ces résultats. Dans celle-ci, un cercle représente une approximation de
596 $E[\ts]$ pour un $\mathsf{N}$ donné tandis que la courbe est une représentation de
597 la fonction $x \mapsto 2x\ln(2x+8)$.
598 On constate que l'approximation de $E[\ts]$ est largement inférieure
599 à le majorant quadratique donné au théorème~\ref{prop:stop} et que la conjecture
600 donnée au paragraphe précédent est sensée.
603 \begin{algorithm}[ht]
605 \KwIn{a function $f$, an initial configuration $x^0$ ($\mathsf{N}$ bits)}
606 \KwOut{a number of iterations $\textit{nbit}$}
608 $\textit{nbit} \leftarrow 0$\;
610 $\textit{fair}\leftarrow\emptyset$\;
611 \While{$\left\vert{\textit{fair}}\right\vert < \mathsf{N} $}
613 $ s \leftarrow \textit{Random}(\mathsf{N})$ \;
614 $\textit{image} \leftarrow f(x) $\;
615 \If{$\textit{Random}(1) \neq 0$ and $x[s] \neq \textit{image}[s]$}{
616 $\textit{fair} \leftarrow \textit{fair} \cup \{s\}$\;
617 $x[s] \leftarrow \textit{image}[s]$\;
619 $\textit{nbit} \leftarrow \textit{nbit}+1$\;
621 \Return{$\textit{nbit}$}\;
623 \caption{Pseudo Code pour évaluer le temps d'arrêt}
630 \includegraphics[width=0.49\textwidth]{images/complexityET}
631 \caption{Interpolation du temps d'arrêt}\label{fig:stopping:moy}
637 \section{Et les itérations généralisées?}\label{sec:prng:gray:general}
638 Le chapitre précédent a présenté un algorithme de
639 PRNG construit à partir d'itérations unaires.
640 On pourrait penser que cet algorithme est peu efficace puisqu'il
641 dispose d'une fonction $f$ de $\Bool^n$ dans lui même mais il ne modifie à
642 chaque itération qu'un seul élément de $[n]$.
643 On pourrait penser à un algorithme basé sur les itérations généralisées,
644 c'est-à-dire qui modifierait une partie des éléments de $[n]$ à chaque
646 C'est l'algorithme~\ref{CI Algorithm:prng:g} donné ci-après.
648 \begin{algorithm}[ht]
650 \KwIn{une fonction $f$, un nombre d'itérations $b$,
651 une configuration initiale $x^0$ ($n$ bits)}
652 \KwOut{une configuration $x$ ($n$ bits)}
657 $s\leftarrow{\textit{Set}(\textit{Random}(2^n))}$\;
658 $x\leftarrow{F_{f_g}(s,x)}$\;
662 \caption{PRNG basé sur les itérations généralisées.}
663 \label{CI Algorithm:prng:g}
666 Par rapport à l'algorithme~\ref{CI Algorithm} seule
667 la ligne $s\leftarrow{\textit{Set}(\textit{Random}(2^n))}$ est différente.
668 Dans celle-ci la fonction $\textit{Set} : \{1,\ldots,2^n\} \rightarrow
669 \mathcal{P}(\{1,\ldots n\})$ retourne l'ensemble dont la fonction
670 caractéristique serait représentée par le nombre donné en argument.
671 Par exemple, pour $n=3$, l'ensemble $\textit{Set}(6)$ vaudrait $\{3,2\}$.
672 On remarque aussi que l'argument de la fonction $\textit{Random}$
673 passe de $n$ à $2^n$.
675 On a le théorème suivant qui étend le théorème~\ref{thm:prng:u} aux itérations
678 \begin{theorem}\label{thm:prng:g}
679 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\textsc{gig}(f)$ son
680 graphe des itérations généralisées, $\check{M}$ la matrice d'adjacence
681 correspondante à ce graphe
682 et $M$ une matrice $2^n\times 2^n$
684 $M = \dfrac{1}{2^n} \check{M}$.
685 Si $\textsc{gig}(f)$ est fortement connexe, alors
686 la sortie du générateur de nombres pseudo aléatoires détaillé par
687 l'algorithme~\ref{CI Algorithm:prng:g} suit une loi qui
688 tend vers la distribution uniforme si
689 et seulement si $M$ est une matrice doublement stochastique.
692 La preuve de ce théorème est la même que celle du théorème~\ref{thm:prng:u}.
693 Elle n'est donc pas rappelée.
697 On reprend l'exemple donné à la section~\ref{sec:plc}.
698 Dans le $3$-cube, le cycle hamiltonien défini par la séquence
699 $000,100,101,001,011,111,110,010,000$ a été supprimé engendrant
700 la fonction $f^*$ définie par
702 (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
703 \overline{x_1}.\overline{x_3} + x_1x_2).
706 Le graphe $\textsc{gig}(f^*)$ est représenté à la
707 Figure~\ref{fig:iteration:f*}.
708 La matrice de Markov $M$ correspondante est donnée à
709 la figure~\ref{fig:markov:f*}.
713 \subfigure[Graphe $\textsc{gig}(f^*)$
714 \label{fig:iteration:f*}]{
715 \begin{minipage}{0.55\linewidth}
717 \includegraphics[width=\columnwidth]{images/iter_f}%
720 \subfigure[Matrice de Markov associée au $\textsc{gig}(f^*)$
721 \label{fig:markov:f*}]{%
722 \begin{minipage}{0.35\linewidth}
725 $ \dfrac{1}{4} \left(
726 \begin{array}{cccccccc}
727 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
729 1 & 1 & 0 & 0 & 1 & 1 & 0 & 0 \\
731 0 & 0 & 1 & 1 & 0 & 0 & 1 & 1 \\
733 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
735 1 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\
737 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
739 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
741 0 & 1 & 0 & 1 & 0 & 1 & 0 & 1 \\
743 \end{array} \right) $
748 \caption{Représentations de $f^*(x_1,x_2,x_3)=
749 (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
750 \overline{x_1}.\overline{x_3} + x_1x_2)$.}\label{fig1}
760 \begin{tabular}{|c|c|l|c|c|}
762 $n$ & fonction & $f(x)$, $f(x)$ pour $x \in [0,1,2,\hdots,2^n-1]$ & $b$ & $b'$ \\
764 4 & $f^{*4}$ & [13,10,9,14,3,11,1,12,15,4,7,5,2,6,0,8] & \textbf{17} & \textbf{38} \\
766 \multirow{4}{0.5cm}{5}& $f^{*5}$ & [29, 22, 25, 30, 19, 27, 24, 16, 21, 6, 5, 28, 23, 26, 1, & \textbf{13} & 48 \\
767 & & 17, 31, 12, 15, 8, 10, 14, 13, 9, 3, 2, 7, 20, 11, 18, 0, 4] & & \\
769 & $g^{*5}$ & [29, 22, 21, 30, 19, 27, 24, 28, 7, 20, 5, 4, 23, 26, 25, & 15 & \textbf{47} \\
770 & & 17, 31, 12, 15, 8, 10, 14, 13, 9, 3, 2, 1, 6, 11, 18, 0, 16
774 \multirow{8}{0.5cm}{6}& $f^{*6}$ &
775 [55, 60, 45, 56, 58, 42, 61, 40, 53, 50, 52, 54, 59, 34, 33, & \multirow{4}{0.5cm}{\textbf{11}}& \multirow{4}{0.5cm}{55}\\
776 & & 49, 39, 62, 47, 46, 11, 43, 57, 8, 37, 6, 36, 4, 51, 38, 1, & & \\
777 & & 48, 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, & & \\
778 & & 16, 24, 13, 12, 29, 44, 10, 14, 41, 0, 15, 2, 7, 5, 35, 3, 9, 32] & &\\
780 &$g^{*6}$ & [55, 60, 45, 44, 43, 62, 61, 48, 53, 50, 52, 36, 59, 51, 33, & \multirow{4}{0.5cm}{12}& \multirow{4}{0.5cm}{\textbf{54}}\\
781 & & 49, 15, 14, 47, 46, 35, 58, 57, 56, 7, 54, 39, 37, 3, 38, 1, & & \\
782 & & 40, 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, & & \\
783 & & 16, 24, 13, 12, 29, 8, 10, 42, 41, 0, 5, 2, 4, 6, 11, 34, 9, 32] & & \\
785 \multirow{9}{0.5cm}{7} &$f^{*7}$ & [111, 94, 93, 116, 122, 114, 125, 88, 115, 126, 85, 84, 123, & \multirow{9}{0.5cm}{\textbf{10}} & \multirow{9}{0.5cm}{\textbf{63}} \\
786 & & 98, 81, 120, 109, 78, 105, 110, 99, 107, 104, 108, 101, 118, & & \\
787 & & 117, 96, 103, 66, 113, 64, 79, 86, 95, 124, 83, 91, 121, 24, & & \\
788 & & 119, 22, 69, 20, 87, 18, 17, 112, 77, 76, 73, 12, 74, 106, 72, & & \\
789 & & 8, 7, 102, 71, 100, 75, 82, 97, 0, 127, 54, 57, 62, 51, 59, & & \\
790 & & 56, 48, 53, 38, 37, 60, 55, 58, 33, 49, 63, 44, 47, 40, 42, & & \\
791 & & 46, 45, 41, 35, 34, 39, 52, 43, 50, 32, 36, 29, 28, 61, 92, & & \\
792 & & 26, 90, 89, 25, 19, 30, 23, 4, 27, 2, 16, 80, 31, 10, 15, 14, & & \\
793 & & 3, 11, 13, 9, 5, 70, 21, 68, 67, 6, 65, 1] & & \\
795 \multirow{20}{0.5cm}{8} & $f^{*8}$ &
796 [223, 190, 249, 254, 187, 251, 233, 232, 183, 230, 247, 180,&
797 \multirow{20}{0.5cm}{9}&
798 \multirow{20}{0.5cm}{71}\\
799 & & 227, 178, 240, 248, 237, 236, 253, 172, 203, 170, 201, 168,& & \\
800 & & 229, 166, 165, 244, 163, 242, 241, 192, 215, 220, 205, 216,& & \\
801 & & 218, 222, 221, 208, 213, 210, 212, 214, 219, 211, 217, 209,& & \\
802 & & 239, 202, 207, 140, 139, 234, 193, 204, 135, 196, 199, 132,& & \\
803 & & 194, 130, 225, 200, 159, 62, 185, 252, 59, 250, 169, 56, 191,& & \\
804 & & 246, 245, 52, 243, 50, 176, 48, 173, 238, 189, 44, 235, 42,& & \\
805 & & 137, 184, 231, 38, 37, 228, 35, 226, 177, 224, 151, 156, 141,& & \\
806 & & 152, 154, 158, 157, 144, 149, 146, 148, 150, 155, 147, 153,& & \\
807 & & 145, 175, 206, 143, 12, 11, 142, 129, 128, 7, 198, 197, 4, 195,& & \\
808 & & 2, 161, 160, 255, 124, 109, 108, 122, 126, 125, 112, 117, 114,& & \\
809 & & 116, 100, 123, 98, 97, 113, 79, 106, 111, 110, 99, 74, 121,& & \\
810 & & 120, 71, 118, 103, 101, 115, 66, 65, 104, 127, 90, 89, 94, 83,& & \\
811 & & 91, 81, 92, 95, 84, 87, 85, 82, 86, 80, 88, 77, 76, 93, 72,& & \\
812 & & 107, 78, 105, 64, 69, 102, 68, 70, 75, 67, 73, 96, 55, 58, 45,& & \\
813 & & 188, 51, 186, 61, 40, 119, 182, 181, 53, 179, 54, 33, 49, 15,& & \\
814 & & 174, 47, 60, 171, 46, 57, 32, 167, 6, 36, 164, 43, 162, 1, 0,& & \\
815 & & 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, 16,& & \\
816 & & 24, 13, 10, 29, 14, 3, 138, 41, 136, 39, 134, 133, 5, 131,& & \\
822 \caption{Fonctions avec matrices DSCC et le plus faible temps de mélange}\label{table:functions}
825 Le tableau~\ref{table:functions} reprend une synthèse de
826 fonctions qui ont été générées selon la méthode détaillée
827 à la section~\ref{sec:hamiltonian}.
828 Pour chaque nombre $n=3$, $4$, $5$ et $6$,
829 tous les cycles hamiltoniens non isomorphes ont été générés. Pour les
830 valeur de $n=7$ et $8$, seules $10^{5}$ cycles ont été évalués. Parmi
831 toutes les fonctions obtenues en enlevant du $n$-cube ces cycles, n'ont été
832 retenues que celles qui minimisaient le temps de mélange relatif à une valeur de
833 $\epsilon$ fixée à $10^{-8}$ et pour un mode donné.
834 Ce nombre d'itérations (\textit{i.e.}, ce temps de mélange)
835 est stocké dans la troisième
836 colonne sous la variable $b$.
837 La variable $b'$ reprend le temps de mélange pour
838 l'algorithme~\ref{CI Algorithm}.
839 On note que pour un nombre $n$ de bits fixé et un mode donné d'itérations,
840 il peut avoir plusieurs fonctions minimisant ce temps de mélange. De plus, comme ce temps
841 de mélange est construit à partir de la matrice de Markov et que celle-ci dépend
842 du mode, une fonction peut être optimale pour un mode et ne pas l'être pour l'autre
845 Un second résultat est que ce nouvel algorithme réduit grandement le nombre
846 d'itérations suffisant pour obtenir une faible déviation par rapport à une
847 distribution uniforme. On constate de plus que ce nombre décroît avec
848 le nombre d'éléments alors qu'il augmente dans l'approche initiale où
851 Cela s'explique assez simplement. Depuis une configuration initiale, le nombre
852 de configurations qu'on ne peut pas atteindre en une itération est de:
854 \item $2^n-n$ en unaire. Ceci représente un rapport de
855 $\dfrac{2^n-n}{2^n} = 1-\dfrac{n}{2^n}$
856 de toutes les configurations; plus $n$ est grand,
857 plus ce nombre est proche de $1$, et plus grand devient le nombre
858 d'itérations nécessaires pour atteinte une déviation faible;
859 \item $2^n-2^{n-1}$ dans le cas généralisé,
860 soit la moitié de toutes les configurations
861 quel que soit $n$; seul 1 bit reste constant tandis que tous les autres peuvent changer. Plus $n$ grandit, plus la proportion de bits constants diminue.
864 Cependant, dans le cas généralisé, chaque itération a une complexité
865 plus élevée puisqu'il est nécessaire d'invoquer un générateur
866 produisant un nombre pseudo-aléatoire dans $[2^{n}]$ tandis qu'il suffit
867 que celui-ci soit dans $[n]$ dans le cas unaire.
868 Pour comparer les deux approches,
869 on considère que le générateur aléatoire embarqué est binaire, \textit{i.e.} ne génère qu'un bit (0 ou 1).
871 Dans le cas généralisé, si l'on effectue $b$ itérations,
872 à chacune d'elles, la stratégie génère un nombre entre
873 $1$ et $2^n$. Elle fait donc $n$ appels à ce générateur.
874 On fait donc au total $b*n$ appels pour $n$ bits et
875 donc $b$ appels pour 1 bit généré en moyenne.
876 Dans le cas unaire, si l'on effectue $b'$ itérations,
877 à chacune d'elle, la stratégie génère un nombre entre
879 Elle fait donc $\ln(n)/\ln(2)$ appels à ce générateur binaire en moyenne.
880 La démarche fait donc au total $b'*\ln(n)/\ln(2)$ appels pour $n$ bits et
881 donc $b'*\ln(n)/(n*\ln(2))$ appels pour 1 bit généré en moyenne.
882 Le tableau~\ref{table:marchevssaute} donne des instances de
883 ces valeurs pour $n \in\{4,5,6,7,8\}$ et les fonctions
884 données au tableau~\ref{table:functions}.
885 On constate que le nombre d'appels par bit généré décroît avec $n$ dans le
886 cas des itérations généralisées et est toujours plus faible
887 que celui des itérations unaires.
893 \begin{array}{|l|l|l|l|l|l|}
895 \textrm{Itérations} & 4 & 5 & 6 & 7 & 8 \\
897 \textrm{Unaires} & 19.0 & 22.3 & 23.7 & 25.3 & 27.0\\
899 \textrm{Généralisées} & 17 & 13 & 11 & 10 & 9\\
903 \caption{Nombre moyen
904 d'appels à un générateurs binaire par bit généré}\label{table:marchevssaute}
910 \section{Tests statistiques}\label{sec:prng;gray:tests}
912 La qualité des séquences aléatoires produites par
913 le générateur des itérations unaires ainsi que
914 celles issues des itérations généralisées a été évaluée à travers la suite
915 de tests statistiques développée par le
916 \emph{National Institute of Standards and Technology} (NIST).
917 En interne, c'est l'implantation de l'algorithme de Mersenne Twister qui
918 permet de générer la stratégie aléatoire.
923 Pour les 15 tests, le seuil $\alpha$ est fixé à $1\%$:
925 qui est plus grande que $1\%$ signifie
926 que la chaîne est considérée comme aléatoire avec une confiance de $99\%$.
929 Les tableau~\ref{fig:TEST:generalise} donnent
930 une vision synthétique de ces expérimentations.
931 Nous avons évalué les fonctions préfixées par
932 $f$ (respectivement $g$) avec les générateurs issus des itérations
933 généralisées (resp. unaires).
934 Quelle que soit la méthode utilisée, on constate que chacun des
936 avec succès le test de NIST.
938 Interpréter ces résultats en concluant que ces générateurs sont
939 tous équivalents serait erroné: la meilleur des
940 méthodes basées sur le mode des itérations
941 généralisées (pour $n=8$ par exemple)
942 est au moins deux fois plus rapide que la meilleur de celles qui
943 sont basées sur les itérations unaires.
948 %%%%%%%%% Relancer pour n=6, n=7, n=8
949 %%%%%%%%% Recalculer le MT
950 %%%%%%%%% Regenerer les 10^6 bits
951 %%%%%%%%% Evaluer sur NIST
958 \begin{tabular}{|l|r|r|r|r|}
960 Test & $f^{*5}$ &$f^{*6}$ &$f^{*7}$ &$f^{*8}$ \\ \hline
961 Fréquence (Monobit)& 0.401 (0.97)& 0.924 (1.0)& 0.779 (0.98)& 0.883 (0.99)\\ \hline
962 Fréquence ds un bloc& 0.574 (0.98)& 0.062 (1.0)& 0.978 (0.98)& 0.964 (0.98)\\ \hline
963 Somme Cumulé*& 0.598 (0.975)& 0.812 (1.0)& 0.576 (0.99)& 0.637 (0.99)\\ \hline
964 Exécution& 0.998 (0.99)& 0.213 (0.98)& 0.816 (0.98)& 0.494 (1.0)\\ \hline
965 Longue exécution dans un bloc& 0.085 (0.99)& 0.971 (0.99)& 0.474 (1.0)& 0.574 (0.99)\\ \hline
966 Rang& 0.994 (0.96)& 0.779 (1.0)& 0.191 (0.99)& 0.883 (0.99)\\ \hline
967 Fourier rapide& 0.798 (1.0)& 0.595 (0.99)& 0.739 (0.99)& 0.595 (1.0)\\ \hline
968 Patron sans superposition*& 0.521 (0.987)& 0.494 (0.989)& 0.530 (0.990)& 0.520 (0.989)\\ \hline
969 Patron avec superposition& 0.066 (0.99)& 0.040 (0.99)& 0.304 (1.0)& 0.249 (0.98)\\ \hline
970 Statistiques universelles& 0.851 (0.99)& 0.911 (0.99)& 0.924 (0.96)& 0.066 (1.0)\\ \hline
971 Entropie approchée (m=10)& 0.637 (0.99)& 0.102 (0.99)& 0.115 (0.99)& 0.350 (0.98)\\ \hline
972 Suite aléatoire *& 0.573 (0.981)& 0.144 (0.989)& 0.422 (1.0)& 0.314 (0.984)\\ \hline
973 Suite aléatoire variante *& 0.359 (0.968)& 0.401 (0.982)& 0.378 (0.989)& 0.329 (0.985)\\ \hline
974 Série* (m=10)& 0.469 (0.98)& 0.475 (0.995)& 0.473 (0.985)& 0.651 (0.995)\\ \hline
975 Complexité linaire& 0.129 (1.0)& 0.494 (1.0)& 0.062 (1.0)& 0.739 (1.0)\\ \hline
981 \caption{Test de NIST pour les fonctions
982 du tableau~\ref{table:functions} selon les itérations généralisées}\label{fig:TEST:generalise}
989 \begin{tabular}{|l|r|r|r|r|}
991 Test & $g^{*5}$& $g^{*6}$& $f^{*7}$& $f^{*8}$\\ \hline
992 Fréquence (Monobit)& 0.236 (1.0)& 0.867 (0.99)& 0.437 (0.99)& 0.911 (1.0)\\ \hline
993 Fréquence ds un bloc& 0.129 (0.98)& 0.350 (0.99)& 0.366 (0.96)& 0.657 (1.0)\\ \hline
994 Somme Cumulé*& 0.903 (0.995)& 0.931 (0.985)& 0.863 (0.995)& 0.851 (0.995)\\ \hline
995 Exécution& 0.699 (0.98)& 0.595 (0.99)& 0.181 (1.0)& 0.437 (0.99)\\ \hline
996 Longue exécution dans un bloc& 0.009 (0.99)& 0.474 (0.97)& 0.816 (1.0)& 0.051 (1.0)\\ \hline
997 Rang& 0.946 (0.96)& 0.637 (0.98)& 0.494 (1.0)& 0.946 (1.0)\\ \hline
998 Fourier rapide& 0.383 (0.99)& 0.437 (1.0)& 0.616 (0.98)& 0.924 (0.99)\\ \hline
999 Patron sans superposition*& 0.466 (0.990)& 0.540 (0.989)& 0.505 (0.990)& 0.529 (0.991)\\ \hline
1000 Patron avec superposition& 0.202 (0.96)& 0.129 (0.98)& 0.851 (0.99)& 0.319 (0.98)\\ \hline
1001 Statistiques universelles& 0.319 (0.97)& 0.534 (0.99)& 0.759 (1.0)& 0.657 (0.99)\\ \hline
1002 Entropie approchée (m=10)& 0.075 (0.97)& 0.181 (0.99)& 0.213 (0.98)& 0.366 (0.98)\\ \hline
1003 Suite aléatoire *& 0.357 (0.986)& 0.569 (0.991)& 0.539 (0.987)& 0.435 (0.992)\\ \hline
1004 Suite aléatoire variante *& 0.398 (0.989)& 0.507 (0.986)& 0.668 (0.991)& 0.514 (0.994)\\ \hline
1005 Série* (m=10)& 0.859 (0.995)& 0.768 (0.99)& 0.427 (0.995)& 0.637 (0.98)\\ \hline
1006 Complexité linaire& 0.897 (0.99)& 0.366 (0.98)& 0.153 (1.0)& 0.437 (1.0)\\ \hline
1012 \caption{Test de NIST pour les fonctions
1013 du tableau~\ref{table:functions} selon les itérations unaires}\label{fig:TEST:unaire}
1021 \begin{tabular}{|l|r|r|r|r|}
1023 Test & 5 bits& 6 bits & 7 bits & 8bits \\ \hline
1024 Fréquence (Monobit)& 0.289 (1.0)& 0.437 (1.0)& 0.678 (1.0)& 0.153 (0.99)\\ \hline
1025 Fréquence ds un bloc& 0.419 (1.0)& 0.971 (0.98)& 0.419 (0.99)& 0.275 (1.0)\\ \hline
1026 Somme Cumulé*& 0.607 (0.99)& 0.224 (0.995)& 0.645 (0.995)& 0.901 (0.99)\\ \hline
1027 Exécution& 0.129 (0.99)& 0.005 (0.99)& 0.935 (0.98)& 0.699 (0.98)\\ \hline
1028 Longue exécution dans un bloc& 0.514 (1.0)& 0.739 (0.99)& 0.994 (1.0)& 0.834 (0.99)\\ \hline
1029 Rang& 0.455 (0.97)& 0.851 (0.99)& 0.554 (1.0)& 0.964 (0.99)\\ \hline
1030 Fourier rapide& 0.096 (0.98)& 0.955 (0.99)& 0.851 (0.97)& 0.037 (1.0)\\ \hline
1031 Patron sans superposition*& 0.534 (0.990)& 0.524 (0.990)& 0.508 (0.987)& 0.515 (0.99)\\ \hline
1032 Patron avec superposition& 0.699 (0.99)& 0.616 (0.95)& 0.071 (1.0)& 0.058 (1.0)\\ \hline
1033 Statistiques universelles& 0.062 (0.99)& 0.071 (1.0)& 0.637 (1.0)& 0.494 (0.98)\\ \hline
1034 Entropie approchée (m=10)& 0.897 (0.99)& 0.383 (0.99)& 0.366 (1.0)& 0.911 (0.99)\\ \hline
1035 Suite aléatoire *& 0.365 (0.983)& 0.442 (0.994)& 0.579 (0.992)& 0.296 (0.993)\\ \hline
1036 Suite aléatoire variante *& 0.471 (0.978)& 0.559 (0.992)& 0.519 (0.987)& 0.340 (0.995)\\ \hline
1037 Série* (m=10)& 0.447 (0.985)& 0.298 (0.995)& 0.648 (1.0)& 0.352 (0.995)\\ \hline
1038 Complexité linaire& 0.005 (0.98)& 0.534 (0.99)& 0.085 (0.97)& 0.996 (1.0)\\ \hline
1054 \caption{Test de NIST pour l'algorithme de Mersenne Twister}\label{fig:TEST:Mersenne}
1058 \section{Conclusion}
1059 Ce chapitre a montré comment construire un PRNG chaotique, notamment à partir
1060 de codes de Gray équilibrés. Une méthode complètement automatique de
1061 construction de ce type de codes a été présentée étendant les méthodes
1063 Dans le cas des itérations unaires,
1064 l'algorithme qui en découle a un temps de mélange qui a
1065 un majorant quadratique de convergence vers la distribution uniforme.
1066 Pratiquement, ce temps de mélange se rapproche de $N\ln N$.
1067 Les expérimentations au travers de la batterie de test de NIST ont montré
1068 que toutes les propriétés statistiques sont obtenues pour
1069 $\mathsf{N} = 4, 5, 6, 7, 8$.