diff --git a/tpProba/aleatoire250.txt b/tpProba/aleatoire250.txt new file mode 100644 index 0000000000000000000000000000000000000000..46d6d77b7f5bd16d52ece824b4ad7a87393b0215 --- /dev/null +++ b/tpProba/aleatoire250.txt @@ -0,0 +1,250 @@ +35615 +51965 +51296 +28625 +22181 +29834 +41933 +35022 +24714 +30536 +23199 +47129 +17358 +48716 +37329 +20876 +1308 +32744 +21453 +6322 +6485 +25548 +11497 +58371 +32155 +52743 +15471 +39931 +58412 +23565 +33543 +50665 +39109 +64383 +13966 +35311 +887 +23126 +18155 +62987 +62114 +28232 +35813 +20959 +37997 +49876 +17006 +40319 +45228 +18583 +11800 +5974 +33403 +50391 +4285 +21517 +55022 +50069 +54667 +64573 +18287 +62400 +48965 +6130 +29827 +61357 +56154 +23522 +1612 +4692 +44765 +51324 +25794 +54508 +20735 +45716 +62118 +52614 +63348 +55824 +9637 +38145 +8612 +45824 +41595 +41991 +40585 +59354 +10880 +25832 +42549 +5744 +55747 +44899 +44874 +61679 +62478 +18812 +28469 +63419 +3002 +12360 +38705 +38823 +1657 +3012 +40244 +58267 +35663 +945 +63132 +11055 +62916 +13358 +4022 +23329 +38062 +88 +35341 +57158 +20707 +7656 +45116 +13623 +57791 +65178 +10323 +62612 +29841 +34314 +58492 +56112 +11124 +32629 +55422 +41218 +14860 +48 +26807 +4158 +30446 +50432 +16630 +43399 +64283 +1489 +8062 +39207 +26666 +25877 +12246 +32527 +43066 +46547 +22461 +59654 +25986 +31380 +1920 +27484 +57867 +37140 +17273 +52498 +34418 +41534 +38659 +17412 +49843 +3678 +61564 +38767 +19195 +51475 +6161 +25285 +47726 +4451 +1763 +54952 +14017 +56429 +31850 +31091 +5294 +57132 +19526 +3747 +21100 +23598 +7874 +19055 +29267 +65172 +27908 +8352 +53673 +31623 +34199 +9508 +61726 +45030 +42212 +22494 +12299 +15936 +23111 +5125 +55328 +21898 +30668 +7222 +59066 +42993 +23485 +58933 +26365 +5516 +28757 +6114 +60759 +60141 +16775 +52226 +27325 +56714 +56602 +5206 +33309 +36266 +17251 +17137 +54721 +54982 +36766 +64436 +23571 +6665 +52164 +10818 +31027 +41558 +43908 +3352 +49044 +19970 +36576 +44880 +799 +50405 \ No newline at end of file diff --git a/tpProba/tpProba.tex b/tpProba/tpProba.tex new file mode 100644 index 0000000000000000000000000000000000000000..6c366991c50eefaf1222498fce3f2730e083e66b --- /dev/null +++ b/tpProba/tpProba.tex @@ -0,0 +1,92 @@ +\documentclass[a4paper,10pt]{article} +\usepackage[utf8]{inputenc} +\usepackage[french]{babel} +\usepackage{amsfonts,bm,amsmath,amssymb,graphicx,verbatim} +\usepackage{cancel,url} + +\newcommand{\dd}{\mathrm{d}} +\newcommand{\hf}{\hat{f}} +\newcommand{\real}{\mathbb{R}} +\newcommand{\integer}{\mathbb{Z}} +\newcommand{\definition}{\textbf{Definition }} +\newcommand{\exemples}{\textbf{Exemples }} +\newcommand{\remarque}{\textbf{Remarque }} +\newcommand{\proprietes}{\textbf{Propriétés }} +\newcommand{\propriete}{\textbf{Propriété }} + +\title{Travaux pratiques: Génération de nombres aléatoires} +% \author{Orestis Malaspinas} +\date{A rendre pour le 01.06.2016} + +\begin{document} +\maketitle + +\section*{Travaux pratiques: Génération de nombres aléatoires} + +Les nombres aléatoires sont utilisés dans un vaste champs d'applications (sécurité informatique, simulations, +prise de décision, ...). Le but de ce TP est de faire un premier pas vers la compréhension de la problématique de +la génération de nombres pseudo-aléatoires avec un ordinateur. + +\section*{Générateurs congruentiels linéaires} +Les générateurs congruentiels sont des générateurs assez simples et donnent des nombres aléatoires d'assez bonne qualité. +La forme générale de ces générateurs est +\begin{equation} + X_{i+1}=(aX_i+c)\mod m, +\end{equation} +où $a$, $c$, $m$ sont les paramètres dont la qualité des nombres aléatoires dépendront et $X_0$ est appelé le germe. + +\begin{enumerate} +\item Cette congruence est de la forme $X_{i+1} = f(X_i)$. Si $0\leq X_i < n$ et $0\leq f (X_i ) < n$ $\forall i$, expliquez +pourquoi cette suite va commencer à faire des cycles (en d'autres termes $\exists m \geq 0$ tel que $X_{m+\lambda} = X_{\lambda}$). + \item Créez une fonction pour générer $n$ nombres pseudo-aléatoires en appliquant une congruence linéaire avec paramètres $a$, $c$, $m$ et $X_0$. + \item Écrivez un programme qui calcule la période d’un générateur congruentiel pour un ensemble de +paramètres données. Testez-le avec $m = 10$ et essayez de trouver un $a$ et un $c$ qui vous donnent +un cycle maximal. +\item Historiquement, le générateur \texttt{RANDU} développé par \texttt{IBM} utilisait les paramètres suivants : +$a = 65539$, $c = 0$, $n = 2^{31}$ and $X_0 = 123456789$. Générez 12000 nombres aléatoires avec +cette méthode. Visualisez les résultats comme des points $(X_{i-1} , X_i)$ en deux dimensions et +$(X_{i-2}, X_{i-1} , X_i )$ dans l’espace. En Matlab/Octave, servez-vous de la fonction plot3 pour afficher les triplets. +\end{enumerate} + +\section*{Générateur de Stoll--Kirckpatrick} +Le générateur de Stoll-Kirckpatrick considère que nous possédons déjà 250 nombres aléatoires de +bonne qualité codés sur $l$ bits. Ensuite, nous pouvons trouver les autres nombres de la suite avec la +formule suivante : +\begin{equation} +X_{i+1} = X_{i-249}\ \bm{xor}\ X_{i-102}, +\end{equation} +où $\bm{xor}$ est appliqué bit par bit dans la représentation binaire des nombres. +Prenez le fichier \texttt{aleatoire250.txt} disponible sur Cyberlearn. Ce fichier contient 250 nombres aléatoires (entre 0 +et $2^{16}-1$) obtenus du site \url{http://www.random.org}. Utilisez l’algorithme ci-dessus pour en trouver 300000 +nombres pseudo-aléatoires. +\begin{enumerate} + \item Testez les résultats en les affichant en deux et trois dimensions comme avant. + \item Calculez la moyenne des nombres obtenus. Comment se compare-t-elle à la moyenne théorique attendue? +\end{enumerate} + + +\section*{Calcul de $\pi$} + +Utiliser les générateurs de nombres aléatoires précédemment implantés pour calculer $\pi$, ainsi que la fonction \texttt{rand} d'Octave/Matlab (ou +une librairie d'un langage utilisant l'algorithme Mersenne Twister, elle est disponible dans boost par exemple). Pour ce faire +il faut tirer des couples des points dont la position est aléatoire $(x,y)\in [0,1]\times[0,1]$. Il faut ensuite calculer le rapport du nombre de points +tirés qui satisfont $x^2+y^2\leq 1$ sur le nombre total de points tirés. Que doit donner ce rapport si les nombres tirés sont +tous équiprobables après un très grand nombre de tirages? Obtenez le plus grand nombre possible de décimales de $\pi$ +avec les différents générateurs de nombres aléatoires. Qu'observez-vous? + + +\section*{Remarques} + +Le travail peut-être effectué en groupe de deux, mais les rapports doivent être individuels (le code peut être identique, n'oubliez pas de mentionner +explicitement si vous avez effectué le code à deux). +Finalement, je dois pouvoir exécuter le code +afin de pouvoir reproduire les résultats présentés dans le rapport. +Déposez le rapport EN FORMAT PDF et une archive contenant le code (deux fichiers séparés) +sur le site du cours s'il vous plaît, cela simplifie mon administration (et évite les problèmes avec les étudiants qui +ne mettent pas de nom sur le rapport...). + +La note sera une combinaison entre le code rendu et le rapport (moitié/moitié). + + + +\end{document}