1 Au bout d'un nombre $b$ d'itérations,
2 si la fonction, notée $G_{f_u}$ (ou bien $G_{f_g}$)
3 présentée au chapitre~\ref{chap:carachaos},
4 a de \og bonnes\fg{} propriétés chaotiques,
5 le mot $x^b$ devrait \og sembler ne plus dépendre\fg{} de $x^0$.
6 On peut penser à exploiter une de ces fonctions $G_f$
7 comme un générateur aléatoire.
9 Ce chapitre présente donc une application directe
10 de la théorie développée ci-avant
11 à la génération de nombres pseudo-aléatoires.
12 La section~\ref{sub:prng:algo}
13 présente tout d'abord l'algorithme de PRNG. La contrainte de
14 distribution uniforme de la sortie est discutée dans cette section.
15 La chaoticité du générateur est ensuite étudiée en
16 section~\ref{prng:unaire:chaos}.
17 La section~\ref{sub:prng:algo} a été publiée à ~\cite{bcgw11:ip,bcgr11:ip}.
20 \section{ Nombres pseudo-aléatoires construits par itérations unaires}\label{sub:prng:algo}
29 \KwIn{une fonction $f$, un nombre d'itérations $b$,
30 une configuration initiale $x^0$ (${\mathsf{N}}$ bits)}
31 \KwOut{une configuration $x$ (${\mathsf{N}}$ bits)}
33 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
36 $s\leftarrow{\textit{Random}({\mathsf{N}})}$\;
37 %$s\leftarrow{\textit{XORshift}(n)}$\;
38 $x\leftarrow{F_{f_u}(x,s)}$\;
42 \caption{PRNG basé sur les itérations unaires.}
46 \subsection{Algorithme d'un générateur}
47 On peut penser à construire un générateur de nombres
48 pseudo-aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
51 Celui-ci prend en entrée: une fonction $f$;
52 un entier $b$, qui est le nombre d'itérations à effectuer entre deux sorties
53 et une configuration initiale $x^0$.
54 Il retourne une nouvelle configuration $x$ en appliquant
55 la fonction $F_{f_u}$ (équation~\ref{eq:iterations:unaires}
56 vue au chapitre~\ref{chap:carachaos}) et correspondant
57 à des itérations unaires.
58 En interne, il exploite un algorithme de génération
59 de nombres pseudo-aléatoires donné en paramètre.
60 Cela peut être n'importe quel PRNG (XORshift, Mersenne-Twister) dont la
61 sortie est uniformément distribuée.
62 Notre approche vise a donner des propriétés de chaos à ce générateur embarqué.
65 % \textit{Random}$(l)$.
66 % Cet algorithme est utilisée dans notre générateur pour construire la longueur
67 % de la stratégie ainsi que les éléments qui la composent.
68 % Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$
69 % selon une distribution uniforme et utilise
70 % \textit{XORshift} qui est une classe de générateurs de
71 % nombres pseudo aléatoires conçus par George Marsaglia.
74 % L'algorithme \textit{XORshift}
75 % exploite itérativement l'opérateur $\oplus$
76 % sur des nombres obtenus grâce à des décalages de bits.
77 % Cet opérateur, défini dans $\Bool^{n}$,
78 % applique la fonction \og xor \fg{}
79 % aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
80 % Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné
83 % \begin{algorithm}[h]
85 % \KwIn{la configuration interne $z$ (un mot de 32-bit)}
86 % \KwOut{$y$ (un mot de 32-bits)}
87 % $z\leftarrow{z\oplus{(z\ll13)}}$\;
88 % $z\leftarrow{z\oplus{(z\gg17)}}$\;
89 % $z\leftarrow{z\oplus{(z\ll5)}}$\;
93 % \caption{Une boucle de l'algorithme de \textit{XORshift}}
98 Nous avons vu au chapitre~\ref{chap:carachaos} que
99 $G_{f_u}$ est chaotique dans l'espace $\mathcal{X}_u$
100 si et seulement si le graphe d'itérations $\textsc{giu}(f)$
101 est fortement connexe.
102 Pour $b=1$, l'algorithme itère la fonction $F_{f_u}$.
104 Pour simuler au mieux l'aléa, un bon générateur de nombres pseudo-aléatoires
105 se doit de fournir des nombres selon une distribution uniforme.
106 Regardons comment l'uniformité de la distribution
107 contraint la fonction $f$ à itérer.
109 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
111 Une matrice stochastique est une matrice carrée
112 dont tous les éléments sont positifs ou nuls et dont
113 la somme de chaque ligne
115 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
116 Enfin, une matrice stochastique de taille $n \times n$ est régulière
117 si la propriété suivante est établie:
118 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
120 On énonce le théorème classique suivant liant les
121 vecteurs de probabilités
122 et les chaînes de Markov.
127 \begin{theorem}\label{th}
128 Si $M$ est une matrice stochastique régulière, alors $M$
129 possède un unique vecteur stationnaire de probabilités $\pi$
131 De plus, si $\pi^0$ est un {vecteur de probabilités}
133 la suite $(\pi^{k})^{k \in \Nats}$ par
134 $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$
135 alors la {chaîne de Markov} $\pi^k$
136 converge vers $\pi$ lorsque $k$ tend vers l'infini.
140 Montrons sur un exemple jouet à deux éléments
141 que ce théorème permet de vérifier si la sortie d'un générateur de
142 nombres pseudo-aléatoires est uniformément distribuée ou non.
143 Soient alors $g$ et $h$ deux fonctions de $\Bool^2$
144 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
145 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
146 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
147 vérifient les hypothèses du théorème~\ref{th:Adrien}.
148 Leurs graphes d'itérations
149 sont donc fortement connexes, ce que l'on peut vérifier aux figures~\ref{fig:g:iter}
151 \textit{A priori}, ces deux fonctions pourraient être intégrées
152 dans un générateur de nombres pseudo-aléatoires. Montrons que ce n'est pas le cas pour $g$ et
153 que cela l'est pour $h$.
165 \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
166 \begin{minipage}{0.40\textwidth}
168 \includegraphics[height=4cm]{images/g.pdf}
173 \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
174 \begin{minipage}{0.40\textwidth}
176 \includegraphics[height=4cm]{images/h.pdf}
181 \caption{Graphes des itérations unaires
182 de fonctions booléennes dans $\Bool^2$}
183 \label{fig:xplgraphIter}
196 \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
197 \begin{minipage}{0.40\textwidth}
199 \includegraphics[height=3cm]{images/gp.pdf}
204 \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
205 \begin{minipage}{0.40\textwidth}
207 \includegraphics[height=3cm]{images/hp.pdf}
212 \caption{Graphes d'interactions de fonctions booléennes dans $\Bool^2$}
213 \label{fig:xplgraphInter}
221 Comme le générateur \textit{Random} possède une sortie uniformément
222 distribuée, la stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
224 pour tout sommet de $\textsc{giu}(g)$ et de $\textsc{giu}(h)$,
225 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant
226 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
227 En d'autres mots, $\textsc{giu}(g)$ est le graphe orienté d'une chaîne de Markov.
228 Il est facile de vérifier que la matrice de transitions
230 est $M_g = \frac{1}{2} \check{M}_g$,
231 où $\check{M}_g$ est la matrice d' adjacence donnée en
232 figure~\ref{fig:g:incidence} (voir ci-après), et de manière similaire pour $M_h$.
236 \subfigure[$\check{M}_g $.]{
237 \begin{minipage}{0.25\textwidth}
251 \label{fig:g:incidence}
253 \subfigure[$\check{M}_h $.]{
254 \begin{minipage}{0.25\textwidth}
267 \label{fig:h:incidence}
270 \caption{Graphe des fonctions candidates avec $n=2$}
274 Les deux matrices $M_g$ et $M_h$ sont stochastiques. Pour
275 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de
276 $M^5_g$ ni de $M^3_h$ n'est nul.
277 De plus, les vecteurs de probabilités
278 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
279 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$
280 vérifient $\pi_g M_g = \pi_g$ et
282 Alors d'après le théorème~\ref{th},
283 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a
284 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et
285 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$.
286 Ainsi la chaîne de Markov associée à $h$ tend vers une
287 distribution uniforme, contrairement à celle associée à $g$.
288 On en déduit que $g$ ne devrait pas être itérée dans
289 un générateur de nombres pseudo-aléatoires.
291 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm},
292 pour peu que le nombre $b$ d'itérations entre deux mesures successives
293 de valeurs soit suffisamment grand de sorte que
294 le vecteur d’état de la chaîne de Markov
295 ait une distribution suffisamment proche de la distribution uniforme.
297 On énonce directement le théorème suivant dont la preuve est donnée en annexe~\ref{anx:generateur}.
299 \begin{restatable}[Uniformité de la sortie de l'algorithme~\ref{CI Algorithm}]{theorem}{PrngCIUniforme}\label{thm:prng:u}
300 Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\textsc{giu}(f)$ son
301 graphe d'itérations , $\check{M}$ sa matrice d'adjacence
302 et $M$ une matrice $2^n\times 2^n$
304 $M = \dfrac{1}{n} \check{M}$.
305 Si $\textsc{giu}(f)$ est fortement connexe, alors
306 la sortie du générateur de nombres pseudo-aléatoires détaillé par
307 l'algorithme~\ref{CI Algorithm} suit une loi qui
308 tend vers la distribution uniforme si
309 et seulement si $M$ est une matrice doublement stochastique.
313 \subsection{Quelques exemples}
315 On considère le graphe d'interactions $\Gamma(f)$ donné
316 en figure~\ref{fig:G}. C'est le même qui a été présenté
317 à la section~\ref{sec:11FCT}.
318 On a vu qu'il y avait 520 fonctions $f$ non isomorphes de graphe d'interactions $\Gamma(f)$.
320 Seulement 16 d'entre elles possèdent une matrice doublement stochastique.
321 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en
322 définissant les images des éléments de la liste
323 0, 1, 2,\ldots, 14, 15 en respectant l'ordre.
324 Expliquons enfin comment a été calculé le nombre de la troisième
325 colonne utilisé comme le paramètre $b$
326 dans l'algorithme~\ref{CI Algorithm}.
328 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur de la base canonique de $\R^{2^{n}}$.
329 Chacun des éléments $v_j$, $1 \le j \le 2^n$,
330 du vecteur $e_i M_f^t$ représente la probabilité
331 d'être dans la configuration $j$ après $t$ étapes du processus de Markov
332 associé à $\textsc{giu}(f)$ en partant de la configuration $i$.
334 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
335 \}$ représente le plus petit nombre d'itérations où la distance de
336 ce vecteur au vecteur $\pi=(\frac{1}{2^n},\ldots,\frac{1}{2^n})$
337 -- autrement dit, où la déviation par rapport à la distribution uniforme --
339 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
343 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket}
346 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
352 \noindent Par la suite, ce nombre sera appelé \emph{temps de mélange}.
358 \subfigure[Graphe d'interactions]{
359 \begin{minipage}{0.20\textwidth}
361 \includegraphics[width=3.5cm]{images/Gi.pdf}
366 \subfigure[Fonctions doublement stochastiques]{
367 \begin{minipage}{0.75\textwidth}
370 \begin{tabular}{|c|c|c|}
372 {Nom}& {Définition}&{$b$} \\
374 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0 & 206\\
376 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1
379 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
382 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
385 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
388 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
391 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
394 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
397 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
400 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
403 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
406 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
409 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
412 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
415 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
418 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
425 \label{fig:listfonction}
428 \caption{Candidates pour le générateur avec $n=4$}
432 La qualité des séquences aléatoires a été évaluée à travers la suite
433 de tests statistiques développée pour les générateurs de nombres
434 pseudo-aléatoires par le
435 \emph{National Institute of Standards and Technology} (NIST).
436 L'expérience a montré notamment que toutes ces fonctions
437 passent avec succès cette batterie de tests.
439 Pour conclure cette section, on remarque que le générateur de nombres pseudo-aléatoires
440 a été prouvé chaotique pour $b=1$, \textit{i.e.}, lorsqu'il y a une sortie pour chaque itération.
441 Ceci est difficilement compatible avec la volonté d'avoir une sortie uniformément distribuée:
442 se rapprocher de cette distribution nécessite en effet un nombre plus élevé
443 d'itérations $b$ entre chaque sortie. Par exemple, dans l'exemple précédent, il est nécessaire
444 d'itérer au moins 42 fois entre chaque sortie pour suivre une loi uniforme à $10^{-4}$ près.
445 Montrer que les sous-séquences de suites chaotiques ainsi générées demeurent chaotiques
446 est l'objectif de la section suivante.
449 \section{Un PRNG basé sur des itérations unaires qui est chaotique }\label{prng:unaire:chaos}
451 Cette section présente un espace métrique adapté au générateur de nombres pseudo-aléatoires
452 présenté à l'algorithme~\ref{CI Algorithm} et prouve ensuite que la fonction qu'il représente
453 est chaotique sur cet espace.
455 \subsection{Un espace $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ pour le PRNG de l'algorithme~\ref{CI Algorithm}}
459 Introduisons tout d'abord $\mathcal{P} \subset \mathds{N}$ un ensemble fini non vide de cardinalité
460 $\mathsf{p} \in \mathds{N}^\ast$.
461 Intuitivement, c'est le nombre d'itérations qu'il est autorisé de faire.
462 On ordonne les $\mathsf{p}$ éléments de $\mathcal{P}$ comme suit:
463 $\mathcal{P} = \{ p_1, p_2, \hdots, p_\mathsf{p}\}$
464 et $p_1< p_2< \hdots < p_\mathsf{p}$.
466 Dans l'algorithme~\ref{CI Algorithm},
467 $\mathsf{p}$ vaut 1 et $p_1=b$.
468 Cet algorithme peut être vu comme $b$ compostions de la fonction $F_{f_u}$.
469 Ceci peut cependant se généraliser à $p_i$, $p_i \in \mathcal{P}$,
470 compositions fonctionnelles de $F_{f_u}$.
471 Ainsi, pour chaque $p_i \in \mathcal{P}$, on construit la fonction
472 $F_{{f_u},p_i} : \mathds{B}^\mathsf{N} \times [\mathsf{N}]^{p_i}
473 \rightarrow \mathds{B}^\mathsf{N}$ définie par
476 F_{f_u,p_i} (x,(u^0, u^1, \hdots, u^{p_i-1})) \mapsto
477 F_{f_u}(\hdots (F_{f_u}(F_{f_u}(x,u^0), u^1), \hdots), u^{p_i-1}).
481 On construit l'espace
482 $\mathcal{X}_{\mathsf{N},\mathcal{P}}= \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}}$, où
483 $\mathds{S}_{\mathsf{N},\mathcal{P}}=
484 [\mathsf{N}]^{\Nats}\times
485 \mathcal{P}^{\Nats}$.
486 Chaque élément de l'espace est une paire où le premier élément est
487 un $\mathsf{N}$-uplet de $\Bool^{\mathsf{N}}$ (comme dans $\mathcal{X}_u$).
488 Le second élément est une paire $((u^k)_{k \in \Nats},(v^k)_{k \in \Nats})$ de suites infinies.
489 La suite $(v^k)_{k \in \Nats}$ définit combien d'itérations sont exécutées au temps $k$ entre deux sorties.
490 La séquence $(u^k)_{k \in \Nats}$ définit quel élément est modifié (toujours au temps $k$).
492 Définissons la fonction de décalage $\Sigma$ pour chaque élément de $\mathds{S}_{\mathsf{N},\mathcal{P}}$.
493 $$\begin{array}{cccc}
494 \Sigma:&\mathds{S}_{\mathsf{N},\mathcal{P}} &\longrightarrow
495 &\mathds{S}_{\mathsf{N},\mathcal{P}} \\
496 & \left((u^k)_{k \in \mathds{N}},(v^k)_{k \in \mathds{N}}\right) & \longmapsto & \left(\sigma^{v^0}\left((u^k)_{k \in \mathds{N}}\right),\sigma\left((v^k)_{k \in \mathds{N}}\right)\right).
499 En d'autres termes, $\Sigma$ reçoit deux suites $u$ et $v$ et
500 effectue $v^0$ décalage vers la droite sur la première et un décalage vers la droite
504 Ainsi, les sorties $(y^0, y^1, \hdots )$ produites par le générateur détaillé dans
505 l'algorithme~\ref{CI Algorithm}
506 sont les premiers composants des itérations $X^0 = (x^0, (u,v))$ et $\forall n \in \mathds{N},
507 X^{n+1} = G_{f_u,\mathcal{P}}(X^n)$ dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ où
508 $G_{f_u,\mathcal{P}}$ est définie par:
515 G_{f_u,\mathcal{P}} :& \mathcal{X}_{\mathsf{N},\mathcal{P}} & \longrightarrow & \mathcal{X}_{\mathsf{N},\mathcal{P}}\\
516 & (e,(u,v)) & \longmapsto & \left( F_{f,v^0}\left( e, (u^0, \hdots, u^{v^0-1}\right), \Sigma (u,v) \right) .
522 \subsection{Une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
524 On définit la fonction $d$ sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ comme suit:
525 Soit $x=(e,s)$ et $\check{x}=(\check{e},\check{s})$ dans
526 $\mathcal{X}_{\mathsf{N},\mathcal{P}} = \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}} $,
527 où $s=(u,v)$ et $\check{s}=(\check{u},\check{v})$ sont dans $ \mathds{S}_{\mathsf{N},\mathcal{P}} =
528 \mathcal{S}_{\llbracket 1, \mathsf{N} \rrbracket} \times \mathcal{S}_\mathcal{P}$.
530 \item $e$ et $\check{e}$ sont des entiers appartenant à $\llbracket 0, 2^{\mathsf{N}-1} \rrbracket$.
531 La distance de Hamming $d_{\mathds{B}^\mathsf{N}}$ entre les
532 décompositions binaires de $e$ et de $\check{e}$ (\textit{i.e.}, le
533 le nombre de bits qu'elles ont de différent) constitue
534 la partie entière de $d(X,\check{X})$.
535 \item la partie décimale est construite à partir des différences entre
536 $v^0$ et $\check{v}^0$, suivie des différences entre les séquences finies
537 $u^0, u^1, \hdots, u^{v^0-1}$ et $\check{u}^0, \check{u}^1, \hdots, \check{u}^{\check{v}^0-1}$, suivie par les différences entre $v^1$ et $\check{v}^1$,
538 suivie par les différences entre $u^{v^0}, u^{v^0+1}, \hdots, u^{v^1-1}$ et
539 $\check{u}^{\check{v}^0}, \check{u}^{\check{v}^0+1}, \hdots, \check{u}^{\check{v}^1-1}$, etc.
541 Plus précisément, soit
542 $p = \lfloor \log_{10}{(\max{\mathcal{P}})}\rfloor +1$ et
543 $n = \lfloor \log_{10}{(\mathsf{N})}\rfloor +1$.
545 \item Les $p$ premiers éléments de $d(x,\check{x})$ sont $|v^0-\check{v}^0|$
546 écrits en base 10 et sur $p$ indices;
547 \item les $n\times \max{(\mathcal{P})}$ éléments suivants servent
548 à évaluer de combien $u^0, u^1, \hdots, u^{v^0-1}$ diffère de
549 $\check{u}^0, \check{u}^1, \hdots, \check{u}^{\check{v}^0-1}$.
550 Les $n$ premiers éléments sont $|u^0-\check{u}^0|$. Il sont suivis de
551 $|u^1-\check{u}^1|$ écrits à l'aide de $n$ éléments, etc.
555 alors le processus se continue jusqu'à $|u^{v^0-1}-\check{u}^{\check{v}^0-1}|$ et la
556 partie décimale de $d(X,\check{X})$ est complétée par des 0
558 $p+n\times \max{(\mathcal{P})}$ éléments.
559 \item Si $v^0<\check{v}^0$, alors les $ \max{(\mathcal{P})}$ blocs de $n$
560 éléments sont $|u^0-\check{u}^0|$, ..., $|u^{v^0-1}-\check{u}^{v^0-1}|$,
561 $\check{u}^{v^0}$ (sur $n$ éléments), ..., $\check{u}^{\check{v}^0-1}$ (sur $n$ éléments), suivis par des 0, si besoin.
562 \item Le cas $v^0>\check{v}^0$ est similaire, et donc omis
564 \item Les $p$ suivants sont $|v^1-\check{v}^1|$, etc.
569 La fonction $d$ peut se formaliser comme suit:
570 $$d(x,\check{x})=d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s})+d_{\mathds{B}^\mathsf{N}}(e,\check{e}),$$
571 où: % $p=\max \mathcal{P}$ and:
573 \item $d_{\mathds{B}^\mathsf{N}}$ est la distance de Hamming,
574 \item $\forall s=(u,v), \check{s}=(\check{u},\check{v}) \in \mathcal{S}_{\mathsf{N},\mathcal{P}}$,\newline
576 d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) &= &
577 \sum_{k=0}^\infty \dfrac{1}{10^{(k+1)p+kn\max{(\mathcal{P})}}}
578 \bigg(|v^k - \check{v}^k| \\
579 & & + \left| \sum_{l=0}^{v^k-1}
580 \dfrac{u^{\sum_{m=0}^{k-1} v^m +l}}{ 10^{(l+1)n}} -
581 \sum_{l=0}^{\check{v}^k-1}
582 \dfrac{\check{u}^{\sum_{m=0}^{k-1} \check{v}^m +l}}{ 10^{(l+1)n}} \right| \bigg)
584 $$ %\left| \sum_{l=0}^{v^k-1} \dfrac{u^{\sum_{m=0}^{k-1} v^m +l}}{ 10^{l}} - \sum_{l=0}^{\check{v}^k-1} \dfrac{\check{u}^{\sum_{m=0}^{k-1} \check{v}^m +l}}{ 10^{l}}\right|\right)}.$$
590 On considère par exemple
591 $\mathsf{N}=13$, $\mathcal{P}=\{1,2,11\}$ ($\mathsf{p}$ vaut ainsi $3$),
595 u=\underline{6,} ~ \underline{11,5}, ...\\
602 \check{u}=\underline{6,4} ~ \underline{1}, ...\\
608 d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) =
609 0.01~0004000000000000000000~01~1005 \dots\]
610 En effet, les $p=2$ premiers éléments sont 01, c'est-à-dire
611 $|v^0-\check{v}^0|=1$,
612 et on utilise $p$ éléments pour représenter cette différence
613 (Comme $\mathcal{P}=\{1,2,11\}$, cette différence peut valoir 10).
614 On prend alors le $v^0=1$ premier terme de $u$,
615 chaque terme étant codé sur $n=2$ éléments, soit 06.
616 Comme on itère au plus $\max{(\mathcal{P})}$ fois,
617 on complète cette valeur par des 0 de sorte que
618 la chaîne obtenue ait $n\times \max{(\mathcal{P})}=22$ éléments, soit:
619 0600000000000000000000.
620 De manière similaire, les $\check{v}^0=2$ premiers
621 termes de $\check{u}$ sont représentés par
622 0604000000000000000000.
623 La valeur absolue de leur différence est égale à
624 0004000000000000000000.
625 Ces éléments sont concaténés avec 01. On peut construire alors le reste de
631 % On considère à présent que $\mathsf{N}=9$, que $\mathcal{P}=\{2,7\}$ et que
634 % u=\underline{6,7,} ~ \underline{4,2,} ...\\
639 % $$\check{s}=\left\{
641 % \check{u}=\underline{4, 9, 6, 3, 6, 6, 7,} ~ \underline{9, 8}, ...\\
647 % Ainsi $d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 0.5173633305600000...$,
649 % $|v^0-\check{v}^0|=5$, $|4963667-6700000| = 1736333$, $|v^1-\check{v}^1|=0$,
650 % et $|9800000-4200000| = 5600000$.
655 On a la proposition suivante, qui est démontrée en annexe~\ref{anx:generateur}.
658 \begin{restatable}[Une distance dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$]{theorem}{distancedsxnp}
659 $d$ est une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$.
663 \subsection{Le graphe $\textsc{giu}_{\mathcal{P}}(f)$ étendant $\textsc{giu}(f)$}
665 A partir de $\mathcal{P}=\{p_1, p_2, \hdots, p_\mathsf{p}\}$, on
666 définit le graphe orienté $\textsc{giu}_{\mathcal{P}}(f)$ de la manière suivante:
668 \item les n{\oe}uds sont les $2^\mathsf{N}$ configurations de $\mathds{B}^\mathsf{N}$,
669 %\item Each vertex has $\displaystyle{\sum_{i=1}^\mathsf{p} \mathsf{N}^{p_i}}$ arrows, namely all the $p_1, p_2, \hdots, p_\mathsf{p}$ tuples
670 % having their elements in $\llbracket 1, \mathsf{N} \rrbracket $.
671 \item il y a un arc libellé $u_0, \hdots, u_{p_i-1}$, $i \in \llbracket 1, \mathsf{p} \rrbracket$ entre les n{\oe}uds $x$ et $y$ si et seulement si $p_i$ est un élément de
672 $\mathcal{P}$ (\textit{i.e.}, on peut itérer $p_i$ fois), et pour chaque
673 $k$, $0 \le k \le p_i-1$, on a
674 $u_k$ qui appartient à $[\mathsf{N}]$ et
675 $y=F_{f_u,p_i} (x, (u_0, \hdots, u_{p_i-1})) $.
677 Il n'est pas difficile de constater que $\textsc{giu}_{\{1\}}(f)$ est $\textsc{giu}(f)$.
685 \subfigure[$\textsc{giu}_{\{2\}}(h)$]{
686 \begin{minipage}{0.30\textwidth}
688 \includegraphics[scale=0.5]{images/h2prng}
693 \subfigure[$\textsc{giu}_{\{3\}}(h)$]{
694 \begin{minipage}{0.40\textwidth}
696 \includegraphics[scale=0.5]{images/h3prng}
701 \subfigure[$\textsc{giu}_{\{2,3\}}(h)$]{
702 \begin{minipage}{0.40\textwidth}
704 \includegraphics[scale=0.5]{images/h23prng}
711 \caption{Graphes d'itérations $\textsc{giu}_{\mathcal{P}}(h)$ pour $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$}
712 %\label{fig:xplgraphIter}
719 On reprend l'exemple où $\mathsf{N}=2$ et
720 $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$ déjà détaillé
721 à la section~\ref{sub:prng:unif}.
723 Le graphe $\textsc{giu}_{\{1\}}(h)$ a déjà été donné à la figure~\ref{fig:h:iter}.
724 Les graphes $\textsc{giu}_{\{2\}}(h)$, $\textsc{giu}_{\{3\}}(h)$ et
725 $\textsc{giu}_{\{2,3\}}(h)$ sont respectivement donnés aux figures~\ref{fig:h2prng}, ~\ref{fig:h3prng} et ~\ref{fig:h23prng}.
726 Le premier (respectivement le second)
727 illustre le comportement du générateur lorsque qu'on itère exactement
728 2 fois (resp. 3 fois) puis qu'on affiche le résultat.
729 Le dernier donnerait le comportement d'un générateur qui s'autoriserait
730 à itérer en interne systématiquement 2 ou 3 fois avant de retourner un résultat.
735 \subsection{le PRNG de l'algorithme~\ref{CI Algorithm} est chaotique sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
737 Le théorème suivant, similaire à ceux dans $\mathcal{X}_u$ et dans $\mathcal{X}_g$
738 est prouvé en annexe~\ref{anx:generateur}.
740 \begin{restatable}[Conditions pour la chaoticité de $G_{f_u,\mathcal{P}}$]{theorem}{thmchoticitgfp}
741 La fonction $G_{f_u,\mathcal{P}}$ est chaotique sur
742 $(\mathcal{X}_{\mathsf{N},\mathcal{P}},d)$ si et seulement si
743 le graphe d'itérations $\textsc{giu}_{\mathcal{P}}(f)$
744 est fortement connexe.
746 % On alors corollaire suivant
749 % Le générateur de nombre pseudo aléatoire détaillé
750 % à l'algorithme~\ref{CI Algorithm}
751 % n'est pas chaotique
752 % sur $(\mathcal{X}_{\mathsf{N},\{b\}},d)$ pour la fonction négation.
755 % Dans cet algorithme, $\mathcal{P}$ est le singleton $\{b\}$.
756 % Que $b$ soit pair ou impair, $\textsc{giu}_{\{b\}}(f)$
757 % n'est pas fortement connexe.
762 Ce chapitre a proposé un algorithme permettant de construire un
763 PRNG chaotique à partir d'un PRNG existant. Pour ce faire, il est nécessaire
764 et suffisant que la fonction $f$ qui est itérée un nombre $b$ de fois
765 possède un $\textsc{giu}_{\{b\}}(f)$ fortement connexe et que sa matrice de Markov associée soit doublement stochastique.
766 Le chapitre suivant montre comment construire une telle fonction.