TP3 Sidm1
TP3 Sidm1
TP3 Sidm1
March 9, 2017
In [ ]: %matplotlib inline
# coding: utf8
from matplotlib.pyplot import *
from math import *
from numpy import *
from numpy.random import *
from numpy.linalg import *
from scipy.misc import *
#from scipy import *
Marche aléatoire simple sur R Soit (εn )n≥0 une suite de variables aléatoires indépendantes et
de même loi de Rademacher R(p) avec 0 < p < 1 et, pour tout n ≥ 0, soit
Xn := ε0 + ε1 + · · · + εn .
Montrer que (Xn )n≥0 est une chaîne de Markov homogène dont on précisera la matrice de tran-
sition Π. Le code Python permettant de simuler cette chaîne de Markov suit. Les valeurs du
paramètre p et de l’horizon de temps sont affectées par l’utilisateur.
Pour quelles valeurs de p la chaîne est-elle irréductible?
Pour quelles valeurs de p la chaîne est-elle récurrente? Transiente?
Lorsque la chaîne est transiente, quel est son comportement asymptotique? Même question
quand la chaîne est récurrente.
1
Transmission de l’information Une information sous la forme de oui ou non est transmise à
travers n individus. On suppose que chaque intermédiaire transmet l’information avec la prob-
abilité p et son contraire avec la probabilité 1 − p où 0 < p < 1. De plus, on suppose que les
intermédiaires sont indépendants.
Modéliser cette situation par une chaîne de Markov (Xn )n≥0 à deux états E = {−1, 1} et
déterminer sa matrice de transition Π.
Calculer de deux manières différentes la probabilité qn que le n-ème individu transmette fidéle-
ment l’information initiale.
La question précédente est traitée numériquement dans le code qui suit. Expliquer précisé-
ment ce que fait ce programme.
Calculer la limite de qn lorsque n tend vers l’infini.
Créer un code Python permettant d’illustrer cette convergence, où la valeur du paramètre p est
affectée par l’utilisateur.
In [ ]: p=float(input('quelle est la valeur de p?'));
N=int(input('Quel est l\'horizon?'));
n=linspace(1,N,N);
l=2*p-1;
qn1=0.5*l**n+0.5;
#print('première méthode');
figure(1);
plot(n,qn1,'r');
title(u'méthode 1')
PI=np.matrix([[p,1-p],[1-p,p]]);
Q=np.matrix([1,0])
qn2=zeros([1,N])
for i in range(1, N+1):
Q=Q*PI
qn2[0,i-1]=Q[0,0]
qn2=qn2[0,:];
figure(2)
title(u'méthode 2')
plot(n,qn2,'b');
Chaîne à deux états On considère la chaîne de Markov (Xn )n≥0 d’espace d’états E = {0, 1}
et de matrice de transition
1−a a
P =
b 1−b
avec 0 < a, b < 1. Montrer que
(1 − a − b)n
1 b a a −a
Pn = +
a+b b a a+b −b b
puis déterminer la limite de P n lorsque n tend vers l’infini. Calculer l’unique probabilit’e invari-
ante µ de la chaîne de Markov (Xn )n≥0 . Si Sn = X1 + X2 + · · · + Xn , montrer que
Sn a
lim = .
n→∞ n a+b
Créer un code Python permettant de simuler cette chaîne de Markov et d’illustrer ce résultat de
convergence, où les paramètres a et b sont affectés par l’utilisateur.
2
Une chaîne à quatre états On considère la chaîne de Markov (Xn )n≥0 d’espace d’états E =
{1, 2, 3, 4} et de matrice de transition
0 1 0 0
1 0 1 1
Π= 2 4 4
1 1 0 0 .
2 2
0 0 1 0
Calculer l’unique probabilité invariante µ de la chaîne de Markov (Xn )n≥0 . A partir du théorème
ergodique, montrer que
n n
1X 1X 2
lim Xk = a et lim Xk = b p.s.
n→∞ n n→∞ n
k=0 k=0
In [ ]: Pi=np.matrix([[0,1,0,0], [0.5,0,0.25,0.25],[0.5,0.5,0,0],[0,0,1,0]]);
Pi1=Pi.transpose();
propre=eig(Pi1)[1];
propre1=propre[:,0]
mu=abs(propre1)/sum(abs(propre1));
print('Probabilité invariante')
print(mu.transpose());
print('Transition puissance 100')
print(Pi**100);
N=int(input('Quel est l\'horizon?'));
X0=int(input('Quel est le point initial?'));
X=zeros([1,N+1]);
X[0,0]=X0;
for i in range(1, N+1):
p1=Pi[X0-1,0];
p2=p1+Pi[X0-1,1];
p3=p2+Pi[X0-1,2];
u=rand(1,1);
X0=4
if u<p1:
X0=1;
elif u<p2:
X0=2
elif u<p3:
X0=3
X[0,i]=X0
X=X[0,:];
n=linspace(0,N,N+1);
figure(1);
plot(n,X,'g');
title('Une trajectoire')
m1=mean(X)
m2=mean(X*X)
3
m1theo=mu[0]+2*mu[1]+3*mu[2]+4*mu[3];
m2theo=mu[0]+4*mu[1]+9*mu[2]+16*mu[3];
print('valeur empirique de la moyenne')
print(m1)
print(u'valeur théorique de la moyenne')
print(m1theo[0,0])
print('valeur empirique du moment d\'ordre 2' )
print(m2)
print(u'valeur théorique du moment d\'ordre 2')
print(m2theo[0,0])
Chaîne d’Ehrenfest Soit d boules numérotées de 1 à d avec d > 1, réparties dans deux urnes A
et B. On tire un nombre i au hasard entre 1 et d et la boule numéro i est changée d’urne. On note
Xn le nombre de boules dans l’urne A après n tirages indépendants. Montrer que (Xn )n≥0 est une
chaîne de Markov homogène d’espace d’états fini E = {0, 1, · · · , d}, appelée chaîne d’Ehrenfest.
Déterminer sa matrice de transition Π ainsi que son unique probabilité invariante µ. Montrer qu’il
existe deux constantes a, b ∈ R telles que, ∀x ∈ E,
X
yP (x, y) = ax + b.
y∈E
En déduire que E[Xn |X0 ] → d/2. Créer un code Python permettant de simuler une chaîne
d’Ehrenfest et d’illustrer ce résultat de convergence.
µ(y)Q(y, x)
,
µ(y)Q(y, x) − µ(x)Q(x, y)
la chaîne de Markov définie par l’algorithme de Metropolis-Hastings aura encore µ pour mesure
invariante.
µ(y)Q(y,x)
On remplace plus généralement la probabilité d’acceptation-rejet min 1, µ(x)Q(x,y) par
µ(y)Q(y, x)
α ,
µ(x)Q(x, y)
avec α : R+ →]0, 1]. Donner une condition suffisante sur la fonction α pour que la mesure µ soit
la mesure invariante de la chaîne de Markov définie par l’algorithme de Metropolis-Hastings.
4
Recuit simulé - le voyageur de commerce On considère le problème du voyageur de commerce
suivant. Un commerçant doit visiter N clients dans N villes différentes puis revenir à son point
de départ (en ne visitant qu’une seule fois chaque ville). On cherche à minimiser la distance totale
parcourue.
On représente les villes par N points v1 , . . . , vN dans [0, 1] × [0, 1] ⊂ R2 , un trajet possible par
une suite (vi(1) , . . . , vi(N ) ) de points et la distance à minimiser est
XN
d (vi(1) , . . . , vi(N ) ) = |vi(k) − vi(k+1) |,
k=1
In [ ]: