Algorithmes de Métropolis-Hasting et recuit simulé

publicité
1
Université de Bordeaux
Master 2 MIMSE - UE : Outils de simulations 2
Année 2015-2016
Examen - 1ère Session - Durée 2h00
Les documents (notes de cours, polycopiés) ne sont pas autorisés.
L’examen consiste à rédiger un programme en Scilab que vous devez envoyer à l’adresse
[email protected] sous la forme d’un e-mail avec comme sujet “Examen
Outils de Simulations 2 - Nom Prénom” et dont le contenu est un code Scilab commenté.
Algorithmes de Métropolis-Hasting et recuit simulé
Dans cet exercice, on se propose d’utiliser deux approches algorithmiques pour déterminer
la médiane d’une mesure de probabilité discrète.
1.1
Rappels sur l’algorithme de Métropolis-Hasting
On dispose des éléments suivants :
- soit E un espace d’états finis, et π une loi de probabilité sur E telle que π(x) > 0
pour tout x ∈ E,
- soit Q un noyau de Markov irréductible 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 )n≥0 qui admet π comme loi stationnaire, on
considère l’algorithme suivant :
1. Initialisation n = 0 : choisir X0 ∈ E.
2. Simuler Y ∈ E selon la loi Q(Xn , ·) i.e. P(Y = y) = Q(Xn , y) pour tout y ∈ E.
3. Simuler U selon
la loi uniforme
sur [0, 1].
π(Y )Q(Y,Xn )
Si U < min 1, π(Xn )Q(Xn ,Y ) alors Xn+1 = Y , et sinon Xn+1 = Xn .
4. Incrémenter n de 1 i.e. n 7→ n + 1 et reprendre l’algorithme à l’étape 2.
3k Dans la suite, on considère l’espace d’états E = M
avec M = 50 où k est
−M ≤k≤M
un entier relatif variant entre −M et M , et on souhaite étudier la mesure π sur E définie
par
1
2
π(x) =
f (x), avec f (x) = e−x (2 + sin(5x) + sin(2x)),
(1)
Zπ
pour tout x ∈ E, où Zπ est une constante de normalisation. Dans la suite, vous pourrez utiliser le code Scilab ci-dessous qui permet de définir l’espace E, et de représenter
graphiquement la fonction f : E → R.
2
clf();
// Mesure non-normalisee à 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ère également le choix suivant pour le noyau de proposition Q :

0
si |x − y| > ∆ ou x = y




si x > −3 et y = x − ∆
 α
1 − α si x < +3 et y = x + ∆
Q(x, y) =


1
si x = −3 et y = x + ∆



1
si x = +3 et y = x − ∆
pour tout (x, y) E × E, où ∆ =
3
M
et α est un paramètre entre 0 et 1.
Questions à rendre par e-mail (code Scilab)
Q. 1 Compléter 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éter le code Scilab ci-dessous afin de construire une fonction proposition,
qui sachant Xn (variable d’entrée x), génère une variable aléatoire 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éter le code Scilab ci-dessous, afin d’implémenter l’algorithme de MétropolisHasting qui permet de simuler N = 105 réalisations d’une variable aléatoire de loi π
donnée 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, à l’aide d’un histogramme, l’adéquation
du résultat des simulations avec le graphe de la loi π afin de vérifier que vous avez bien
4
simulé des réalisations d’une variable aléatoire 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ésultats (donner votre réponse
sous forme de commentaires) ?
Q. 5 Utiliser les simulations obtenus par l’algorithme de Metropolis-Hasting pour déterminer
plusieurs estimateur de la médiane de la loi π donnée par (1) pour α = 10−3 , α = 0.1,
et α = 0.5. Noter vos résultats sous la forme de commentaires dans votre fichier Scilab à
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é pour
approcher numériquement la médiane de la loi π. Pour cela, on propose de déterminer un
point y ∗ ∈ E qui minimise la fonction y 7→ V (y) sur l’ensemble E où
X
V (y) =
π(x)|y − x|,
x∈E
pour tout y ∈ E. On rappelle que la mesure de Gibbs πT associée au potentiel V et à la
température T > 0 est définie par
1
1
πT (y) =
exp − V (y) ,
ZT
T
pour tout y ∈ E, où ZT est une constante de normalisation.
Q. 6 Compléter le code Scilab ci-dessous pour implémenter un algorithme de recuit simulé
pour déterminer un minimum de la fonction V avec le choix de décroissance logarithmique
Ti = 1/log(i + 1) pour le paramètre de température où i est l’itération courante de l’algorithme. Vous êtes libre du choix de noyau de proposition Q, et vous prendrez y = 0 comme
paramètre 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éalisations de la chaine de Markov
y = 0;
C = 1;
for i = 1:n
// ? //
// Choix de la température
temp = C/log(i+1);
// ? //
end
plot(Y)
Y(n)
Q. 7 Donner un code Scilab pour déterminer la valeur y ∗ ∈ E où la fonction V atteint
son minimum (sur E). La valeur Y(n) obtenue par recuit simulé converge-t-elle vers y ∗ ?
Q. 8 La valeur Y(n) obtenue par recuit simulé pour la minimisation de V converge-telle vers la valeur de la médiane calculée précédemment à partir de simulations d’une
chaine de Markov de loi stationnaire π ? S’il existe une différence, comment pouvez-vous
l’expliquer ? Noter vos résultats sous la forme de commentaires dans votre fichier Scilab.
Téléchargement