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

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