Simuler l aléatoire. Licence 1 MASS, parcours SEMS et ESD Introduction à Java et à l algorithmique



Documents pareils
Cours 7 : Utilisation de modules sous python

16 Chapitre 16. Autour des générateurs pseudoaléatoires

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Modélisation et simulation

I. Introduction aux fonctions : les fonctions standards

1 Recherche en table par balayage

IFT3245. Simulation et modèles

1.6- Génération de nombres aléatoires

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Les structures de données. Rajae El Ouazzani

ACTIVITÉ DE PROGRAMMATION

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction au pricing d option en finance

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Initiation à l algorithmique

Objets et Programmation. origine des langages orientés-objet

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Corrigé des TD 1 à 5

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Chapitre 2 Devine mon nombre!

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Web Science. Master 1 IFI. Andrea G. B. Tettamanzi. Université de Nice Sophia Antipolis Département Informatique andrea.tettamanzi@unice.

Programmation Par Objets


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Utilisation d objets : String et ArrayList

Représentation d un entier en base b

as Architecture des Systèmes d Information

Chapitre 7. Récurrences

Programmation C++ (débutant)/instructions for, while et do...while

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Cours 1 : La compilation

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Programmer en JAVA. par Tama

Probabilités conditionnelles Loi binomiale

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Initiation à la programmation en Python

Architecture des ordinateurs

Simulation : application au système bonus-malus en responsabilité civile automobile

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Découverte de Python

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

TSTI 2D CH X : Exemples de lois à densité 1

Cours de Systèmes d Exploitation

TD3: tableaux avancées, première classe et chaînes

C f tracée ci- contre est la représentation graphique d une

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1

Algorithmique I. Algorithmique I p.1/??

UE C avancé cours 1: introduction et révisions

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Fluctuation d une fréquence selon les échantillons - Probabilités

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Solutions du chapitre 4

Programmation en Java IUT GEII (MC-II1) 1

Feuille TD n 1 Exercices d algorithmique éléments de correction

Chapitre 10. Les interfaces Comparable et Comparator 1

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Problèmes liés à la concurrence

Package Java.util Classe générique

Corrigé des exercices sur les références

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Agrégation des portefeuilles de contrats d assurance vie

V- Manipulations de nombres en binaire

Cours 1 : Qu est-ce que la programmation?

Introduction à MATLAB R

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Simulation de variables aléatoires

Temps Réel. Jérôme Pouiller Septembre 2011

Simulation d une économie monétaire (programmation impérative, sujet 3)

Conception de réseaux de télécommunications : optimisation et expérimentations

Algorithmique et Programmation, IMA

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Licence Sciences et Technologies Examen janvier 2010

INITIATION AU LANGAGE JAVA

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Claude Delannoy. 3 e édition C++

Programmation Classique en langage C

Les arbres binaires de recherche

Introduction au langage C

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Bases de programmation. Cours 5. Structurer les données

Cours d initiation à la programmation en C++ Johann Cuenin

FICHE UE Licence/Master Sciences, Technologies, Santé Mention Informatique

TP 1. Prise en main du langage Python

Algorithmique & programmation

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Plan du cours. Historique du langage Nouveautés de Java 7

Application 1- VBA : Test de comportements d'investissements

Transcription:

Licence 1 MASS, parcours SEMS et ESD Introduction à Java et à l algorithmique verel@i3s.unice.fr http://www.i3s.unice.fr/ verel Équipe ScoBi - Université Nice Sophia Antipolis 15 mars 2013

Synthèse Introduction Elèves pour la synthèse du jour?

Objectifs de la séance 6 Faire la différence entre aléatoire et pseudo-aléatoire Simuler un nombre pseudo-aléatoire entier ou flottant entre 2 bornes données Ecrire un algorithme utilisant un générateur pseudo-aléatoire Ecrire un algorithme qui génère des séries temporelles du type u t+1 = au t + b + ɛ et u t+1 = (a + ɛ)u t + b Question principale du jour : Comment générer une série de nombres qui ont l air d être aléatoires?

Plan Introduction 1 Introduction 2 3

Aiguille de Buffon Expérience Lancer n fois une aiguille de longueur 2l sur parquet dont les lames sont de largeur 2a. Soit p n le nombre de fois que l aiguille intercepte une lame de parquet. La fréquence pn n permet d approximer le nombre π. lim n p n n = 2l aπ à partir d événements aléatoires, il est possible d approximer une valeur

Besoin de nombres aléatoires Simulation : Modèle économique, sociologique, physique, médicale,... Cryptographie : Génération sûre de clés de chiffrement Optimisation stochastique : méthodes de MonteCarlo, recuit simulé, algorithmes génétiques, Paritcules Swarm Optimisation... Jeux de hasard : Loto, suduko,... Besoin croissant de nombres aléatoires en particulier en simulation et en cryptographie

Problème de génération Méthodes principales de générateurs de nombres aléatoires : A l aide d un système physique dont l état est aléatoire : Valeur précise d une résistance, apparition des taches solaires, vibration de matière... bonne méthode mais lente A l aide d un ordinateur : Mais un ordinateur est une machine déterministe : tout état prochain est une fonction (image unique) des états précèdents de la machine. rapide, facile à utiliser dans un ordinateur mais PAS aléatoire du tout... Depuis peu : combinaison des deux

Technique de génération : le pseudo-aléatoire 2 étapes : Initialisation d un premier nombre appelé graine : Génération d une suite de nombres définie par récurrence : u 0 u n+1 = f (u n ) 3402093, 56, 125672, 10048, 678089,...

Limite des machines : le pseudo-aléatoire Mais : Taille de mémoire limitée Nombre de registres de calcul d un processeur limité inévitable périodicité des nombres générés pseudo-aléatoirement par ordinateur La suite des nombres doit avoir certaines propriétés de l aléatoire générateur pseudo-aléatoire

Petit historique Développement essentiellement dû au besoin en simulation et cryptographie. 1946 : John Von Neumann, générateur Middle square 1948 : D. H. Lehmer, générateur congruenciel 1958 : G.T. Mitchell, et D.P. Moore, améalioration 1997 : Makoto Matsumoto et Takuji Nishimura : Mersenne-Twister

Algorithme de Von Neumann Middle Square Principe : pour calculer le nombre suivant, on élève au carré le nombre précèdent puis on conserve les chiffres du milieu. Exemple : Graine : 1111 1. 1111 2 = 1234321, premier nombre : 23432 2. 23432 2 = 549058624, deuxième nombre : 4905862 3.... Périodicité faible Dépend beaucoup de la graine à fonctionnner sur l ENIAC, mais très vite limité.

Méthode de Von Neumann // nombre courant pseud-aleatiore int n = 1111; / initialisation generateur pseudo-aleatoire de Von Neumann entree : graine du generateur aleatoire sortie : aucune / void randseed(int k) { n = k;

Méthode de Von Neumann / generateur pseudo-aleatoire de Von Neumann entree : aucune sortie : nombre non attendu suivant / int rand() { int nbchiffre = int(log(n n) / log(10)); n = (n n) % int(exp(nbchiffre log(10))) / 10; return n; void setup() { randseed(1111); println(rand()); println(rand());

Méthode de Fibonacci Basé sur la suite de Fibonacci et l arithmétique modulaire. avec x 0 et x 1 comme graines x n = (x n 1 + x n 2 ) mod M Ou une variante avec k un entier. avec x 0... x k 1 comme graines x n = (x n 1 + x n k ) mod M Qualité : dépend de k et des nombres utilisés pour graines Peu de consommation de ressources Simple à implémenter...

Méthode Fibonacci // nombres courants pseudo-aleatoires int n0 ; int n1 ; // congruence int M = 1000; / generateur pseudo-aleatoire : Methode de Fibonacci entree : graine du generateur aleatoire sortie : aucune / void randseed(int _n0, int _n1) { n0 = _n0; n1 = _n1;

Méthode Fibonacci / generateur pseudo-aleatoire Fibonacci entree : aucune sortie : nombre non attendu suivant / int rand() { int suiv = (n0 + n1) % M; n0 = n1; n1 = suiv; return suiv; void setup() { randseed(23456, 9726); println(rand()); println(rand());

Générateurs congruentiels linéaires Basé sur les suites arithmétiquo-géométriques et l arithmétique modulaire. avec x 0 une graine. x n = ax n 1 + c mod m Période au maximum m. m choisit de la taille des nombres en machine 2 32. Simple à implémenter...

Methode par congruence linéaire // nombres courants pseudo-aleatoires int n ; // congruence int M = 1000; int a = 53; int c = 97; / generateur pseudo-aleatoire basee sur la congruence entree : graine du generateur aleatoire sortie : aucune / void randseed(int _n) { n = _n;

Méthode par congruence linéaire / generateur pseudo-aleatoire base sur la congruence entree : aucune sortie : nombre non attendu suivant / int rand() { n = (a n + c) % M; return n; void setup() { randseed(23456); println(rand()); println(rand());

Mersenne-twister (Makoto Matsumoto et Takuji Nishimura 1997) Basé sur les nombres de Mersenne 2 p 1 Période 2 19937 1 distribution uniforme sur 623 dimensions N est pas un générateur adapté à la cryptographie, mais très utile en simulation et optimisation.

Propriétés statistiques du pseudo-aléatoire Les générateurs pseudo-aléatoires sont conçus pour générer des nombres selon une loi proche d une loi uniforme U(0, maxvalue 1). Certaines propriétés statistiques attendues Propriété de la distribution des nombres : moments, fréquence d apparition des nombres, comparaison à la loi uniforme Entropie maximale Indépendance statistique des nombres de la série : autocorrélation, test spectral

Générateur pseudo-aléatoires de nombres flottants Initialisation de la graine aléatoire randomseed(n) Nombre aléatoire (float) entre 0 et b (b exclu) random(b) Nombre aléatoire (float) entre a et b (b exclu) random(a, b)

Générateur pseudo-aléatoires de nombres entiers Nombre aléatoire (int) entre 0 et b 1 int(random(b)) Nombre aléatoire (int) entre a et b 1 int(random(a, b))

Jeu où l on doit deviner un nombre entre 0 et 100 / Organise le jeu qui consiste a deviner un nombre entree : - n : nombre a deviner sortie : - aucune / void deviner() { int rep; int n = int(random(101)); rep = n - 1; while (rep!= n) { rep = lire("proposer un nombre entier"); if (rep < n) println("trop petit"); else if (rep > n) println("trop grand"); println("winner is back!");

Simulation de lancer de fléchettes / lancer de n flechettes entree : n : entier, nombre de lancer sortie : nombre points sur n lancers / int lancer(int n) { int pts = 0; float rho, theta ; for(int i = 0; i < n; i++) { rho = random(10); theta = random(-3.14159265358, 3.14159265358); point(width / 2 + 10 rho cos(theta), height / 2 + 10 rho sin(theta)); pts += nbpoints(rho); return pts;

Simulation de lancer de fléchettes / compte le nombre de point en fonction de la distance au centre entree : rho : distance au centre sortie : nombre de point / int nbpoints(float rho) { if (rho > 10) return 0; else if (rho > 5) return 3; else if (rho > 2) return 5; else if (rho > 1) return 10; else return 20;

Simulation de marche aléatoire Simulation une marche aléatoire de n pas sur l ensemble des entiers (positifs ou négatif) en partant du point central. // variable globale int x, y; / marche aleatoire sur Z^2 entree : aucune sortie : aucune / void marche() { if (int(random(2)) == 0) y++; else y--; if (int(random(2)) == 0) x++; else x--;

Simulation de marche aleatoire void draw() { // efface stroke(0); point(x, y); marche(); // affiche stroke(255); point(x, y); void setup() { size(200, 200); background(0); strokeweight(20); // position initiale y = height / 2; x = width / 2; framerate(20);

Objectifs de la séance 6 Faire la différence entre aléatoire et pseudo-aléatoire Simuler un nombre pseudo-aléatoire entier ou flottant entre 2 bornes données Ecrire un algorithme utilisant un générateur pseudo-aléatoire Ecrire un algorithme qui génère des séries temporelles du type u t+1 = au t + b + ɛ et u t+1 = (a + ɛ)u t + b Question principale du jour : Comment générer une série de nombres qui ont l air d être aléatoires?