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