• Aucun résultat trouvé

29févie2008 É ieS Bi Uiveiédei eShia Ai

N/A
N/A
Protected

Academic year: 2022

Partager "29févie2008 É ieS Bi Uiveiédei eShia Ai"

Copied!
35
0
0

Texte intégral

(1)

Sébastien Verel

vereli3s.unie.fr

www.i3s.unie.fr/

verel

ÉquipeSoBi-UniversitédeNieSophia-Antipolis

29 février2008

(2)

Objetifs de la séane 6

Faire ladiérene entrealéatoire et pseudo-aléatoire

Simulerun nombrepseudo-aléatoire entierou ottantentre 2

bornes données

Erire unalgorithmeutilisant ungénérateur pseudo-aléatoire

Erire unalgorithmequigénère dessériestemporellesdutype

u

t

+

1

=

aut

+

b

+ ǫ

et ut

+

1

= (

a

+ ǫ)

ut

+

b

Question prinipaledujour :

Comment générerune sériede nombres quiont l'aird'être

aléatoires?

(3)

Plan

1

Introdution

2

Générateurs pseudo-aléatoire

3

Algorithmesstohastiques

(4)

Aiguille de Buon

Expériene

Laner n fois uneaiguillede longueur2l surparquet dontles lames

sontde largeur2a .

Soit p

n

lenombrede fois quel'aiguilleinterepteunelamede

parquet.

La fréquene p

n

n

permetd'approximer lenombre

π

.

lim

n

→∞

p

n

n

=

2l

a

π

à partird'événements aléatoires,ilest possibled'approximer une valeur

(5)

Besoin de nombres aléatoires

Simulation :

Modèleéonomique, soiologique,physique, médiale,...

Cryptographie :

Génération sûre de lésdehirement

Optimisation stohastique :

méthodesde MonteCarlo,reuit simulé,algorithmes

génétiques, Paritules Swarm Optimisation...

Jeux de hasard:

Loto, suduko,...

Besoin roissantde nombres aléatoiresen partiulieren simulation

et en ryptographie

(6)

Problème de génération

Méthodesprinipales degénérateurs de nombresaléatoires:

Al'aided'un système physique dontl'étatest aléatoire :

Valeurpréise d'une résistane,appartition destahessolaires,

vibrationde matière...

bonneméthode maislente

Al'aided'un ordinateur:

Mais unordinateur estune mahinedéterministe:

tout étatprohain est unefontion(image unique)des états

préèdents de lamahine.

rapide,faileà utiliserdansunordinateur

maisPASaléatoire dutout...

Depuistrès peu :ombinaison desdeux

(7)

Tehnique de génération : le pseudo-aléatoire

2 étapes:

Initialisationd'un premier nombre appelégraine :

u

0

Génération d'unesuitede nombres dénieparréurrene :

u

n

+

1

=

f

(

un

)

3402093

,

56

,

125672

,

10048

,

678089

, ...

(8)

Limite des mahines : le pseudo-aléatoire

Mais :

Taillede mémoirelimitée

Nombre de registresde alul d'un proesseurlimité

inévitable périodiitédes nombresgénérés pseudo-aléatoirement parordinateur

La suitedesnombresdoit avoirertaines propriétés de l'aléatoire

générateur pseudo-aléatoire

(9)

Petit historique

Développementessentiellementdûau besoinen simulationet

ryptographie.

1946 :John Von Neumann, générateurMiddlesquare

1948 :D. H.Lehmer,générateur ongrueniel

1958 :G.T.Mithell, etD.P.Moore,améalioration

1997 :Makoto MatsumotoetTakuji Nishimura:

Mersenne-Twister

(10)

Algorithme de Von Neumann

MiddleSquare

Prinipe:pouraluler lenombre suivant, onélève auarré le

nombrepréèdentpuis ononserve les hiresdumilieu.

Exemple :

Graine:1111

1. 1111

2

=

1234321, premier nombre:23432

2. 23432

2

=

549058624, deuxième nombre:4905862

3. ...

Périodiitéfaible

Dépendbeauoup de lagraine

àfontionnner sur l'ENIAC,mais trèsvite limité.

(11)

Algorithme de Von Neumann

n :variableglobale ontenantle nombreourant pseudo-aléatoire

Algorithme randSeed(k :entier) :

début

n

k

n

Algorithme rand() :entier

début

variable nbChires :entier

nbChires

E(log10

(

n2

)

)

n

modulo(n2,10nbChrires) / 10

retournern

n

(12)

Méthode de Von Neumann

// nombreourantpseud-aléatior e

int n=1111;

/************* ** *** ** ** ** ** *** ** *

*initialisationgénérateur pseudo-aléatoi re deVonNeumann

*

*entrée:

* grainedu générateuraléatoire

*

*sortie:

* auune

*************** *** ** ** ** ** *** ** /

voidrandSeed(int k) {

n=k;

}

(13)

Méthode de Von Neumann

/************* ** *** ** ** ** ** *** ** *

*générateurpseudo-aléatoire deVon Neumann

*

*entrée:

* auune

*

*sortie:

* nombrenonattendu suivant

*************** *** ** ** ** ** *** ** /

int rand(){

intnbChiffre =int(log(n *n) /log(10));

n=(n*n)%int(exp(nbChiffr e*log(10))) /10;

returnn;

}

voidsetup(){

randSeed(1111) ;

println(rand() );

println(rand() );

}

(14)

Méthode de Fibonai

Basé surlasuitede Fibonai et l'arithmétiquemodulaire.

x

n

=

xn

1

+

xn

2

modM

ave x

0 etx

1

omme graines

Ou une varianteave k unentier.

x

n

=

xn

1

+

xn

k

mod M

ave x

0 ...x

k

1

omme graines

Qualité :dépendde k et desnombresutiliséspour graines

Peu de onsommationde ressoures

(15)

Méthode de Fibonai

Algorithme

On supposen

0 ,n

1

et M sontdesnombres entiersdénisde

manière globale.

Algorithme rand() :entier

début

variable suiv:entier

suiv

modulo(n0

+

n1 ,M)

n

0

n1 n

1

suiv

retournersuiv

n

(16)

Méthode Fibonai

// nombresourants pseudo-aléatoi re s

int n0;

int n1;

// ongruene

int M=1000;

/************* ** *** ** ** ** ** *** ** *

*générateurpseudo-aléatoire deVon Neumann

*

*entrée:

* grainedu générateuraléatoire

*

*sortie:

* auune

*************** *** ** ** ** ** *** ** /

voidrandSeed(int _n0,int_n1){

n0=_n0;

n1=_n1;

}

(17)

Méthode Fibonai

/************* ** *** ** ** ** ** *** ** *

*générateurpseudo-aléatoire Fibonai

*

*entrée:

* auune

*

*sortie:

* nombrenonattendu suivant

*************** *** ** ** ** ** *** ** /

int rand(){

intsuiv=(n0+n1)%M;

n0=n1;

n1=suiv;

returnsuiv;

}

voidsetup(){

randSeed(23456 , 9726);

println(rand() );

println(rand() );

}

(18)

Générateurs ongruentiels linéaires

Basé surles suitesarithmétiquo-géométriques etl'arithmétique

modulaire.

x

n

=

axn

1

+

mod m

ave x

0

unegraine.

Périodeau maximumm.

m hoisitde latailledesnombres enmahine 2 32

.

Simple àimplémenter....

(19)

Algorithme

On supposeraque x

0

,a, etmsontdéterminés globalement,ainsi

que lenombre ourant x.

Algorithme rand() :entier

début

x

modulo(ax

+

,m)

retournerx

n

(20)

Méthode par ongruene linéaire

// nombresourants pseudo-aléatoi re s

int n;

// ongruene

int M=1000;

int a=53;

int =97;

/************* ** *** ** ** ** ** *** ** *

*générateurpseudo-aléatoire basée surlaongruene

*

*entrée:

* grainedu générateuraléatoire

*

*sortie:

* auune

*************** *** ** ** ** ** *** ** /

voidrandSeed(int _n){

n=_n;

}

(21)

Méthode par ongruene linéaire

/************* ** *** ** ** ** ** *** ** *

*générateurpseudo-aléatoire basésurlaongruene

*

*entrée:

* auune

*

*sortie:

* nombrenonattendu suivant

*************** *** ** ** ** ** *** ** /

int rand(){

n=(a*n+)%M;

returnn;

}

voidsetup(){

randSeed(23456 );

println(rand() );

println(rand() );

}

(22)

Mersenne-twister (Makoto Matsumoto et Takuji Nishimura

1997)

Basé surles nombres de Mersenne2 p

1

Période2 19937

1

distributionuniformesur 623 dimensions

N'est pas ungénérateuradapté à laryptographie,mais très

utile en simulationet optimisation.

(23)

Propriétés statistiques

Les générateurs pseudo-aléatoiresgénèrentdes loisuniformes

U

(

0

,

maxValue

1

)

.

Certainespropriétésstatistiquesd'un générateur pseudo-aléatoire

sont attendues:

Propriétéde ladistributiondes nombres:moments, fréquene

d'apparitiondesnombres,omparaison àlaloiuniforme

Entropie maximale

Indépendane statistiquedes nombresde lasérie :

autoorrélation,testspetral

(24)

Générateur pseudo-aléatoires de nombres ottants

Initialisationde lagrainealéatoire

randomSeed(n)

Nombrealéatoire (oat)entre 0 etb (b exlu)

random(b)

Nombrealéatoire (oat)entre aet b (b exlu)

random(a, b)

(25)

Générateur pseudo-aléatoires de nombres entiers

Nombrealéatoire (int)entre0 etb

1

int(random(b))

Nombrealéatoire (int)entrea etb

1

int(random(a, b))

(26)

Jeu où l'on doit deviner un nombre entre 0 et 100

Algorithme deviner() :rien

début

variable a , n :entier

n

←???

a

n

1

tant quea

6=

n faire

a

lire("proposer unnombre") si a

<

n alors

érire("trop petit")

sinon

érire("trop grand")

nsi

ntant que

érire("gagné")

(27)

Jeu où l'on doit deviner un nombre entre 0 et 100

Algorithme deviner() :rien

début

variable a , n :entier

n

int

(

random

(

101

))

a

n

1

tant quea

6=

n faire

a

lire("proposer unnombre") si a

<

n alors

érire("trop petit")

sinon

érire("trop grand")

nsi

ntant que

érire("gagné")

(28)

Jeu où l'on doit deviner un nombre entre 0 et 100

/************* ** *** ** ** ** ** *** ** ** ** ** *

* Organise lejeuquionsiste àdevinerun nombre

*

* entrée:

* -n:nombreàdeviner

*

* sortie:

* -auune

************** ** *** ** ** ** ** *** ** ** ** ** */

voiddeviner() {

intrep;

intn=int(random(101) );

rep=n-1;

while (rep!= n){

rep=lire("Proposer unnombreentier");

if(rep<n)

println("trop petit");

else

if(rep>n)

println("tropgrand");

}

println("Gagné!");

}

(29)

Simulation de laner de éhettes

Simulation d'un lané de n éhettessur uneible

Algorithme laner(n:entier) :entier

début

variable i,pts:entier

variable

ρ

,

θ

:réel

pts

0

pour ide 0 àn

1 faire

ρ ←

random

(

10

) θ ←

random

(−π, π)

point(

ρ

os

(θ)

,

ρ

sin

(θ)

)

pts

pts+points(

ρ

)

npour

retournerpts

(30)

Simulation de laner de éhettes

Algorithme points(d:réel):entier

début

sid>10alors

retourner0

sinon

sid>5alors

retourner3

sinon

sid>2alors

retourner5

sinon

sid>1alors

retourner10

sinon

retourner20

nsi

nsi

nsi

nsi

n

(31)

Simulation de laner de éhettes

/************* ** *** ** ** ** ** *** ** *

*lanerdenflehettes

*

*entrée:

* n: entier,nombrede laner

*

*sortie:

* nombrepoints surnlaners

*************** *** ** ** ** ** *** ** /

int laner(intn){

intpts=0;

float rho,theta ;

for(inti=0;i<n;i++){

rho =random(10);

theta=random(-3.14159 265 35 8,3.14159265358) ;

point(width /2+10 *rho*os(theta), height/2+10*rho*sin(theta));

pts+=nbPoints(rho);

}

returnpts;

}

(32)

Simulation de laner de éhettes

/************* ** *** ** ** ** ** *** ** *

*omptelenombre depoint enfontion deladistane auentre

*

*entrée:

* rho:distane auentre

*

*sortie:

* nombrede point

*************** *** ** ** ** ** *** ** /

int nbPoints(floatrho){

if(rho>10)

return0;

else

if(rho>5)

return3;

else

if(rho>2)

return5;

else

if(rho>1)

return10;

else

return20;

}

(33)

Simulation de marhe aléatoire

Simulation unemarhe aléatoire de n pas surl'ensembledes entiers

(positifsou négatif) en partant dupointentral.

Algorithme marheZ(n:entier):rien

début

variable x,y:entier

x

0

y

0

pourxde0àn

1faire

siint(random(2))==0alors

y

y

+

1 sinon

y

y

1

nsi

siint(random(2))==0alors

x

x

+

1 sinon

x

x

1

nsi

point(x,y)

npour

n

(34)

Simulation de marhe aléatoire

/************* ** *** ** ** ** ** *** ** *

*marhealéatoire surZ^2

*

*entrée:

* n: entier,nombrede pas

*

*sortie:

* auune

*************** *** ** ** ** ** *** ** /

voidmarhe(int n){

intx,y;

y=height/2;

x=width /2;

for(inti=0;i<n;i++){

if(random(2)<1)

y++;

else

y--;

if(random(2)<1)

x++;

else

x--;

point(x,y);

stroke(i%255,255,255);

(35)

Objetifs de la séane 6

Faire ladiérene entrealéatoire et pseudo-aléatoire

Simulerun nombrepseudo-aléatoire entierou ottantentre 2

bornes données

Erire unalgorithmeutilisant ungénérateur pseudo-aléatoire

Erire unalgorithmequigénère dessériestemporellesdutype

u

t

+

1

=

aut

+

b

+ ǫ

et ut

+

1

= (

a

+ ǫ)

ut

+

b

Question prinipaledujour :

Comment générerune sériede nombres quiont l'aird'être

aléatoires?

Références

Documents relatifs

variable dont la valeur de vérité est soit VRAI soit

−→ utiliser un shéma itératif à nombre déterminé d'itérations. −→ appelé aussi souvent

Comprendre et aluler le résultat d'un algorithme donné1. Modier un

width : largeur totale en pixel (px) ou pourentage ( % ) ellpading : espaement entre bordure et ontenu (px | % ) ellspaing : espaement entre bordures de ellules (px | % ) frame :

Connaître les mots lefs d'un langage impératif simple.. Connaître les opérations de bases

Deux tableaux sont de tailles n et ontiennent les lettres A,T,G.

A-t-on besoin d'un traitement séquentiel des données. Le nombre de données est-il déterminé

onstruire et érire des ensembles dénis indutivement1. notion de