1
Universit´e de Bordeaux
Master 2 MIMSE - UE : Outils de simulations 2
Ann´ee 2015-2016
Examen - 1`ere Session - Dur´ee 2h00
Les documents (notes de cours, polycopi´es) ne sont pas autoris´es.
L’examen consiste `a r´ediger un programme en Scilab que vous devez envoyer `a l’adresse
[email protected] sous la forme d’un e-mail avec comme sujet “Examen
Outils de Simulations 2 - Nom Pr´enom” et dont le contenu est un code Scilab commene.
Algorithmes de M´etropolis-Hasting et recuit simul´e
Dans cet exercice, on se propose d’utiliser deux approches algorithmiques pour d´eterminer
la m´ediane d’une mesure de probabilit´e discr`ete.
1.1 Rappels sur l’algorithme de M´etropolis-Hasting
On dispose des ´el´ements suivants :
- soit Eun espace d’´etats finis, et πune loi de probabilit´e sur Etelle que π(x)>0
pour tout xE,
- soit Qun noyau de Markov irr´eductible tel que si Q(x, y)>0 alors Q(y, x)>0
pour tout (x, y)E×E.
Pour simuler une chaˆıne de Markov (Xn)n0qui admet πcomme loi stationnaire, on
consid`ere l’algorithme suivant :
1. Initialisation n= 0 : choisir X0E.
2. Simuler YEselon la loi Q(Xn,·) i.e. P(Y=y) = Q(Xn, y) pour tout yE.
3. Simuler Uselon la loi uniforme sur [0,1].
Si U < min 1,π(Y)Q(Y,Xn)
π(Xn)Q(Xn,Y )alors Xn+1 =Y, et sinon Xn+1 =Xn.
4. Incr´ementer nde 1 i.e. n7→ n+ 1 et reprendre l’algorithme `a l’´etape 2.
Dans la suite, on consid`ere l’espace d’´etats E=3k
MMkMavec M= 50 o`u kest
un entier relatif variant entre Met M, et on souhaite ´etudier la mesure πsur Eefinie
par
π(x) = 1
Zπ
f(x),avec f(x) = ex2(2 + sin(5x) + sin(2x)),(1)
pour tout xE, o`u Zπest une constante de normalisation. Dans la suite, vous pour-
rez utiliser le code Scilab ci-dessous qui permet de d´efinir l’espace E, et de repr´esenter
graphiquement la fonction f:ER.
2
clf();
// Mesure non-normalisee `a simuler
function p=f(x)
p=exp(-x.^2) .* (2 + sin(x*5) + sin(x*2));
endfunction
M = 50;
E = 3*(-M:M)/M;
p=[];
for j = 1:length(E)
p=[p f(E(j))];
end
plot2d(E,p);
xtitle(’Mesure cible - Non-normalisee’);
On consid`ere ´egalement le choix suivant pour le noyau de proposition Q:
Q(x, y) =
0 si |xy|>∆ ou x=y
αsi x > 3 et y=x
1αsi x < +3 et y=x+ ∆
1 si x=3 et y=x+ ∆
1 si x= +3 et y=x
pour tout (x, y)E×E, o`u ∆ = 3
Met αest un param`etre entre 0 et 1.
Questions `a rendre par e-mail (code Scilab)
Q. 1 Compl´eter le code Scilab ci-dessous pour la construction de la matrice Q.
// Question 1
// Construction de la matrice Q
alpha = 0.001;
Q = zeros(length(E),length(E));
Q(1,2) = // ? //;
Q(2*M+1,2*M) = // ? //;
for (k =2:(2*M))
// ? // = alpha ;
// ? // = // ? //;
end
Q. 2 Compl´eter le code Scilab ci-dessous afin de construire une fonction proposition,
qui sachant Xn(variable d’entr´ee x), g´en`ere une variable al´eatoire Y(variable de sortie
xp) selon la loi Q(Xn,·):
// Question 2
// Proposition
function xp = proposition(x,alpha)
3
if (x == E(1)) then
xp = // ? //;
elseif (x == // ? //) then
xp = E(2*M);
else
u = // ? //;
j = find(E==x);
if (u < // ? //) then
xp = // ? //;
else
xp = // ? //;
end
end
endfunction
Q. 3 Compl´eter le code Scilab ci-dessous, afin d’impl´ementer l’algorithme de M´etropolis-
Hasting qui permet de simuler N= 105ealisations d’une variable al´eatoire de loi π
donn´ee par (1).
// Question 3
// Initilisation de l’algorithme
k = 10000; // Periode chauffe
N = 50000; // Longueur finale de la chaine
n = k+N;
X = zeros(n,1); // Vecteur contenant les realisations de la chaine de Markov
x = 0; // Position initiale de la chaine
function y=h(u)
y=min(1,u);
endfunction
for i = 1:n
// Proposition
// ? //
// Acceptation / Rejet
j = find(E==x);
jp = find(E==xp);
// ? //
end
// Suppression des k premieres valeurs
Xfinal = X(k:n);
Utiliser le code Scilab ci-dessous pour montrer, `a l’aide d’un histogramme, l’ad´equation
du r´esultat des simulations avec le graphe de la loi πafin de v´erifier que vous avez bien
4
simul´e des r´ealisations d’une variable al´eatoire suivant cette loi.
// Question 4
scf();
histplot(E,Xfinal,2);
xtitle(’Simulation par algorithme de Metropolis-Hasting’ );
Q. 4 Quelle(s) valeur(s) de αvous semble donner de bons r´esultats (donner votre r´eponse
sous forme de commentaires) ?
Q. 5 Utiliser les simulations obtenus par l’algorithme de Metropolis-Hasting pour d´eterminer
plusieurs estimateur de la m´ediane de la loi πdonn´ee par (1) pour α= 103,α= 0.1,
et α= 0.5. Noter vos r´esultats sous la forme de commentaires dans votre fichier Scilab `a
l’aide du code ci-dessous
// Question 5
// alpha = 0.001 - mediane = // ? //
// alpha = 0.1 - mediane = // ? //
// alpha = 0.5 - mediane = // ? //
Dans la suite de l’exercice, on propose d’utiliser l’algorithme du recuit simul´e pour
approcher num´eriquement la m´ediane de la loi π. Pour cela, on propose de d´eterminer un
point yEqui minimise la fonction y7→ V(y) sur l’ensemble Eo`u
V(y) = X
xE
π(x)|yx|,
pour tout yE. On rappelle que la mesure de Gibbs πTassoci´ee au potentiel Vet `a la
temp´erature T > 0 est d´efinie par
πT(y) = 1
ZT
exp 1
TV(y),
pour tout yE, o`u ZTest une constante de normalisation.
Q. 6 Compl´eter le code Scilab ci-dessous pour impl´ementer un algorithme de recuit simul´e
pour d´eterminer un minimum de la fonction Vavec le choix de d´ecroissance logarithmique
Ti= 1/log(i+ 1) pour le param`etre de temp´erature o`u iest l’it´eration courante de l’algo-
rithme. Vous ˆetes libre du choix de noyau de proposition Q, et vous prendrez y= 0 comme
param`etre d’initialisation.
// Question 6
// Potentiel V
w=[];
for j = 1:length(E)
w=[w f(E(j))];
end
function res=V(y)
5
res = sum(w.*abs(y-E));
endfunction
// Initilisation de l’algorithme
n = 5000;
Y = zeros(n,1); // Vecteur contenant les r´ealisations de la chaine de Markov
y = 0;
C = 1;
for i = 1:n
// ? //
// Choix de la temp´erature
temp = C/log(i+1);
// ? //
end
plot(Y)
Y(n)
Q. 7 Donner un code Scilab pour d´eterminer la valeur yEo`u la fonction Vatteint
son minimum (sur E). La valeur Y(n) obtenue par recuit simul´e converge-t-elle vers y?
Q. 8 La valeur Y(n) obtenue par recuit simul´e pour la minimisation de Vconverge-t-
elle vers la valeur de la m´ediane calcul´ee pr´ec´edemment `a partir de simulations d’une
chaine de Markov de loi stationnaire π? S’il existe une diff´erence, comment pouvez-vous
l’expliquer ? Noter vos r´esultats sous la forme de commentaires dans votre fichier Scilab.
1 / 5 100%