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

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