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

Private GIT Repository
ajout d'intro et de conclusion
[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{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}.
18
19
20 \section{ Nombres pseudo aléatoires construits par itérations unaires}\label{sub:prng:algo}
21
22
23
24
25
26
27 \begin{algorithm}[h]
28 %\begin{scriptsize}
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)}
32 $x\leftarrow x^0$\;
33 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
34 \For{$i=1,\dots,b$}
35 {
36 $s\leftarrow{\textit{Random}({\mathsf{N}})}$\;
37 %$s\leftarrow{\textit{XORshift}(n)}$\;
38 $x\leftarrow{F_{f_u}(x,s)}$\;
39 }
40 return $x$\;
41 %\end{scriptsize}
42 \caption{PRNG basé sur les itérations unaires.}
43 \label{CI Algorithm}
44 \end{algorithm}
45
46 \subsection{Algorithme d'un générateur}
47 On peut penser à construire un générateur de nombres pseudo 
48 aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
49
50
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 a ce générateur embarqué.
63
64
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. 
72
73
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é 
81 % ci-dessous.
82
83 % \begin{algorithm}[h]
84 % %\SetLine
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)}}$\;
90 % $y\leftarrow{z}$\;
91 % return $y$\;
92 % \medskip
93 % \caption{Une boucle de l'algorithme de \textit{XORshift}}
94 % \label{XORshift}
95 % \end{algorithm}
96
97
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 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}$.
103
104 Pour simuler au mieux l'aléa, un bon générateur de nombre 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.
108
109 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
110
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
114 vaut 1. 
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.$$
119
120 On énonce le théorème classique suivant liant les 
121 vecteur de probabilités 
122 et les chaînes de Markov.
123
124
125  
126
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$
130   ($\pi.M = \pi$).
131   De plus, si $\pi^0$ est un {vecteur de probabilités} 
132  et si on définit 
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.
137 \end{theorem}
138
139
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 Soit 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} 
150 et~\ref{fig:h: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$.
154
155
156
157
158
159
160
161
162
163 \begin{figure}%[t]
164   \begin{center}
165     \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
166       \begin{minipage}{0.40\textwidth}
167         \begin{center}
168           \includegraphics[height=4cm]{images/g.pdf}
169         \end{center}
170       \end{minipage}
171       \label{fig:g:iter}
172     }
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}
175         \begin{center}
176           \includegraphics[height=4cm]{images/h.pdf}
177         \end{center}
178       \end{minipage}
179       \label{fig:h:iter}
180     }    \end{center}
181     \caption{Graphes des itérations unaires 
182       de fonctions booléennes dans $\Bool^2$}
183     \label{fig:xplgraphIter}
184   \end{figure}
185
186
187
188
189
190
191
192
193
194 \begin{figure}%[t]
195   \begin{center}
196     \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
197       \begin{minipage}{0.40\textwidth}
198         \begin{center}
199           \includegraphics[height=3cm]{images/gp.pdf}
200         \end{center}
201       \end{minipage}
202       \label{fig:g:inter}
203     }
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}
206         \begin{center}
207           \includegraphics[height=3cm]{images/hp.pdf}
208         \end{center}
209       \end{minipage}
210       \label{fig:h:inter}
211     }    \end{center}
212     \caption{Graphes d'interactions de fonctions booléennes dans $\Bool^2$}
213     \label{fig:xplgraphInter}
214   \end{figure}
215
216
217
218
219
220
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$,
223 et donc, 
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
229 d'un tel processus 
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$. 
233
234 \begin{figure}[h]
235   \begin{center}
236     \subfigure[$\check{M}_g $.]{
237       \begin{minipage}{0.25\textwidth}
238         \begin{center}
239           % \vspace{-3cm}
240           $\left( 
241             \begin{array}{cccc} 
242               1 & 0 & 1 & 0 \\ 
243               1 & 0 & 0 & 1 \\ 
244               1 & 0 & 0 & 1 \\ 
245               0 & 1 & 1 & 0 
246             \end{array}
247           \right)
248           $
249         \end{center}
250       \end{minipage}
251       \label{fig:g:incidence}
252     }
253     \subfigure[$\check{M}_h $.]{
254         \begin{minipage}{0.25\textwidth}
255           \begin{center}
256             $\left( 
257               \begin{array}{cccc} 
258                 1 & 0 & 1 & 0 \\ 
259                 0 & 1 & 0 & 1 \\ 
260                 1 & 0 & 0 & 1 \\ 
261                 0 & 1 & 1 & 0 
262               \end{array}
263             \right)
264             $
265           \end{center}
266         \end{minipage}
267         \label{fig:h:incidence}
268       }
269     \end{center}
270     \caption{Graphe des fonctions candidates avec $n=2$}
271     \label{fig:xplgraph}
272   \end{figure}
273
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 
281 $\pi_h M_h = \pi_h$. 
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é à $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.
290 Au contraire, 
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.
296
297 On énonce directement le théorème suivant dont la preuve est donnée en annexes~\ref{anx:generateur}.
298
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$  
303   définie par 
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.
310 \end{restatable}
311
312
313 \subsection{Quelques exemples}
314
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)$. 
319
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}.
327
328 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur 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$.   
333 Le nombre $\min \{
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 --
338  est inférieure 
339 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
340  $b$. 
341 Ainsi, on a 
342 \begin{equation}
343 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket} 
344 \left\{
345 \min \left\{
346  t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
347 \right\}
348 \right\}. 
349 \label{eq:mt:ex}
350 \end{equation}
351
352 \noindent Par la suite, ce nombre sera appelé \emph{temps de mélange}.
353
354
355
356 \begin{figure}%[h]
357   \begin{center}
358   \subfigure[Graphe d'interactions]{
359     \begin{minipage}{0.20\textwidth}
360       \begin{center}
361         \includegraphics[width=3.5cm]{images/Gi.pdf}
362       \end{center}
363     \end{minipage}
364     \label{fig:G}
365   }\hfill
366   \subfigure[Fonctions doublement stochastiques]{
367     \begin{minipage}{0.75\textwidth}
368       \begin{scriptsize}
369         \begin{center}
370           \begin{tabular}{|c|c|c|}
371 \hline
372 {Nom}& {Définition}&{$b$} \\
373 \hline 
374 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0  & 206\\
375 \hline
376 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1  
377  & 94 \\
378 \hline
379 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
380  & 69 \\
381 \hline
382 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
383  & 56 \\
384 \hline
385 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
386  & 48 \\
387 \hline
388 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
389  & 86 \\
390 \hline
391 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
392  & 58 \\
393 \hline
394 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
395  & 46 \\
396 \hline
397 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
398  & 42 \\
399 \hline
400 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
401  & 69 \\
402 \hline
403 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
404  & 58 \\
405 \hline
406 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
407  & 35 \\
408 \hline
409 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
410  & 56 \\
411 \hline
412 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
413  & 94 \\
414 \hline
415 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
416  & 86 \\ 
417 \hline
418 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
419   & 206 \\
420  \hline
421 \end{tabular}
422 \end{center}
423 \end{scriptsize}
424 \end{minipage}
425 \label{fig:listfonction}
426 }
427 \end{center}
428 \caption{Candidates pour le générateur  avec $n=4$}
429  \end{figure}
430
431
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.
438
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.
447
448
449 \section{Un PRNG basé sur des itérations unaires qui est chaotique }\label{prng:unaire:chaos}
450
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.
454
455 \subsection{Un espace  $\mathcal{X}_{\mathsf{N},\mathcal{P}}$    pour le PRNG de l'algorithme~\ref{CI Algorithm}}
456
457
458
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}$.
465
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
474
475 $$
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}).
478 $$
479
480
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$).
491
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). 
497 \end{array}
498 $$
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 
501 sur la seconde.
502
503
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:
509
510
511
512
513 \begin{equation}
514 \begin{array}{cccc}
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) .
517 \end{array}
518 \end{equation}
519
520
521
522 \subsection{Une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
523
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}$. 
529 \begin{enumerate}
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}}$ sur 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.
540
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$.
544 \begin{enumerate}
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.
552 \begin{enumerate}
553 \item Si
554 $v^0=\check{v}^0$,
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
557 jusqu'à atteindre 
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), suivi par des 0, si besoin.
562 \item Le cas $v^0>\check{v}^0$ est similaire, et donc omis
563 \end{enumerate}
564 \item Les $p$ suivants sont $|v^1-\check{v}^1|$, etc.
565 \end{enumerate}
566 \end{enumerate}
567
568
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:
572 \begin{itemize}
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 
575 $$\begin{array}{rcl}
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)
583 \end{array}
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)}.$$
585 \end{itemize}
586
587
588
589 \begin{xpl}
590 On considère par exemple 
591 $\mathsf{N}=13$, $\mathcal{P}=\{1,2,11\}$ ($\mathsf{p}$ vaut ainsi $3$), 
592 et 
593 $s=\left\{
594 \begin{array}{l}
595 u=\underline{6,} ~ \underline{11,5}, ...\\
596 v=1,2,...
597 \end{array}
598 \right.$
599 avec 
600 $\check{s}=\left\{
601 \begin{array}{l}
602 \check{u}=\underline{6,4} ~ \underline{1}, ...\\
603 \check{v}=2,1,...
604 \end{array}
605 \right.$.
606 Ainsi 
607 \[
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 a $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 
626 la séquence.
627 \end{xpl}
628
629
630 % \begin{xpl}
631 % On considère à présent que  $\mathsf{N}=9$, que $\mathcal{P}=\{2,7\}$ et que
632 % $$s=\left\{
633 % \begin{array}{l}
634 % u=\underline{6,7,} ~ \underline{4,2,} ...\\
635 % v=2,2,...
636 % \end{array}
637 % \right.$$
638 % avec
639 % $$\check{s}=\left\{
640 % \begin{array}{l}
641 % \check{u}=\underline{4, 9, 6, 3, 6, 6, 7,} ~ \underline{9, 8}, ...\\
642 % \check{v}=7,2,...
643 % \end{array}
644 % \right.
645 % $$
646
647 % Ainsi $d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 0.5173633305600000...$, 
648 % puisque 
649 % $|v^0-\check{v}^0|=5$, $|4963667-6700000| = 1736333$, $|v^1-\check{v}^1|=0$,
650 % et $|9800000-4200000| = 5600000$.
651 % \end{xpl}
652
653
654
655 On a la proposition suivante, qui est démontrée en annexes~\ref{anx:generateur}.
656
657
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}}$.
660 \end{restatable}
661
662
663 \subsection{Le graphe $\textsc{giu}_{\mathcal{P}}(f)$ étendant  $\textsc{giu}(f)$}
664
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:
667 \begin{itemize}
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})) $.
676 \end{itemize}
677 Il n'est pas difficile de constater que $\textsc{giu}_{\{1\}}(f)$ est $\textsc{giu}(f)$.
678
679
680
681
682
683 \begin{figure}%[t]
684   \begin{center}
685     \subfigure[$\textsc{giu}_{\{2\}}(h)$]{
686       \begin{minipage}{0.30\textwidth}
687         \begin{center}
688           \includegraphics[scale=0.5]{images/h2prng}
689         \end{center}
690       \end{minipage}
691       \label{fig:h2prng}
692     }
693     \subfigure[$\textsc{giu}_{\{3\}}(h)$]{
694       \begin{minipage}{0.40\textwidth}
695         \begin{center}
696           \includegraphics[scale=0.5]{images/h3prng}
697         \end{center}
698       \end{minipage}
699       \label{fig:h3prng}
700     }
701     \subfigure[$\textsc{giu}_{\{2,3\}}(h)$]{
702       \begin{minipage}{0.40\textwidth}
703         \begin{center}
704           \includegraphics[scale=0.5]{images/h23prng}
705         \end{center}
706       \end{minipage}
707       \label{fig:h23prng}
708     }
709
710     \end{center}
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}
713   \end{figure}
714
715
716
717
718 \begin{xpl}
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}.
722
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 figure~\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 trois fois avant de retourner un résultat.
731
732 \end{xpl}
733
734
735 \subsection{le PRNG de l'algorithme~\ref{CI Algorithm} est chaotique sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
736
737 Le théorème suivant, similaire à ceux dans $\mathcal{X}_u$ et dans $\mathcal{X}_g$
738 est prouvé en annexes~\ref{anx:generateur}.
739
740 \begin{restatable}[Conditions pour la choticité 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ération $\textsc{giu}_{\mathcal{P}}(f)$ 
744 est fortement connexe.
745 \end{restatable}
746 % On alors corollaire suivant 
747
748 % \begin{corollary}
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.
753 % \end{corollary}
754 % \begin{proof}
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.
758 % \end{proof}
759
760
761 \section{Conclusion}
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.
767
768  
769