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 La borne inférieure 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{NT}_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.
442 \begin{theorem}\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} 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.
481 On considère par exemple le graphe $\textsc{giu}(f)$ donné à la
482 \textsc{Figure~\ref{fig:iteration:f*}.} et la fonction de
483 probabilités $p$ définie sur l'ensemble des arcs comme suit:
487 = \frac{2}{3} \textrm{ si $e=(v,v)$ avec $v \in \Bool^3$,}\\
488 = \frac{1}{6} \textrm{ sinon.}
492 La matrice $P$ de la chaîne de Markov associée à $f^*$
495 P=\dfrac{1}{6} \left(
496 \begin{array}{llllllll}
513 Tout d'abord, soit $\pi$ et $\mu$ deux distributions sur
514 $\Bool^{\mathsf{N}}$.
515 La distance de \og totale variation\fg{} entre $\pi$ et $\mu$
516 est notée $\tv{\pi-\mu}$ et est définie par
517 $$\tv{\pi-\mu}=\max_{A\subset \Bool^{\mathsf{N}}} |\pi(A)-\mu(A)|.$$
519 $$\tv{\pi-\mu}=\frac{1}{2}\sum_{X\in\Bool^{\mathsf{N}}}|\pi(X)-\mu(X)|.$$
521 $\nu$ est une distribution on $\Bool^{\mathsf{N}}$, on a
522 $$\tv{\pi-\mu}\leq \tv{\pi-\nu}+\tv{\nu-\mu}.$$
524 Soit $P$ une matrice d'une chaîne de Markov sur $\Bool^{\mathsf{N}}$.
525 $P(X,\cdot)$ est la distribution induite par la $X^{\textrm{ème}}$ colonne
527 Si la chaîne de Markov induite par
528 $P$ a une distribution stationnaire $\pi$, on définit alors
529 $$d(t)=\max_{X\in\Bool^{\mathsf{N}}}\tv{P^t(X,\cdot)-\pi}$$
533 $$t_{\rm mix}(\varepsilon)=\min\{t \mid d(t)\leq \varepsilon\}.$$
535 Un résultat classique est
537 $$t_{\rm mix}(\varepsilon)\leq \lceil\log_2(\varepsilon^{-1})\rceil t_{\rm mix}(\frac{1}{4})$$
542 Soit $(X_t)_{t\in \mathbb{N}}$ une suite de variables aléatoires de
543 $\Bool^{\mathsf{N}}$.
544 une variable aléatoire $\tau$ dans $\mathbb{N}$ est un
545 \emph{temps d'arrêt} pour la suite
546 $(X_i)$ si pour chaque $t$ il existe $B_t\subseteq
547 (\Bool^{\mathsf{N}})^{t+1}$ tel que
548 $\{\tau=t\}=\{(X_0,X_1,\ldots,X_t)\in B_t\}$.
549 En d'autres termes, l'événement $\{\tau = t \}$ dépend uniquement des valeurs
551 $(X_0,X_1,\ldots,X_t)$, et non de celles de $X_k$ pour $k > t$.
554 Soit $(X_t)_{t\in \mathbb{N}}$ une chaîne de Markov et
555 $f(X_{t-1},Z_t)$ une représentation fonctionnelle de celle-ci.
556 Un \emph{temps d'arrêt aléatoire} pour la chaîne de
557 Markov est un temps d'arrêt pour
558 $(Z_t)_{t\in\mathbb{N}}$.
559 Si la chaîne de Markov est irréductible et a $\pi$
560 comme distribution stationnaire, alors un
561 \emph{temps stationnaire} $\tau$ est temps d'arrêt aléatoire
562 (qui peut dépendre de la configuration initiale $X$),
563 tel que la distribution de $X_\tau$ est $\pi$:
564 $$\P_X(X_\tau=Y)=\pi(Y).$$
567 Un temps d'arrêt $\tau$ est qualifié de \emph{fort} si $X_{\tau}$
568 est indépendant de $\tau$. On a les deux théorèmes suivants, dont les
569 démonstrations sont données en annexes~\ref{anx:generateur}.
573 Si $\tau$ est un temps d'arrêt fort, alors $d(t)\leq \max_{X\in\Bool^{\mathsf{N}}}
578 Soit alors $\ov{h} : \Bool^{\mathsf{N}} \rightarrow \Bool^{\mathsf{N}}$ la fonction
579 telle que pour $X \in \Bool^{\mathsf{N}} $,
580 $(X,\ov{h}(X)) \in E$ et $X\oplus\ov{h}(X)=0^{{\mathsf{N}}-h(X)}10^{h(X)-1}$.
581 La fonction $\ov{h}$ est dite {\it anti-involutive} si pour tout $X\in \Bool^{\mathsf{N}}$,
582 $\ov{h}(\ov{h}(X))\neq X$.
585 \begin{theorem} \label{prop:stop}
586 Si $\ov{h}$ est bijective et anti involutive
587 $\ov{h}(\ov{h}(X))\neq X$, alors
588 $E[\ts]\leq 8{\mathsf{N}}^2+ 4{\mathsf{N}}\ln ({\mathsf{N}}+1)$.
591 Les détails de la preuve sont donnés en annexes~\ref{anx:generateur}.
592 On remarque tout d'abord que la chaîne de Markov proposée ne suit pas exactement
593 l'algorithme~\ref{CI Algorithm}. En effet dans la section présente,
594 la probabilité de rester dans une configuration donnée
595 est fixée à $\frac{1}{2}+\frac{1}{2n}$.
596 Dans l'algorithme initial, celle-ci est de $\frac{1}{n}$.
597 Cette version, qui reste davantage sur place que l'algorithme original,
598 a été introduite pour simplifier le calcul de la borne sup
602 Sans entrer dans les détails de la preuve, on remarque aussi
603 que le calcul de cette borne impose uniquement que
604 pour chaque n{\oe}ud du $\mathsf{N}$-cube
605 un arc entrant et un arc sortant sont supprimés.
606 Le fait qu'on enlève un cycle hamiltonien et que ce dernier
607 soit équilibré n'est pas pris en compte.
608 En intégrant cette contrainte, la borne supérieure pourrait être réduite.
610 En effet, le temps de mixage est en $\Theta(N\ln N)$ lors d'une
611 marche aléatoire classique paresseuse dans le $\mathsf{N}$-cube.
612 On peut ainsi conjecturer que cet ordre de grandeur reste le même
613 dans le contexte du $\mathsf{N}$-cube privé d'un chemin hamiltonien.
615 On peut évaluer ceci pratiquement: pour une fonction
616 $f: \Bool^{\mathsf{N}} \rightarrow \Bool^{\mathsf{N}}$ et une graine initiale
617 $x^0$, le code donné à l'algorithme ~\ref{algo:stop} retourne le
618 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]$
619 en l'instanciant un grand nombre de fois: pour chaque nombre $\mathsf{N}$,
620 $ 3 \le \mathsf{N} \le 16$, 10 fonctions ont été générées comme dans
621 ce chapitre. Pour chacune d'elle, le calcul d'une approximation de $E[\ts]$
622 est exécuté 10000 fois avec une graine aléatoire. La Figure~\ref{fig:stopping:moy}
623 résume ces résultats. Dans celle-ci, un cercle représente une approximation de
624 $E[\ts]$ pour un $\mathsf{N}$ donné tandis que la courbe est une représentation de
625 la fonction $x \mapsto 2x\ln(2x+8)$.
626 On constate que l'approximation de $E[\ts]$ est largement inférieure
627 à la borne quadratique donnée au théorème~\ref{prop:stop} et que la conjecture
628 donnée au paragraphe précédent est sensée.
631 \begin{algorithm}[ht]
633 \KwIn{a function $f$, an initial configuration $x^0$ ($\mathsf{N}$ bits)}
634 \KwOut{a number of iterations $\textit{nbit}$}
636 $\textit{nbit} \leftarrow 0$\;
638 $\textit{fair}\leftarrow\emptyset$\;
639 \While{$\left\vert{\textit{fair}}\right\vert < \mathsf{N} $}
641 $ s \leftarrow \textit{Random}(\mathsf{N})$ \;
642 $\textit{image} \leftarrow f(x) $\;
643 \If{$\textit{Random}(1) \neq 0$ and $x[s] \neq \textit{image}[s]$}{
644 $\textit{fair} \leftarrow \textit{fair} \cup \{s\}$\;
645 $x[s] \leftarrow \textit{image}[s]$\;
647 $\textit{nbit} \leftarrow \textit{nbit}+1$\;
649 \Return{$\textit{nbit}$}\;
651 \caption{Pseudo Code pour évaluer le temps d'arrêt}
658 \includegraphics[width=0.49\textwidth]{images/complexityET}
659 \caption{Interpolation du temps d'arrêt}\label{fig:stopping:moy}
665 \section{Et les itérations généralisées?}\label{sec:prng:gray:general}
666 Le chapitre précédent a présenté un algorithme de
667 PRNG construit à partir d'itérations unaires.
668 On pourrait penser que cet algorithme est peu efficace puisqu'il
669 dispose d'une fonction $f$ de $\Bool^n$ dans lui même mais il ne modifie à
670 chaque itération qu'un seul élément de $[n]$.
671 On pourrait penser à un algorithme basé sur les itérations généralisées,
672 c'est-à-dire qui modifierait une partie des éléments de $[n]$ à chaque
674 C'est l'algorithme~\ref{CI Algorithm:prng:g} donné ci-après.
676 \begin{algorithm}[ht]
678 \KwIn{une fonction $f$, un nombre d'itérations $b$,
679 une configuration initiale $x^0$ ($n$ bits)}
680 \KwOut{une configuration $x$ ($n$ bits)}
685 $s\leftarrow{\textit{Set}(\textit{Random}(2^n))}$\;
686 $x\leftarrow{F_{f_g}(s,x)}$\;
690 \caption{PRNG basé sur les itérations généralisées.}
691 \label{CI Algorithm:prng:g}
694 Par rapport à l'algorithme~\ref{CI Algorithm} seule
695 la ligne $s\leftarrow{\textit{Set}(\textit{Random}(2^n))}$ est différente.
696 Dans celle-ci la fonction $\textit{Set} : \{1,\ldots,2^n\} \rightarrow
697 \mathcal{P}(\{1,\ldots n\})$ retourne l'ensemble dont la fonction
698 caractéristique serait représentée par le nombre donné en argument.
699 Par exemple, pour $n=3$, l'ensemble $\textit{Set}(6)$ vaudrait $\{3,2\}$.
700 On remarque aussi que l'argument de la fonction $\textit{Random}$
701 passe de $n$ à $2^n$.
703 On a le théorème suivant qui étend le théorème~\ref{thm:prng:u} aux itérations
706 \begin{theorem}\label{thm:prng:g}
707 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\textsc{gig}(f)$ son
708 graphe des itérations généralisées, $\check{M}$ la matrice d'adjacence
709 correspondante à ce graphe
710 et $M$ une matrice $2^n\times 2^n$
712 $M = \dfrac{1}{2^n} \check{M}$.
713 Si $\textsc{gig}(f)$ est fortement connexe, alors
714 la sortie du générateur de nombres pseudo aléatoires détaillé par
715 l'algorithme~\ref{CI Algorithm:prng:g} suit une loi qui
716 tend vers la distribution uniforme si
717 et seulement si $M$ est une matrice doublement stochastique.
720 La preuve de ce théorème est la même que celle du théorème~\ref{thm:prng:u}.
721 Elle n'est donc pas rappelée.
725 On reprend l'exemple donné à la section~\ref{sec:plc}.
726 Dans le $3$-cube, le cycle hamiltonien défini par la séquence
727 $000,100,101,001,011,111,110,010,000$ a été supprimé engendrant
728 la fonction $f^*$ définie par
730 (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
731 \overline{x_1}.\overline{x_3} + x_1x_2).
734 Le graphe $\textsc{gig}(f^*)$ est représenté à la
735 Figure~\ref{fig:iteration:f*}.
736 La matrice de Markov $M$ correspondante est donnée à
737 la figure~\ref{fig:markov:f*}.
741 \subfigure[Graphe $\textsc{gig}(f^*)$
742 \label{fig:iteration:f*}]{
743 \begin{minipage}{0.55\linewidth}
745 \includegraphics[width=\columnwidth]{images/iter_f}%
748 \subfigure[Matrice de Markov associée au $\textsc{gig}(f^*)$
749 \label{fig:markov:f*}]{%
750 \begin{minipage}{0.35\linewidth}
753 $ \dfrac{1}{4} \left(
754 \begin{array}{cccccccc}
755 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
757 1 & 1 & 0 & 0 & 1 & 1 & 0 & 0 \\
759 0 & 0 & 1 & 1 & 0 & 0 & 1 & 1 \\
761 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\
763 1 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\
765 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
767 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
769 0 & 1 & 0 & 1 & 0 & 1 & 0 & 1 \\
771 \end{array} \right) $
776 \caption{Représentations de $f^*(x_1,x_2,x_3)=
777 (x_2 \oplus x_3, \overline{x_1}.\overline{x_3} + x_1\overline{x_2},
778 \overline{x_1}.\overline{x_3} + x_1x_2)$.}\label{fig1}
788 \begin{tabular}{|c|c|l|c|c|}
790 $n$ & fonction & $f(x)$, $f(x)$ pour $x \in [0,1,2,\hdots,2^n-1]$ & $b$ & $b'$ \\
792 4 & $f^{*4}$ & [13,10,9,14,3,11,1,12,15,4,7,5,2,6,0,8] & \textbf{17} & \textbf{38} \\
794 \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 \\
795 & & 17, 31, 12, 15, 8, 10, 14, 13, 9, 3, 2, 7, 20, 11, 18, 0, 4] & & \\
797 & $g^{*5}$ & [29, 22, 21, 30, 19, 27, 24, 28, 7, 20, 5, 4, 23, 26, 25, & 15 & \textbf{47} \\
798 & & 17, 31, 12, 15, 8, 10, 14, 13, 9, 3, 2, 1, 6, 11, 18, 0, 16
802 \multirow{8}{0.5cm}{6}& $f^{*6}$ &
803 [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}\\
804 & & 49, 39, 62, 47, 46, 11, 43, 57, 8, 37, 6, 36, 4, 51, 38, 1, & & \\
805 & & 48, 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, & & \\
806 & & 16, 24, 13, 12, 29, 44, 10, 14, 41, 0, 15, 2, 7, 5, 35, 3, 9, 32] & &\\
808 &$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}}\\
809 & & 49, 15, 14, 47, 46, 35, 58, 57, 56, 7, 54, 39, 37, 3, 38, 1, & & \\
810 & & 40, 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, & & \\
811 & & 16, 24, 13, 12, 29, 8, 10, 42, 41, 0, 5, 2, 4, 6, 11, 34, 9, 32] & & \\
813 \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}} \\
814 & & 98, 81, 120, 109, 78, 105, 110, 99, 107, 104, 108, 101, 118, & & \\
815 & & 117, 96, 103, 66, 113, 64, 79, 86, 95, 124, 83, 91, 121, 24, & & \\
816 & & 119, 22, 69, 20, 87, 18, 17, 112, 77, 76, 73, 12, 74, 106, 72, & & \\
817 & & 8, 7, 102, 71, 100, 75, 82, 97, 0, 127, 54, 57, 62, 51, 59, & & \\
818 & & 56, 48, 53, 38, 37, 60, 55, 58, 33, 49, 63, 44, 47, 40, 42, & & \\
819 & & 46, 45, 41, 35, 34, 39, 52, 43, 50, 32, 36, 29, 28, 61, 92, & & \\
820 & & 26, 90, 89, 25, 19, 30, 23, 4, 27, 2, 16, 80, 31, 10, 15, 14, & & \\
821 & & 3, 11, 13, 9, 5, 70, 21, 68, 67, 6, 65, 1] & & \\
823 \multirow{20}{0.5cm}{8} & $f^{*8}$ &
824 [223, 190, 249, 254, 187, 251, 233, 232, 183, 230, 247, 180,&
825 \multirow{20}{0.5cm}{9}&
826 \multirow{20}{0.5cm}{71}\\
827 & & 227, 178, 240, 248, 237, 236, 253, 172, 203, 170, 201, 168,& & \\
828 & & 229, 166, 165, 244, 163, 242, 241, 192, 215, 220, 205, 216,& & \\
829 & & 218, 222, 221, 208, 213, 210, 212, 214, 219, 211, 217, 209,& & \\
830 & & 239, 202, 207, 140, 139, 234, 193, 204, 135, 196, 199, 132,& & \\
831 & & 194, 130, 225, 200, 159, 62, 185, 252, 59, 250, 169, 56, 191,& & \\
832 & & 246, 245, 52, 243, 50, 176, 48, 173, 238, 189, 44, 235, 42,& & \\
833 & & 137, 184, 231, 38, 37, 228, 35, 226, 177, 224, 151, 156, 141,& & \\
834 & & 152, 154, 158, 157, 144, 149, 146, 148, 150, 155, 147, 153,& & \\
835 & & 145, 175, 206, 143, 12, 11, 142, 129, 128, 7, 198, 197, 4, 195,& & \\
836 & & 2, 161, 160, 255, 124, 109, 108, 122, 126, 125, 112, 117, 114,& & \\
837 & & 116, 100, 123, 98, 97, 113, 79, 106, 111, 110, 99, 74, 121,& & \\
838 & & 120, 71, 118, 103, 101, 115, 66, 65, 104, 127, 90, 89, 94, 83,& & \\
839 & & 91, 81, 92, 95, 84, 87, 85, 82, 86, 80, 88, 77, 76, 93, 72,& & \\
840 & & 107, 78, 105, 64, 69, 102, 68, 70, 75, 67, 73, 96, 55, 58, 45,& & \\
841 & & 188, 51, 186, 61, 40, 119, 182, 181, 53, 179, 54, 33, 49, 15,& & \\
842 & & 174, 47, 60, 171, 46, 57, 32, 167, 6, 36, 164, 43, 162, 1, 0,& & \\
843 & & 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, 16,& & \\
844 & & 24, 13, 10, 29, 14, 3, 138, 41, 136, 39, 134, 133, 5, 131,& & \\
850 \caption{Fonctions avec matrices DSCC et le plus faible temps de mélange}\label{table:functions}
853 Le tableau~\ref{table:functions} reprend une synthèse de
854 fonctions qui ont été générées selon la méthode détaillée
855 à la section~\ref{sec:hamiltonian}.
856 Pour chaque nombre $n=3$, $4$, $5$ et $6$,
857 tous les cycles hamiltoniens non isomorphes ont été générés. Pour les
858 valeur de $n=7$ et $8$, seules $10^{5}$ cycles ont été évalués. Parmi
859 toutes les fonctions obtenues en enlevant du $n$-cube ces cycles, n'ont été
860 retenues que celles qui minimisaient le temps de mélange relatif à une valeur de
861 $\epsilon$ fixée à $10^{-8}$ et pour un mode donné.
862 Ce nombre d'itérations (\textit{i.e.}, ce temps de mélange)
863 est stocké dans la troisième
864 colonne sous la variable $b$.
865 La variable $b'$ reprend le temps de mélange pour
866 l'algorithme~\ref{CI Algorithm}.
867 On note que pour un nombre $n$ de bits fixé et un mode donné d'itérations,
868 il peut avoir plusieurs fonctions minimisant ce temps de mélange. De plus, comme ce temps
869 de mélange est construit à partir de la matrice de Markov et que celle-ci dépend
870 du mode, une fonction peut être optimale pour un mode et ne pas l'être pour l'autre
873 Un second résultat est que ce nouvel algorithme réduit grandement le nombre
874 d'itérations suffisant pour obtenir une faible déviation par rapport à une
875 distribution uniforme. On constate de plus que ce nombre décroît avec
876 le nombre d'éléments alors qu'il augmente dans l'approche initiale où
879 Cela s'explique assez simplement. Depuis une configuration initiale, le nombre
880 de configurations qu'on ne peut pas atteindre en une itération est de:
882 \item $2^n-n$ en unaire. Ceci représente un rapport de
883 $\dfrac{2^n-n}{2^n} = 1-\dfrac{n}{2^n}$
884 de toutes les configurations; plus $n$ est grand,
885 plus ce nombre est proche de $1$, et plus grand devient le nombre
886 d'itérations nécessaires pour atteinte une déviation faible;
887 \item $2^n-2^{n-1}$ dans le cas généralisé,
888 soit la moitié de toutes les configurations
889 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.
892 Cependant, dans le cas généralisé, chaque itération a une complexité
893 plus élevée puisqu'il est nécessaire d'invoquer un générateur
894 produisant un nombre pseudo-aléatoire dans $[2^{n}]$ tandis qu'il suffit
895 que celui-ci soit dans $[n]$ dans le cas unaire.
896 Pour comparer les deux approches,
897 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).
899 Dans le cas généralisé, si l'on effectue $b$ itérations,
900 à chacune d'elles, la stratégie génère un nombre entre
901 $1$ et $2^n$. Elle fait donc $n$ appels à ce générateur.
902 On fait donc au total $b*n$ appels pour $n$ bits et
903 donc $b$ appels pour 1 bit généré en moyenne.
904 Dans le cas unaire, si l'on effectue $b'$ itérations,
905 à chacune d'elle, la stratégie génère un nombre entre
907 Elle fait donc $\ln(n)/\ln(2)$ appels à ce générateur binaire en moyenne.
908 La démarche fait donc au total $b'*\ln(n)/\ln(2)$ appels pour $n$ bits et
909 donc $b'*\ln(n)/(n*\ln(2))$ appels pour 1 bit généré en moyenne.
910 Le tableau~\ref{table:marchevssaute} donne des instances de
911 ces valeurs pour $n \in\{4,5,6,7,8\}$ et les fonctions
912 données au tableau~\ref{table:functions}.
913 On constate que le nombre d'appels par bit généré décroît avec $n$ dans le
914 cas des itérations généralisées et est toujours plus faible
915 que celui des itérations unaires.
921 \begin{array}{|l|l|l|l|l|l|}
923 \textrm{Itérations} & 4 & 5 & 6 & 7 & 8 \\
925 \textrm{Unaires} & 19.0 & 22.3 & 23.7 & 25.3 & 27.0\\
927 \textrm{Généralisées} & 17 & 13 & 11 & 10 & 9\\
931 \caption{Nombre moyen
932 d'appels à un générateurs binaire par bit généré}\label{table:marchevssaute}
938 \section{Tests statistiques}\label{sec:prng;gray:tests}
940 La qualité des séquences aléatoires produites par
941 le générateur des itérations unaires ainsi que
942 celles issues des itérations généralisées a été évaluée à travers la suite
943 de tests statistiques développée par le
944 \emph{National Institute of Standards and Technology} (NIST).
945 En interne, c'est l'implantation de l'algorithme de Mersenne Twister qui
946 permet de générer la stratégie aléatoire.
951 Pour les 15 tests, le seuil $\alpha$ est fixé à $1\%$:
953 qui est plus grande que $1\%$ signifie
954 que la chaîne est considérée comme aléatoire avec une confiance de $99\%$.
957 Les tableau~\ref{fig:TEST:generalise} donnent
958 une vision synthétique de ces expérimentations.
959 Nous avons évalué les fonctions préfixées par
960 $f$ (respectivement $g$) avec les générateurs issus des itérations
961 généralisées (resp. unaires).
962 Quelle que soit la méthode utilisée, on constate que chacun des
964 avec succès le test de NIST.
966 Interpréter ces résultats en concluant que ces générateurs sont
967 tous équivalents serait erroné: la meilleur des
968 méthodes basées sur le mode des itérations
969 généralisées (pour $n=8$ par exemple)
970 est au moins deux fois plus rapide que la meilleur de celles qui
971 sont basées sur les itérations unaires.
976 %%%%%%%%% Relancer pour n=6, n=7, n=8
977 %%%%%%%%% Recalculer le MT
978 %%%%%%%%% Regenerer les 10^6 bits
979 %%%%%%%%% Evaluer sur NIST
986 \begin{tabular}{|l|r|r|r|r|}
988 Test & $f^{*5}$ &$f^{*6}$ &$f^{*7}$ &$f^{*8}$ \\ \hline
989 Fréquence (Monobit)& 0.401 (0.97)& 0.924 (1.0)& 0.779 (0.98)& 0.883 (0.99)\\ \hline
990 Fréquence ds un bloc& 0.574 (0.98)& 0.062 (1.0)& 0.978 (0.98)& 0.964 (0.98)\\ \hline
991 Somme Cumulé*& 0.598 (0.975)& 0.812 (1.0)& 0.576 (0.99)& 0.637 (0.99)\\ \hline
992 Exécution& 0.998 (0.99)& 0.213 (0.98)& 0.816 (0.98)& 0.494 (1.0)\\ \hline
993 Longue exécution dans un bloc& 0.085 (0.99)& 0.971 (0.99)& 0.474 (1.0)& 0.574 (0.99)\\ \hline
994 Rang& 0.994 (0.96)& 0.779 (1.0)& 0.191 (0.99)& 0.883 (0.99)\\ \hline
995 Fourier rapide& 0.798 (1.0)& 0.595 (0.99)& 0.739 (0.99)& 0.595 (1.0)\\ \hline
996 Patron sans superposition*& 0.521 (0.987)& 0.494 (0.989)& 0.530 (0.990)& 0.520 (0.989)\\ \hline
997 Patron avec superposition& 0.066 (0.99)& 0.040 (0.99)& 0.304 (1.0)& 0.249 (0.98)\\ \hline
998 Statistiques universelles& 0.851 (0.99)& 0.911 (0.99)& 0.924 (0.96)& 0.066 (1.0)\\ \hline
999 Entropie approchée (m=10)& 0.637 (0.99)& 0.102 (0.99)& 0.115 (0.99)& 0.350 (0.98)\\ \hline
1000 Suite aléatoire *& 0.573 (0.981)& 0.144 (0.989)& 0.422 (1.0)& 0.314 (0.984)\\ \hline
1001 Suite aléatoire variante *& 0.359 (0.968)& 0.401 (0.982)& 0.378 (0.989)& 0.329 (0.985)\\ \hline
1002 Série* (m=10)& 0.469 (0.98)& 0.475 (0.995)& 0.473 (0.985)& 0.651 (0.995)\\ \hline
1003 Complexité linaire& 0.129 (1.0)& 0.494 (1.0)& 0.062 (1.0)& 0.739 (1.0)\\ \hline
1009 \caption{Test de NIST pour les fonctions
1010 du tableau~\ref{table:functions} selon les itérations généralisées}\label{fig:TEST:generalise}
1017 \begin{tabular}{|l|r|r|r|r|}
1019 Test & $g^{*5}$& $g^{*6}$& $f^{*7}$& $f^{*8}$\\ \hline
1020 Fréquence (Monobit)& 0.236 (1.0)& 0.867 (0.99)& 0.437 (0.99)& 0.911 (1.0)\\ \hline
1021 Fréquence ds un bloc& 0.129 (0.98)& 0.350 (0.99)& 0.366 (0.96)& 0.657 (1.0)\\ \hline
1022 Somme Cumulé*& 0.903 (0.995)& 0.931 (0.985)& 0.863 (0.995)& 0.851 (0.995)\\ \hline
1023 Exécution& 0.699 (0.98)& 0.595 (0.99)& 0.181 (1.0)& 0.437 (0.99)\\ \hline
1024 Longue exécution dans un bloc& 0.009 (0.99)& 0.474 (0.97)& 0.816 (1.0)& 0.051 (1.0)\\ \hline
1025 Rang& 0.946 (0.96)& 0.637 (0.98)& 0.494 (1.0)& 0.946 (1.0)\\ \hline
1026 Fourier rapide& 0.383 (0.99)& 0.437 (1.0)& 0.616 (0.98)& 0.924 (0.99)\\ \hline
1027 Patron sans superposition*& 0.466 (0.990)& 0.540 (0.989)& 0.505 (0.990)& 0.529 (0.991)\\ \hline
1028 Patron avec superposition& 0.202 (0.96)& 0.129 (0.98)& 0.851 (0.99)& 0.319 (0.98)\\ \hline
1029 Statistiques universelles& 0.319 (0.97)& 0.534 (0.99)& 0.759 (1.0)& 0.657 (0.99)\\ \hline
1030 Entropie approchée (m=10)& 0.075 (0.97)& 0.181 (0.99)& 0.213 (0.98)& 0.366 (0.98)\\ \hline
1031 Suite aléatoire *& 0.357 (0.986)& 0.569 (0.991)& 0.539 (0.987)& 0.435 (0.992)\\ \hline
1032 Suite aléatoire variante *& 0.398 (0.989)& 0.507 (0.986)& 0.668 (0.991)& 0.514 (0.994)\\ \hline
1033 Série* (m=10)& 0.859 (0.995)& 0.768 (0.99)& 0.427 (0.995)& 0.637 (0.98)\\ \hline
1034 Complexité linaire& 0.897 (0.99)& 0.366 (0.98)& 0.153 (1.0)& 0.437 (1.0)\\ \hline
1040 \caption{Test de NIST pour les fonctions
1041 du tableau~\ref{table:functions} selon les itérations unaires}\label{fig:TEST:unaire}
1049 \begin{tabular}{|l|r|r|r|r|}
1051 Test & 5 bits& 6 bits & 7 bits & 8bits \\ \hline
1052 Fréquence (Monobit)& 0.289 (1.0)& 0.437 (1.0)& 0.678 (1.0)& 0.153 (0.99)\\ \hline
1053 Fréquence ds un bloc& 0.419 (1.0)& 0.971 (0.98)& 0.419 (0.99)& 0.275 (1.0)\\ \hline
1054 Somme Cumulé*& 0.607 (0.99)& 0.224 (0.995)& 0.645 (0.995)& 0.901 (0.99)\\ \hline
1055 Exécution& 0.129 (0.99)& 0.005 (0.99)& 0.935 (0.98)& 0.699 (0.98)\\ \hline
1056 Longue exécution dans un bloc& 0.514 (1.0)& 0.739 (0.99)& 0.994 (1.0)& 0.834 (0.99)\\ \hline
1057 Rang& 0.455 (0.97)& 0.851 (0.99)& 0.554 (1.0)& 0.964 (0.99)\\ \hline
1058 Fourier rapide& 0.096 (0.98)& 0.955 (0.99)& 0.851 (0.97)& 0.037 (1.0)\\ \hline
1059 Patron sans superposition*& 0.534 (0.990)& 0.524 (0.990)& 0.508 (0.987)& 0.515 (0.99)\\ \hline
1060 Patron avec superposition& 0.699 (0.99)& 0.616 (0.95)& 0.071 (1.0)& 0.058 (1.0)\\ \hline
1061 Statistiques universelles& 0.062 (0.99)& 0.071 (1.0)& 0.637 (1.0)& 0.494 (0.98)\\ \hline
1062 Entropie approchée (m=10)& 0.897 (0.99)& 0.383 (0.99)& 0.366 (1.0)& 0.911 (0.99)\\ \hline
1063 Suite aléatoire *& 0.365 (0.983)& 0.442 (0.994)& 0.579 (0.992)& 0.296 (0.993)\\ \hline
1064 Suite aléatoire variante *& 0.471 (0.978)& 0.559 (0.992)& 0.519 (0.987)& 0.340 (0.995)\\ \hline
1065 Série* (m=10)& 0.447 (0.985)& 0.298 (0.995)& 0.648 (1.0)& 0.352 (0.995)\\ \hline
1066 Complexité linaire& 0.005 (0.98)& 0.534 (0.99)& 0.085 (0.97)& 0.996 (1.0)\\ \hline
1082 \caption{Test de NIST pour l'algorithme de Mersenne Twister}\label{fig:TEST:Mersenne}
1086 \section{Conclusion}
1087 Ce chaptitre a montré comment construire un PRNG chaotique, notamment à partir
1088 de codes de Gray équilibrés. Une méthode complètement automatique de
1089 construction de ce type de codes a été présentée étendant les méthodes
1091 Dans le cas des itérations unaires,
1092 l'algorithme qui en découle a un temps de mélange qui a
1093 une borne sup quadratique de convergence vers la distribution uniforme.
1094 Pratiquement, ce temps de mélange se rapproche de $N\ln N$.
1095 Les expérimentations au travers de la batterie de test de NIST ont montré
1096 que toutes les propriétés statistiques sont obtenues pour
1097 $\mathsf{N} = 4, 5, 6, 7, 8$.