]> AND Private Git Repository - hdrcouchot.git/blob - 15RairoGen.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
c1cf7d310f8d3cf34b708214996e76a390768986
[hdrcouchot.git] / 15RairoGen.tex
1 Au bout d'un nombre $b$ d'itérations,
2 si la fonction, notée $G_{f_u}$ (ou bien $G_{f_g}$) 
3 présentée au chapitre~\ref{chap:carachaos}, 
4 a de \og bonnes\fg{} propriétés chaotiques, 
5 le mot $x^b$ devrait  \og sembler ne plus dépendre\fg{} de $x^0$.
6 On peut penser à exploiter une de ces fonctions $G_f$ 
7 comme un générateur aléatoire. 
8
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{sec:PRNG:chaos:autres} présente un état de l'art (incomplet) de l'exploitation de 
13 fonctions au comportement chaotique pour obtenir des PRNGs.
14 La section~\ref{sub:prng:algo} 
15 présente ensuite l'algorithme de PRNG. La contrainte de  
16 distribution uniforme de la sortie est discutée dans cette section.
17 La chaoticité du générateur est  étudiée en 
18 section~\ref{prng:unaire:chaos}.
19 La section~\ref{sub:prng:algo}  a été publiée à ~\cite{bcgw11:ip,bcgr11:ip}.
20
21 \section{Quelques PRNGs basés sur des fonctions aux itérations chaotiques}\label{sec:PRNG:chaos:autres}
22
23 Les PRNGs chaotiques (CPRNGs) sont des générateurs non linéaires définis par 
24 $x_0 \in \mathbb{R}$ et $x_{t+1} = f(x_t)$, où  $f$ est une fonction au comportement chaotique.
25 Les raisons qui expliquent l'intérêt de telles fonctions sont naturellement la sensibilité aux conditions initiales, 
26 leur imprévisibilité\ldots Cependant, comme l'ordinateur sur lequel elles s'exécutent a une précision finie, 
27 les générateurs qui les embarquent peuvent avoir des périodes arbitrairement courtes, 
28 ne pas fournir de sortie selon une distribution uniforme\ldots
29 D'un point de vue cryptographique, ces CPRNGs sont critiquables~\cite{wiggins2003introduction}.
30 Réduire ces critiques est l'objectif de nombreux travaux de recherche reportés ci dessous.
31
32
33 Parmi les suites simples classiquement embarquées dans les CPRNGs, on trouve principalement
34 la suite logistique et 
35 la suite de Hénon. La suite logistique~\cite{may1976simple} est définie de $[0;1]$ dans lui même par $x_{t+1} = r \times x_t(1-x_t)$ 
36 avec $x_0 \in [0;1]$ et $3,57<r<4,0$.
37 La suite de Hénon~\cite{henon1976two} de $A \times B$ dans lui même, avec $A$ et $B$ deux sous-ensembles de $\R$, 
38 est définie par  
39 $x_{t+1} = (1-a x_t^2)+y_t$  et $y_{t+1}= bx_{t+1}$, où $a$ et $b$ sont les paramètres canoniques. 
40 Pour $a=1,4$, $b=0,3$, $A=[-1,5;1,5]$ et $B=-[0,4;0,4]$ le comportement de cette suite est chaotique.
41
42 La suite logistique est utilisée dans l'article~\cite{dabal2011chaos} dans lequel 
43 les auteurs utilisent une représentation des réels à virgule fixe.
44 Les auteurs de~\cite{dabal2012fpga} comparent leur implantation de la suite logistique avec celle 
45 de la suite de Hénon. 
46 Les auteurs de~\cite{6868789} ont exploité la réécriture de la suite logistique sous la forme
47 $x_{t+1} = (r \times x_t)-(r \times x_t^2)$ et la possibilité de paralléliser ceci 
48 pour accroître la fréquence du PRNG.   
49 Les auteurs de~\cite{liu2008improved} proposent de coupler deux suites logistiques,
50 chacune étant paramétrée différemment ($x_0$, $r_1$ et  $y_0$, $r_2$ respectivement). L'idée principale 
51 est de modifier iterrativement le paramètre $r_2$ à l'aide des itérés de $x_t$.
52 Quant aux auteurs de~\cite{merahcoupling13}, ils couplent la suite logistique et celle de Hénon. 
53 La première suite sert à sélectionner les éléments parmi ceux générés par la seconde.
54 Les auteurs de~\cite{mao2006design}, combinent spatialement $L$ suites logistiques 
55 et construisent ainsi $x_t(0)$, \dots, $x_t(L-1)$ selon l'équation suivante:
56 \begin{equation}
57 x_{t+1}(i) = 
58 (1- \varepsilon) f(x_t(i)) + 
59 \frac{\varepsilon}{2} 
60 (f(x_t(i-1)) + f(x_t(i+1))),
61 \label{eq:cml}
62 \end{equation}
63 \noindent où 
64 $i \in \dfrac{\Z}{L\Z}$,
65 $f$ est une adaptation de la suite logistique au cas discret,
66 la graine $(X_0(0),\dots, X_0(L-1))$ et la pondération $\varepsilon$ sont fournies par l'utilisateur.
67  
68 Certaines équations différentielles ont été à la base de PRNGs chaotiques. 
69 On pense aux équations de Lorenz~\cite{Lorenz1963}, à celles de Rössler~\cite{Rossler1976397}\ldots
70 Celles-ci ont par exemple embarquées dans les PRNG dans les articles~\cite{Silva:2009:LLP:1592409.1592411}
71 et~\cite{mansingka2013fibonacci} respectivement.
72
73
74 \section{ Nombres pseudo-aléatoires construits par itérations unaires}\label{sub:prng:algo}
75
76
77
78
79
80
81 \begin{algorithm}[h]
82 %\begin{scriptsize}
83 \KwIn{une fonction $f$, un nombre d'itérations $b$, 
84 une configuration initiale $x^0$ (${\mathsf{N}}$ bits)}
85 \KwOut{une configuration $x$ (${\mathsf{N}}$ bits)}
86 $x\leftarrow x^0$\;
87 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
88 \For{$i=1,\dots,b$}
89 {
90 $s\leftarrow{\textit{Random}({\mathsf{N}})}$\;
91 %$s\leftarrow{\textit{XORshift}(n)}$\;
92 $x\leftarrow{F_{f_u}(x,s)}$\;
93 }
94 return $x$\;
95 %\end{scriptsize}
96 \caption{PRNG basé sur les itérations unaires.}
97 \label{CI Algorithm}
98 \end{algorithm}
99
100 \subsection{Algorithme d'un générateur}
101 On peut penser à construire un générateur de nombres 
102 pseudo-aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
103
104
105 Celui-ci prend en entrée: une fonction $f$;
106 un entier $b$, qui est le nombre d'itérations à effectuer entre deux sorties 
107 et une configuration initiale $x^0$.
108 Il retourne une nouvelle configuration $x$ en appliquant 
109 la fonction $F_{f_u}$ (équation~\ref{eq:iterations:unaires}
110 vue au chapitre~\ref{chap:carachaos}) et correspondant 
111 à des itérations unaires.
112 En interne, il exploite un algorithme de génération
113 de nombres pseudo-aléatoires donné en paramètre.
114 Cela peut être n'importe quel PRNG (XORshift, Mersenne-Twister) dont la 
115 sortie est uniformément distribuée.
116 Notre approche vise a donner des propriétés de chaos à ce générateur embarqué.
117
118
119 % \textit{Random}$(l)$. 
120 % Cet algorithme est utilisée dans notre générateur pour construire la longueur 
121 % de la stratégie ainsi que les éléments qui la composent.
122 % Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$ 
123 % selon une distribution uniforme et utilise 
124 % \textit{XORshift} qui est une classe de générateurs de
125 % nombres pseudo aléatoires conçus par George Marsaglia. 
126
127
128 % L'algorithme \textit{XORshift} 
129 % exploite itérativement l'opérateur $\oplus$  
130 % sur des nombres obtenus grâce à des décalages de bits.
131 % Cet opérateur, défini dans $\Bool^{n}$, 
132 % applique la fonction \og  xor \fg{} 
133 % aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
134 % Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné 
135 % ci-dessous.
136
137 % \begin{algorithm}[h]
138 % %\SetLine
139 % \KwIn{la configuration interne $z$ (un mot de 32-bit)}
140 % \KwOut{$y$ (un mot de 32-bits)}
141 % $z\leftarrow{z\oplus{(z\ll13)}}$\;
142 % $z\leftarrow{z\oplus{(z\gg17)}}$\;
143 % $z\leftarrow{z\oplus{(z\ll5)}}$\;
144 % $y\leftarrow{z}$\;
145 % return $y$\;
146 % \medskip
147 % \caption{Une boucle de l'algorithme de \textit{XORshift}}
148 % \label{XORshift}
149 % \end{algorithm}
150
151
152 Nous avons vu au chapitre~\ref{chap:carachaos} que 
153 $G_{f_u}$ est chaotique dans l'espace $\mathcal{X}_u$ 
154 si et seulement si le graphe d'itérations $\textsc{giu}(f)$ 
155 est fortement connexe.
156 Pour $b=1$, l'algorithme itère la fonction $F_{f_u}$.
157
158 Pour simuler au mieux l'aléa, un bon générateur de nombres pseudo-aléatoires
159 se doit de fournir  des nombres selon une distribution uniforme.
160 Regardons comment l'uniformité de la distribution 
161 contraint la fonction $f$ à itérer.
162
163 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
164
165 Une matrice stochastique est une matrice carrée
166 dont tous les éléments sont positifs ou nuls et dont
167 la somme de chaque ligne
168 vaut 1. 
169 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
170 Enfin, une matrice stochastique de taille $n \times n$ est régulière 
171 si  la propriété suivante est établie:
172 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
173
174 On énonce le théorème classique suivant liant les 
175 vecteurs de probabilités 
176 et les chaînes de Markov.
177
178
179  
180
181 \begin{theorem}\label{th}
182   Si $M$ est une matrice stochastique régulière, alors $M$ 
183   possède un unique vecteur stationnaire de probabilités  $\pi$
184   ($\pi.M = \pi$).
185   De plus, si $\pi^0$ est un {vecteur de probabilités} 
186  et si on définit 
187   la suite $(\pi^{k})^{k \in  \Nats}$ par 
188   $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$ 
189   alors la {chaîne de Markov} $\pi^k$
190   converge vers $\pi$ lorsque $k$ tend vers l'infini.
191 \end{theorem}
192
193
194 Montrons sur un exemple jouet à deux éléments 
195 que ce théorème permet de vérifier si la sortie d'un générateur de 
196 nombres pseudo-aléatoires est uniformément distribuée ou non.
197 Soient alors $g$ et $h$ deux fonctions  de $\Bool^2$
198 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
199 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
200 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
201 vérifient les hypothèses du théorème~\ref{th:Adrien}. 
202 Leurs graphes d'itérations
203 sont donc fortement connexes, ce que l'on peut vérifier aux figures~\ref{fig:g:iter} 
204 et~\ref{fig:h:iter}.
205 \textit{A priori}, ces deux fonctions pourraient être intégrées
206 dans un générateur de nombres pseudo-aléatoires. Montrons que ce n'est pas le cas pour $g$ et 
207 que cela l'est pour $h$.
208
209
210
211
212
213
214
215
216
217 \begin{figure}%[t]
218   \begin{center}
219     \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
220       \begin{minipage}{0.40\textwidth}
221         \begin{center}
222           \includegraphics[height=4cm]{images/g.pdf}
223         \end{center}
224       \end{minipage}
225       \label{fig:g:iter}
226     }
227     \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
228       \begin{minipage}{0.40\textwidth}
229         \begin{center}
230           \includegraphics[height=4cm]{images/h.pdf}
231         \end{center}
232       \end{minipage}
233       \label{fig:h:iter}
234     }    \end{center}
235     \caption{Graphes des itérations unaires 
236       de fonctions booléennes dans $\Bool^2$}
237     \label{fig:xplgraphIter}
238   \end{figure}
239
240
241
242
243
244
245
246
247
248 \begin{figure}%[t]
249   \begin{center}
250     \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
251       \begin{minipage}{0.40\textwidth}
252         \begin{center}
253           \includegraphics[height=3cm]{images/gp.pdf}
254         \end{center}
255       \end{minipage}
256       \label{fig:g:inter}
257     }
258     \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
259       \begin{minipage}{0.40\textwidth}
260         \begin{center}
261           \includegraphics[height=3cm]{images/hp.pdf}
262         \end{center}
263       \end{minipage}
264       \label{fig:h:inter}
265     }    \end{center}
266     \caption{Graphes d'interactions de fonctions booléennes dans $\Bool^2$}
267     \label{fig:xplgraphInter}
268   \end{figure}
269
270
271
272
273
274
275 Comme le générateur \textit{Random} possède une sortie uniformément 
276 distribuée,  la  stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
277 et donc, 
278 pour tout sommet de $\textsc{giu}(g)$ et de  $\textsc{giu}(h)$,
279 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant 
280 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
281 En d'autres mots, $\textsc{giu}(g)$ est le graphe orienté d'une chaîne de Markov.
282 Il est facile de vérifier que la matrice de transitions
283 d'un tel processus 
284 est $M_g   = \frac{1}{2} \check{M}_g$, 
285 où $\check{M}_g$ est la matrice d' adjacence  donnée en 
286 figure~\ref{fig:g:incidence} (voir ci-après), et  de manière similaire pour $M_h$. 
287
288 \begin{figure}[h]
289   \begin{center}
290     \subfigure[$\check{M}_g $.]{
291       \begin{minipage}{0.25\textwidth}
292         \begin{center}
293           % \vspace{-3cm}
294           $\left( 
295             \begin{array}{cccc} 
296               1 & 0 & 1 & 0 \\ 
297               1 & 0 & 0 & 1 \\ 
298               1 & 0 & 0 & 1 \\ 
299               0 & 1 & 1 & 0 
300             \end{array}
301           \right)
302           $
303         \end{center}
304       \end{minipage}
305       \label{fig:g:incidence}
306     }
307     \subfigure[$\check{M}_h $.]{
308         \begin{minipage}{0.25\textwidth}
309           \begin{center}
310             $\left( 
311               \begin{array}{cccc} 
312                 1 & 0 & 1 & 0 \\ 
313                 0 & 1 & 0 & 1 \\ 
314                 1 & 0 & 0 & 1 \\ 
315                 0 & 1 & 1 & 0 
316               \end{array}
317             \right)
318             $
319           \end{center}
320         \end{minipage}
321         \label{fig:h:incidence}
322       }
323     \end{center}
324     \caption{Graphe des fonctions candidates avec $n=2$}
325     \label{fig:xplgraph}
326   \end{figure}
327
328 Les deux matrices $M_g$ et $M_h$ sont  stochastiques. Pour
329 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de 
330 $M^5_g$ ni de  $M^3_h$ n'est nul.
331 De plus, les vecteurs de probabilités 
332 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
333 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$ 
334 vérifient $\pi_g M_g = \pi_g$ et 
335 $\pi_h M_h = \pi_h$. 
336 Alors d'après le théorème~\ref{th}, 
337 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a 
338 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et 
339 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$. 
340 Ainsi la chaîne de Markov associée à $h$ tend vers une 
341 distribution uniforme, contrairement à celle associée à $g$.
342 On en déduit que $g$ ne devrait pas être itérée dans 
343 un générateur de nombres pseudo-aléatoires.
344 Au contraire, 
345 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm}, 
346 pour peu que le nombre $b$ d'itérations entre deux mesures successives 
347 de valeurs  soit suffisamment grand de sorte que
348 le vecteur d’état de la chaîne de Markov
349 ait une distribution suffisamment proche de la distribution uniforme.
350
351 On énonce directement le théorème suivant dont la preuve est donnée en annexe~\ref{anx:generateur}.
352
353 \begin{restatable}[Uniformité de la sortie de l'algorithme~\ref{CI Algorithm}]{theorem}{PrngCIUniforme}\label{thm:prng:u}
354   Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\textsc{giu}(f)$ son 
355   graphe d'itérations , $\check{M}$ sa matrice d'adjacence
356   et $M$ une matrice  $2^n\times 2^n$  
357   définie par 
358   $M = \dfrac{1}{n} \check{M}$.
359   Si $\textsc{giu}(f)$ est fortement connexe, alors 
360   la sortie du générateur de nombres pseudo-aléatoires détaillé par 
361   l'algorithme~\ref{CI Algorithm} suit une loi qui 
362   tend vers la distribution uniforme si 
363   et seulement si  $M$ est une matrice doublement stochastique.
364 \end{restatable}
365
366
367 \subsection{Quelques exemples}
368
369 On considère le graphe d'interactions $\Gamma(f)$ donné
370 en figure~\ref{fig:G}. C'est le même qui a été présenté
371 à la section~\ref{sec:11FCT}.
372 On a vu qu'il y avait  520 fonctions $f$ non isomorphes de graphe d'interactions  $\Gamma(f)$. 
373
374 Seulement 16 d'entre elles possèdent une matrice doublement stochastique.
375 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en 
376 définissant les images des éléments de la liste
377 0, 1, 2,\ldots, 14, 15 en respectant  l'ordre.
378 Expliquons enfin comment a été calculé le nombre de la troisième 
379 colonne utilisé comme le paramètre $b$ 
380 dans l'algorithme~\ref{CI Algorithm}.
381
382 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur de la base canonique de $\R^{2^{n}}$. 
383 Chacun des éléments $v_j$, $1 \le j \le 2^n$, 
384 du vecteur $e_i M_f^t$ représente la probabilité 
385 d'être dans la configuration $j$ après $t$ étapes du processus de Markov 
386 associé à $\textsc{giu}(f)$ en partant de la configuration $i$.   
387 Le nombre $\min \{
388  t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
389 \}$ représente le plus petit nombre d'itérations où la distance de 
390 ce vecteur au vecteur $\pi=(\frac{1}{2^n},\ldots,\frac{1}{2^n})$
391 -- autrement dit, où la déviation par rapport à la distribution uniforme --
392  est inférieure 
393 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
394  $b$. 
395 Ainsi, on a 
396 \begin{equation}
397 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket} 
398 \left\{
399 \min \left\{
400  t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
401 \right\}
402 \right\}. 
403 \label{eq:mt:ex}
404 \end{equation}
405
406 \noindent Par la suite, ce nombre sera appelé \emph{temps de mélange}.
407
408
409
410 \begin{figure}%[h]
411   \begin{center}
412   \subfigure[Graphe d'interactions]{
413     \begin{minipage}{0.20\textwidth}
414       \begin{center}
415         \includegraphics[width=3.5cm]{images/Gi.pdf}
416       \end{center}
417     \end{minipage}
418     \label{fig:G}
419   }\hfill
420   \subfigure[Fonctions doublement stochastiques]{
421     \begin{minipage}{0.75\textwidth}
422       \begin{scriptsize}
423         \begin{center}
424           \begin{tabular}{|c|c|c|}
425 \hline
426 {Nom}& {Définition}&{$b$} \\
427 \hline 
428 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0  & 206\\
429 \hline
430 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1  
431  & 94 \\
432 \hline
433 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
434  & 69 \\
435 \hline
436 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
437  & 56 \\
438 \hline
439 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
440  & 48 \\
441 \hline
442 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
443  & 86 \\
444 \hline
445 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
446  & 58 \\
447 \hline
448 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
449  & 46 \\
450 \hline
451 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
452  & 42 \\
453 \hline
454 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
455  & 69 \\
456 \hline
457 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
458  & 58 \\
459 \hline
460 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
461  & 35 \\
462 \hline
463 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
464  & 56 \\
465 \hline
466 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
467  & 94 \\
468 \hline
469 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
470  & 86 \\ 
471 \hline
472 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
473   & 206 \\
474  \hline
475 \end{tabular}
476 \end{center}
477 \end{scriptsize}
478 \end{minipage}
479 \label{fig:listfonction}
480 }
481 \end{center}
482 \caption{Candidates pour le générateur  avec $n=4$}
483  \end{figure}
484
485
486 La qualité des séquences aléatoires a été évaluée à travers la suite 
487 de tests statistiques développée pour les générateurs de nombres 
488 pseudo-aléatoires par le 
489 \emph{National Institute of Standards and Technology} (NIST).
490 L'expérience a montré notamment que toutes ces fonctions
491 passent avec succès cette batterie de tests.
492
493 Pour conclure cette section, on remarque que le générateur de nombres pseudo-aléatoires 
494 a été prouvé chaotique pour $b=1$, \textit{i.e.}, lorsqu'il y a une sortie pour chaque itération.
495 Ceci est difficilement compatible avec la volonté d'avoir une sortie uniformément distribuée: 
496 se rapprocher de cette distribution nécessite en effet un nombre plus élevé
497 d'itérations $b$ entre chaque sortie. Par exemple, dans l'exemple précédent, il est nécessaire 
498 d'itérer au moins 42 fois entre chaque sortie pour suivre une loi uniforme à $10^{-4}$ près.
499 Montrer que les sous-séquences de suites chaotiques ainsi générées  demeurent chaotiques
500 est l'objectif de la section suivante.
501
502
503 \section{Un PRNG basé sur des itérations unaires qui est chaotique }\label{prng:unaire:chaos}
504
505 Cette section présente un espace métrique adapté au générateur de nombres pseudo-aléatoires 
506 présenté à l'algorithme~\ref{CI Algorithm} et prouve ensuite que la fonction qu'il représente 
507 est chaotique sur cet espace.
508
509 \subsection{Un espace  $\mathcal{X}_{\mathsf{N},\mathcal{P}}$    pour le PRNG de l'algorithme~\ref{CI Algorithm}}
510
511
512
513 Introduisons tout d'abord $\mathcal{P} \subset \mathds{N}$ un ensemble fini non vide de cardinalité 
514 $\mathsf{p} \in \mathds{N}^\ast$.
515 Intuitivement, c'est le nombre d'itérations qu'il est autorisé de faire.
516 On ordonne les $\mathsf{p}$ éléments de $\mathcal{P}$ comme suit: 
517 $\mathcal{P} = \{ p_1, p_2, \hdots, p_\mathsf{p}\}$
518 et $p_1< p_2< \hdots < p_\mathsf{p}$.
519
520 Dans l'algorithme~\ref{CI Algorithm}, 
521 $\mathsf{p}$ vaut 1 et  $p_1=b$. 
522 Cet  algorithme peut être vu comme $b$ compostions de la fonction $F_{f_u}$.
523 Ceci peut cependant se généraliser à $p_i$, $p_i \in \mathcal{P}$,
524 compositions fonctionnelles de $F_{f_u}$.
525 Ainsi, pour chaque $p_i \in \mathcal{P}$, on construit la fonction
526 $F_{{f_u},p_i} :  \mathds{B}^\mathsf{N} \times [\mathsf{N}]^{p_i}
527 \rightarrow \mathds{B}^\mathsf{N}$ définie par
528
529 $$
530 F_{f_u,p_i} (x,(u^0, u^1, \hdots, u^{p_i-1}))  \mapsto 
531 F_{f_u}(\hdots (F_{f_u}(F_{f_u}(x,u^0), u^1), \hdots), u^{p_i-1}).
532 $$
533
534
535 On construit l'espace 
536  $\mathcal{X}_{\mathsf{N},\mathcal{P}}=  \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}}$, où
537 $\mathds{S}_{\mathsf{N},\mathcal{P}}=
538 [\mathsf{N}]^{\Nats}\times 
539 \mathcal{P}^{\Nats}$. 
540 Chaque élément de l'espace est une paire où le premier élément est 
541 un $\mathsf{N}$-uplet de  $\Bool^{\mathsf{N}}$ (comme dans $\mathcal{X}_u$).
542 Le second élément est une paire $((u^k)_{k \in \Nats},(v^k)_{k \in \Nats})$ de suites infinies.
543 La suite $(v^k)_{k \in \Nats}$ définit combien d'itérations sont exécutées au temps $k$ entre deux sorties.
544 La séquence $(u^k)_{k \in \Nats}$ définit quel élément est modifié (toujours au temps $k$).
545
546 Définissons la fonction de décalage  $\Sigma$ pour chaque  élément de $\mathds{S}_{\mathsf{N},\mathcal{P}}$.
547 $$\begin{array}{cccc}
548 \Sigma:&\mathds{S}_{\mathsf{N},\mathcal{P}} &\longrightarrow
549 &\mathds{S}_{\mathsf{N},\mathcal{P}} \\
550 & \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). 
551 \end{array}
552 $$
553 En d'autres termes, $\Sigma$ reçoit deux suites $u$ et $v$ et 
554 effectue $v^0$ décalage vers la droite sur la première et un décalage vers la droite 
555 sur la seconde.
556
557
558 Ainsi, les  sorties  $(y^0, y^1, \hdots )$ produites par le générateur détaillé dans 
559 l'algorithme~\ref{CI Algorithm}
560 sont les premiers  composants des itérations $X^0 = (x^0, (u,v))$ et $\forall n \in \mathds{N}, 
561 X^{n+1} = G_{f_u,\mathcal{P}}(X^n)$ dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ où
562 $G_{f_u,\mathcal{P}}$  est définie par:
563
564
565
566
567 \begin{equation}
568 \begin{array}{cccc}
569 G_{f_u,\mathcal{P}} :&  \mathcal{X}_{\mathsf{N},\mathcal{P}} & \longrightarrow & \mathcal{X}_{\mathsf{N},\mathcal{P}}\\
570    & (e,(u,v)) & \longmapsto & \left( F_{f,v^0}\left( e, (u^0, \hdots, u^{v^0-1}\right), \Sigma (u,v) \right) .
571 \end{array}
572 \end{equation}
573
574
575
576 \subsection{Une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
577
578 On définit la fonction  $d$ sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ comme suit:
579 Soit  $x=(e,s)$ et $\check{x}=(\check{e},\check{s})$ dans 
580 $\mathcal{X}_{\mathsf{N},\mathcal{P}} = \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}} $,
581 où $s=(u,v)$ et $\check{s}=(\check{u},\check{v})$ sont dans $ \mathds{S}_{\mathsf{N},\mathcal{P}} = 
582 \mathcal{S}_{\llbracket 1, \mathsf{N} \rrbracket} \times \mathcal{S}_\mathcal{P}$. 
583 \begin{enumerate}
584 \item $e$ et $\check{e}$ sont des entiers appartenant à $\llbracket 0, 2^{\mathsf{N}-1} \rrbracket$. 
585 La distance de Hamming $d_{\mathds{B}^\mathsf{N}}$ entre les 
586 décompositions binaires de $e$ et de $\check{e}$ (\textit{i.e.}, le 
587 le nombre de bits qu'elles ont de différent) constitue 
588 la partie entière de $d(X,\check{X})$.
589 \item la partie décimale est construite à partir des différences entre 
590 $v^0$ et $\check{v}^0$, suivie des différences entre les séquences finies
591 $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$, 
592 suivie par les différences entre $u^{v^0}, u^{v^0+1}, \hdots, u^{v^1-1}$ et
593 $\check{u}^{\check{v}^0}, \check{u}^{\check{v}^0+1}, \hdots, \check{u}^{\check{v}^1-1}$, etc.
594
595 Plus précisément, soit 
596 $p = \lfloor \log_{10}{(\max{\mathcal{P}})}\rfloor +1$ et 
597 $n = \lfloor \log_{10}{(\mathsf{N})}\rfloor +1$.
598 \begin{enumerate}
599 \item Les $p$ premiers éléments de $d(x,\check{x})$ sont $|v^0-\check{v}^0|$ 
600   écrits en base 10 et sur $p$ indices;
601 \item les $n\times \max{(\mathcal{P})}$ éléments suivants servent 
602   à évaluer de combien $u^0, u^1, \hdots, u^{v^0-1}$ diffère de 
603   $\check{u}^0, \check{u}^1, \hdots, \check{u}^{\check{v}^0-1}$. 
604   Les $n$ premiers éléments sont $|u^0-\check{u}^0|$. Il sont suivis de 
605 $|u^1-\check{u}^1|$ écrits à l'aide de $n$ éléments, etc.
606 \begin{enumerate}
607 \item Si
608 $v^0=\check{v}^0$,
609 alors le processus se continue jusqu'à $|u^{v^0-1}-\check{u}^{\check{v}^0-1}|$ et la 
610 partie décimale de $d(X,\check{X})$ est complétée par des 0
611 jusqu'à atteindre 
612 $p+n\times \max{(\mathcal{P})}$ éléments.
613 \item Si $v^0<\check{v}^0$, alors les $ \max{(\mathcal{P})}$  blocs de $n$
614 éléments sont $|u^0-\check{u}^0|$, ..., $|u^{v^0-1}-\check{u}^{v^0-1}|$,
615 $\check{u}^{v^0}$ (sur $n$ éléments), ..., $\check{u}^{\check{v}^0-1}$ (sur $n$ éléments), suivis par des 0, si besoin.
616 \item Le cas $v^0>\check{v}^0$ est similaire, et donc omis
617 \end{enumerate}
618 \item Les $p$ suivants sont $|v^1-\check{v}^1|$, etc.
619 \end{enumerate}
620 \end{enumerate}
621
622
623 La fonction $d$ peut se formaliser comme suit:
624 $$d(x,\check{x})=d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s})+d_{\mathds{B}^\mathsf{N}}(e,\check{e}),$$
625 où: % $p=\max \mathcal{P}$ and:
626 \begin{itemize}
627 \item $d_{\mathds{B}^\mathsf{N}}$ est la distance de Hamming,
628 \item $\forall s=(u,v), \check{s}=(\check{u},\check{v}) \in \mathcal{S}_{\mathsf{N},\mathcal{P}}$,\newline 
629 $$\begin{array}{rcl}
630  d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) &= &
631    \sum_{k=0}^\infty \dfrac{1}{10^{(k+1)p+kn\max{(\mathcal{P})}}} 
632    \bigg(|v^k - \check{v}^k|  \\
633    & & + \left| \sum_{l=0}^{v^k-1} 
634        \dfrac{u^{\sum_{m=0}^{k-1} v^m +l}}{ 10^{(l+1)n}} -
635        \sum_{l=0}^{\check{v}^k-1} 
636        \dfrac{\check{u}^{\sum_{m=0}^{k-1} \check{v}^m +l}}{ 10^{(l+1)n}} \right| \bigg)
637 \end{array}
638 $$ %\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)}.$$
639 \end{itemize}
640
641
642
643 \begin{xpl}
644 On considère par exemple 
645 $\mathsf{N}=13$, $\mathcal{P}=\{1,2,11\}$ ($\mathsf{p}$ vaut ainsi $3$), 
646 et 
647 $s=\left\{
648 \begin{array}{l}
649 u=\underline{6,} ~ \underline{11,5}, ...\\
650 v=1,2,...
651 \end{array}
652 \right.$
653 avec 
654 $\check{s}=\left\{
655 \begin{array}{l}
656 \check{u}=\underline{6,4} ~ \underline{1}, ...\\
657 \check{v}=2,1,...
658 \end{array}
659 \right.$.
660 Ainsi 
661 \[
662 d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 
663 0.01~0004000000000000000000~01~1005 \dots\]
664 En effet, les $p=2$ premiers éléments sont  01, c'est-à-dire 
665 $|v^0-\check{v}^0|=1$, 
666 et on utilise $p$ éléments pour représenter cette différence
667 (Comme $\mathcal{P}=\{1,2,11\}$, cette différence peut valoir 10).
668 On prend alors le $v^0=1$ premier terme de $u$, 
669 chaque terme étant codé sur $n=2$ éléments, soit 06.
670 Comme on itère au plus $\max{(\mathcal{P})}$ fois, 
671 on complète cette valeur par des 0 de sorte que 
672 la chaîne obtenue ait $n\times \max{(\mathcal{P})}=22$ éléments, soit:
673 0600000000000000000000. 
674 De manière similaire, les $\check{v}^0=2$ premiers
675 termes de $\check{u}$ sont représentés par 
676 0604000000000000000000.
677 La valeur absolue de leur différence est égale à 
678 0004000000000000000000.
679 Ces éléments sont concaténés avec 01. On peut construire alors le reste de 
680 la séquence.
681 \end{xpl}
682
683
684 % \begin{xpl}
685 % On considère à présent que  $\mathsf{N}=9$, que $\mathcal{P}=\{2,7\}$ et que
686 % $$s=\left\{
687 % \begin{array}{l}
688 % u=\underline{6,7,} ~ \underline{4,2,} ...\\
689 % v=2,2,...
690 % \end{array}
691 % \right.$$
692 % avec
693 % $$\check{s}=\left\{
694 % \begin{array}{l}
695 % \check{u}=\underline{4, 9, 6, 3, 6, 6, 7,} ~ \underline{9, 8}, ...\\
696 % \check{v}=7,2,...
697 % \end{array}
698 % \right.
699 % $$
700
701 % Ainsi $d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 0.5173633305600000...$, 
702 % puisque 
703 % $|v^0-\check{v}^0|=5$, $|4963667-6700000| = 1736333$, $|v^1-\check{v}^1|=0$,
704 % et $|9800000-4200000| = 5600000$.
705 % \end{xpl}
706
707
708
709 On a la proposition suivante, qui est démontrée en annexe~\ref{anx:generateur}.
710
711
712 \begin{restatable}[Une distance dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$]{theorem}{distancedsxnp}
713 $d$ est une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$.
714 \end{restatable}
715
716
717 \subsection{Le graphe $\textsc{giu}_{\mathcal{P}}(f)$ étendant  $\textsc{giu}(f)$}
718
719 A partir de  $\mathcal{P}=\{p_1, p_2, \hdots, p_\mathsf{p}\}$, on 
720 définit le graphe orienté $\textsc{giu}_{\mathcal{P}}(f)$ de la manière suivante:
721 \begin{itemize}
722 \item les n{\oe}uds sont les  $2^\mathsf{N}$ configurations de $\mathds{B}^\mathsf{N}$,
723 %\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 
724 %  having their elements in $\llbracket 1, \mathsf{N} \rrbracket $.
725 \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 
726 $\mathcal{P}$ (\textit{i.e.}, on peut itérer $p_i$ fois), et pour chaque 
727 $k$, $0 \le k \le p_i-1$, on a 
728  $u_k$ qui appartient à  $[\mathsf{N}]$ et 
729 $y=F_{f_u,p_i} (x, (u_0, \hdots, u_{p_i-1})) $.
730 \end{itemize}
731 Il n'est pas difficile de constater que $\textsc{giu}_{\{1\}}(f)$ est $\textsc{giu}(f)$.
732
733
734
735
736
737 \begin{figure}%[t]
738   \begin{center}
739     \subfigure[$\textsc{giu}_{\{2\}}(h)$]{
740       \begin{minipage}{0.30\textwidth}
741         \begin{center}
742           \includegraphics[scale=0.5]{images/h2prng}
743         \end{center}
744       \end{minipage}
745       \label{fig:h2prng}
746     }
747     \subfigure[$\textsc{giu}_{\{3\}}(h)$]{
748       \begin{minipage}{0.40\textwidth}
749         \begin{center}
750           \includegraphics[scale=0.5]{images/h3prng}
751         \end{center}
752       \end{minipage}
753       \label{fig:h3prng}
754     }
755     \subfigure[$\textsc{giu}_{\{2,3\}}(h)$]{
756       \begin{minipage}{0.40\textwidth}
757         \begin{center}
758           \includegraphics[scale=0.5]{images/h23prng}
759         \end{center}
760       \end{minipage}
761       \label{fig:h23prng}
762     }
763
764     \end{center}
765     \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)$}
766     %\label{fig:xplgraphIter}
767   \end{figure}
768
769
770
771
772 \begin{xpl}
773 On reprend l'exemple où $\mathsf{N}=2$ et 
774 $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$ déjà détaillé 
775 à la section~\ref{sub:prng:unif}.
776
777 Le graphe $\textsc{giu}_{\{1\}}(h)$ a déjà été donné à la figure~\ref{fig:h:iter}.
778 Les graphes $\textsc{giu}_{\{2\}}(h)$, $\textsc{giu}_{\{3\}}(h)$  et
779 $\textsc{giu}_{\{2,3\}}(h)$ sont respectivement donnés aux figures~\ref{fig:h2prng}, ~\ref{fig:h3prng} et ~\ref{fig:h23prng}. 
780 Le premier (respectivement le second) 
781 illustre le comportement du générateur lorsque qu'on itère exactement 
782 2 fois (resp. 3 fois) puis qu'on affiche le résultat.
783 Le dernier donnerait le comportement d'un générateur qui s'autoriserait 
784 à itérer en interne systématiquement 2 ou 3 fois avant de retourner un résultat.
785
786 \end{xpl}
787
788
789 \subsection{le PRNG de l'algorithme~\ref{CI Algorithm} est chaotique sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
790
791 Le théorème suivant, similaire à ceux dans $\mathcal{X}_u$ et dans $\mathcal{X}_g$
792 est prouvé en annexe~\ref{anx:generateur}.
793
794 \begin{restatable}[Conditions pour la chaoticité de $G_{f_u,\mathcal{P}}$]{theorem}{thmchoticitgfp}
795 La fonction $G_{f_u,\mathcal{P}}$ est chaotique sur 
796  $(\mathcal{X}_{\mathsf{N},\mathcal{P}},d)$ si et seulement si 
797 le graphe d'itérations $\textsc{giu}_{\mathcal{P}}(f)$ 
798 est fortement connexe.
799 \end{restatable}
800 % On alors corollaire suivant 
801
802 % \begin{corollary}
803 %   Le générateur de nombre pseudo aléatoire détaillé 
804 %   à l'algorithme~\ref{CI Algorithm}
805 %   n'est pas chaotique 
806 %   sur $(\mathcal{X}_{\mathsf{N},\{b\}},d)$ pour la fonction négation.
807 % \end{corollary}
808 % \begin{proof}
809 %   Dans cet algorithme, $\mathcal{P}$ est le singleton $\{b\}$.
810 %   Que $b$ soit pair ou impair,  $\textsc{giu}_{\{b\}}(f)$
811 %   n'est pas fortement connexe.
812 % \end{proof}
813
814
815
816
817 \section{Conclusion}
818 Ce chapitre a proposé un algorithme permettant de construire un 
819 PRNG chaotique à partir d'un PRNG existant. Pour ce faire, il est nécessaire 
820 et suffisant que la fonction $f$ qui est itérée un nombre $b$ de fois 
821 possède un $\textsc{giu}_{\{b\}}(f)$ fortement connexe et que sa matrice de Markov associée soit doublement stochastique.
822 Le chapitre suivant montre comment construire une telle fonction.
823
824  
825