• Aucun résultat trouvé

Projets de programmation M1 Mathématiques, Modélisation et Apprentissage

N/A
N/A
Protected

Academic year: 2022

Partager "Projets de programmation M1 Mathématiques, Modélisation et Apprentissage"

Copied!
18
0
0

Texte intégral

(1)

Projets de programmation

M1 Mathématiques, Modélisation et Apprentissage

(2)

Instructions

— Le projet est à rendre sous la forme d’un fichier source Nom_Prenom.ipynb et de son export sous la forme d’un fichier Nom_Prenom.pdf.

— Le fichier .ipynb doit être organisé autant que possible sous la forme de fonctions, avec une structuration claire et des noms de variables permettant de comprendre votre raisonnement. Il doit pouvoir être exécuté tel quel.

— Les deux fichiers doivent être envoyés à etienne.birmele@parisdescartes.fr

au plus tard le lundi 25 novembre 2019.

(3)

Chapitre 1

Transport optimal

1.1 Introduction

Dans ce projet, on s’intéresse au problème du transport optimal ou du mariage entre deux nuages de points du plan R 2 . Soit n un entier. On consi- dère 2n points X 1 , . . . , X n , Y 1 , . . . , Y n du plan. Chaque point X k a des co- ordonnées que l’on note (x 1 k , x 2 k ) dans le plan, et chaque point Y k a des coordonnées que l’on note (y k 1 , y k 2 ). On cherche à résoudre le problème de transport optimal (ou de mariage optimal) entre les points (X j ) 1≤j≤n et les points (Y j ) 1≤j≤n , c’est-à-dire que l’on cherche la permutation σ de l’ensemble {1, . . . , n} qui permet d’atteindre le minimum de la quantité

n

X

i=1

kX i − Y σ(i) k 2 2 . (1.1)

Ce problème est très classique en logistique ou en économie : on peut par exemple imaginer que des marchandises sont stockées dans des fabriques situées aux points X i et que chaque Y j représente un client. On souhaite alors répartir le transport des marchandises des fabriques vers les clients de manière à ce que le coût total de transport soit le plus petit possible. Dans ce qui suit, on notera

X =

 X 1

.. . X n

 et Y =

 Y 1

.. . Y n

les matrices à n lignes et 2 colonnes contenant l’ensemble des points X k et Y k . X et Y sont appelés des nuages de points du plan.

1. Créer deux nuages de points X 0 et Y 0 sous la forme de matrices n × 2 et par les visualiser, par exemple en tirant les points aléatoirement avec une loi uniforme sur le carré [0, 1] × [0, 1].

3

(4)

×

×

×

×

×

Figure 1.1 – Deux nuages de points de R 2 . Le nuage X est représenté par des disques et le nuage Y par des croix. On souhaite marier les points de X et les points de Y de manière à rendre la somme des distances au carré entre points mariés la plus petite possible.

1.2 Transport en dimension 1

On suppose dans un premier temps que les deux nuages de points X et Y sont dans R et pas dans R 2 . On pourra donc écrire dans cet exercice X et Y comme des vecteurs colonnes de longueur n. Les points de X ne sont pas forcément ordonnés, on note donc σ X : {1, . . . , n} −→ {1, . . . , n} la permutation qui ordonne les points de X de manière croissante :

X σ

X

(1) ≤ X σ

X

(2) ≤ · · · ≤ X σ

X

(n) .

De même, on note σ Y : {1, . . . , n} −→ {1, . . . , n} la permutation qui ordonne les points de Y de manière croissante.

Dans ce cas particulier (nuages dans R ), la permutation σ qui permet de rendre la quantité (1.1) la plus petite possible est celle qui envoie le k ieme plus petit point de X sur le k ieme plus petit point de Y . Cette permutation peut s’écrire

σ = σ Y ◦ σ X −1 .

1. Justifier que le minimum de la quantité (1.1) est alors égal à

n

X

i=1

kX σ

X

(i) − Y σ

Y

(i) k 2 2 . (1.2)

2. Ecrire une fonction transport1D(X, Y ) qui prend en entrée les vecteurs

(5)

X et Y et renvoie les vecteurs de permutations

s X =

σ X (1) .. . σ X (n)

 et s Y =

 σ Y (1)

.. . σ Y (n)

et la quantité (1.2). On pourra utiliser la fonction argsort du package numpy.

1.3 Transport par projections en deux dimensions

On souhaite maintenant résoudre le problème pour deux nuages de points X et Y dans le plan. Dans ce qui suit, on rappelle que chaque nuage de points Z de taille n pourra s’écrire sous la forme d’une matrice à n lignes et 2 colonnes :

Z =

 Z 1

.. . Z k

.. . Z n

=

z 1 1 z 1 2 .. . .. . z k 1 z k 2

.. . .. . z n 1 z n 2

 ,

où (z k 1 , z k 2 ) sont les coordonnées du point Z k dans le plan.

Remarque : Trouver la permutation σ qui rend la quantité (1.1) la plus petite possible est un problème difficile en pratique, on propose donc de le résoudre de manière approchée. Pour cela, on propose un algorithme itératif qui va progressivement déplacer les points de X vers les points de Y en résolvant plusieurs problèmes unidimensionnels successifs.

L’algorithme approché que l’on propose d’utiliser est itératif et consiste à répéter M fois des étapes de projection et de déplacement des points du nuage X. On détaille ces étapes dans ce qui suit.

Projection aléatoire. A chaque étape, on tire aléatoirement une direc- tion θ dans ] − π/2, π/2] avec une loi uniforme et on note u θ le vecteur u θ =

cos(θ) sin(θ)

. On projette ensuite les points de X et les points de Y

orthogonalement sur la droite du plan passant par 0 et de vecteur directeur

u θ (voir la Figure 1.2). On obtient ainsi deux nouveaux nuages de points U

et V , qui peuvent être vus comme des nuages de points sur R .

(6)

θ

?

×

? ×

?

×

? ×

?

× ? ◦ ◦ ? ◦ ◦ ? ? ◦ ? θ

Figure 1.2 – Projections des nuages X et Y selon la direction θ. Après projection, on obtient un problème de mariage entre deux nouveaux nuages de points U et V en une dimension.

Déplacement des points de X. Une fois les vecteurs U et V calculés, on détermine les vecteurs de permutations s X et s Y qui ordonnent les pro- jections U et V , par exemple en leur appliquant la fonction transport1D de l’exercice 1.

Ensuite, on fait évoluer le nuage de points X dans la direction de u θ , proportionnellement au déplacement entre U et V . Plus précisément, on met à jour les positions de X par la formule

∀1 ≤ i ≤ n, X s

X

(i) = X s

X

(i) + ε (V s

Y

(i) − U s

X

(i) ) u θ ,

où ε > 0 est le pas de l’algorithme et est fixé par l’utilisateur.

Algorithme de Transport optimal par projections. On répète ces étapes de projection et de déplacement M fois, en tirant à chaque fois une nouvelle direction aléatoire θ pour la projection. Si le pas de l’algorithme ε est bien choisi et si le nombre d’itérations M est suffisamment grand, les points du nuage X doivent coïncider à la fin de l’algorithme avec ceux du nuage Y .

Au final, le pseudo-code de l’algorithme complet de transport approché peut s’écrire de la manière suivante :

Pseudo-code

Entrée : nuages X 0 et Y 0 , pas ε, nombre d’itérations M.

Sortie : nuage X déplacé et coût total de transport C.

Initialisez X = X 0 et Y = Y 0 .

(7)

for k = 1 to M do

Tirer θ aléatoirement dans ] − π/2, π/2] (loi uniforme).

U = projection(X, θ).

V = projection(Y, θ).

[s X , s Y ] = transport1D(U, V )

∀1 ≤ i ≤ n, X s

X

(i) = X s

X

(i) + ε (V s

Y

(i) − U s

X

(i) ) u θ Coût total C = P n

i=1 kX s 0

X

(i) − Y s 0

Y

(i) k 2 2 . Fin du pseudo-code

1. Ecrire une fonction [X, C] = transport(X 0 , Y 0 , N, ε) qui fait évoluer le nuage de points X 0 vers le nuage de points Y 0 et calcule le coût de transport entre eux grâce à l’algorithme précédent.

2. Afin d’accélérer l’algorithme, on décide de stopper les itérations de la boucle FOR lorsque le maximum sur k des distances kX s

X

(k) −Y s

Y

(k) k 2 est inférieur à un seuil δ fixé par l’utilisateur. Créer une nouvelle fonc- tion analogue à la précédente qui prend en compte ce raffinement et commenter.

3. Lancez l’algorithme plusieurs fois sur les mêmes données et observer les résultats obtenus. Les directions θ de projection étant choisies aléa- toirement au cours des étapes, le résultat de l’algorithme (à la fois le coût de transport C et la manière dont les points sont mariés) peut changer d’une expérience à l’autre. L’algorithme est-il stable en pra- tique ? Commenter la stabilité lorsque l’on change le nombre de points n des nuages, les valeurs du pas ε et le nombre d’itérations.

4. Pour rendre l’algorithme plus robuste, on peut imposer à chaque itéra- tion l’utilisation successive d’une direction θ et de sa direction ortho- gonale. On répète pour cela l’étape de projection et de déplacement des points de X d’abord avec le vecteur u θ =

cos(θ) sin(θ)

, puis avec le vecteur u θ

=

− sin(θ) cos(θ)

. Modifier le code transport pour prendre en compte cette amélioration.

5. Ecrire une fonction qui sur un même nuage de points lance une centaine de fois les deux versions de l’algorithme et renvoie l’échantillon des coûts correspondants. Comparer les deux algorithmes à l’aide de ces échantillons (histogrammes, moyenne/variance, tests ... ).

1.4 Question optionnelle

Décrire, implémenter et appliquer à un jeu réel ou simulé un algorithme

de transport en trois dimensions.

(8)
(9)

Chapitre 2

Structures de graphes

2.1 Définitions

Un graphe non orienté est un ensemble de points reliés par des arêtes sans orientation.

Matrice d’adjacence

Un graphe à n sommets peut être codé par une matrice d’adjacence symétrique A de taille n × n telle que

A ij =

1 si i et j sont voisins

0 sinon

Les coefficients diagonaux de la matrice sont nuls. La Figure 1 donne un exemple de graphe avec sa matrice d’adjacence.

v

1

v

2

v

4

v

3

v

5

v

6

A =

0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 1 1 0

Figure 2.1 – Exemple de graphe et de sa matrice d’adjacence

Degré et distribution des degrés

Le degré d’un sommet est son nombre de voisins. La distribution des degrés est le vecteur de longueur n qui, pour tout 0 ≤ k ≤ n − 1, donne la proportion des sommets ayant un degré k. La dsitribution des degrés du

9

(10)

graphe de la Figure 1 est par exemple (0, 1

3 , 2

3 , 0, 0, 0)

Composantes connexes

Une composante connexe d’un graphe est un ensemble maximal de som- mets qui peuvent être reliés deux à deux par des chemins dans les graphes (on peut aller d’un sommet à tous les points de sa composante connexe, mais pas aux points des autres composantes).

Le graphe de la Figure 1 a deux composantes connexes formées de {v 1 , v 2 , v 3 } et {v 4 , v 5 , v 6 }.

Graphes aléatoires

Soit n un entier et p une probabilité. Un graphe aléatoire d’Erdös-Rényi de paramètre n et p est un graphe à n sommets telle que chaque arête possible apparaît avec probablité p, les arêtes étant indépendantes.

2.2 Génération de graphes

1. Ecrire une fonction chemin(n) qui génère la matrice d’adjacence d’un chemin de longueur n. Les arêtes du chemin sont les arêtes du type (i, i + 1), 1 ≤ i ≤ n − 1.

2. Ecrire une fonction cycle(n) qui génère la matrice d’adjacence d’un cycle de longueur n. Il est obtenu à partir du chemin en ajoutant l’arête (1, n).

3. Ecrire une fonction graphealea(n,p), prenant en entrée un entier n et une probabilité p, et qui génère la matrice d’adjacence d’un graphe aléatoire d’Erdös-Rényi de paramètres n et p.

Une manière de faire cela (mais pas la seule !) est de créer une ma- trice nulle et de tirer A ij pour les i < j suivent une loi binomiale de paramètre p, le triangle opposé étant rempli par symétrie (A ji = 1 seulement si A ij = 1).

2.3 Voisinages et degrés

1. Ecrire une fonction voisins(A,i) qui pour un sommet i renvoie ses voisins dans le graphe de matrice d’adjacence A (ceux-ci peuvent être déduit d’un examen attentif de la i eme ligne de A).

2. Ecrire une fonction distributionDegre(A) qui renvoie la distribution

des degrés de A.

(11)

3. On considère des graphes aléatoires d’Erdös-Rényi de paramètre n et

λ

(n−1) (le degré moyen des sommets est alors égal à λ). On peut montrer que la loi des degrés des sommets tend, lorsque n tend vers l’infini, vers la loi de Poisson de paramètre λ.

Ecrire une fonction distanceToPoisson(n,lambda) qui (a) génère un graphe d’Erdös-Rényi de paramètres n et n−1 λ . (b) détermine la distribution des degrés de ce graphe.

(c) détermine la distance suivante de cette distribution avec la distri- bution de Poisson :

d = 1 n

n−1

X

k=0

(dd(k) − dpois(k, λ)) 2

où dd(k) et dpois(k, λ) désignent respectivement la proportion de sommets de degré k dans le graphe et la probabilité qu’une loi de Poisson P (λ) soit égale à k.

4. Tracer l’évolution de cette distance pour λ = 4 et n variant de 10 à 100 par pas de 10 pour illustrer cette convergence.

2.4 Composantes connexes, chapitre I

Soit B = (I + A) n , où n désigne toujours le nombre de sommets du graphe, A sa matrice d’adjacence et I est la matrice identité de taille n. On peut montrer qu’alors les sommets i et j sont dans la même composante connexe si et seulement si B ij > 0.

1. Ecrire une fonction ccPuissance(A,i) qui détermine la composante connexe du sommet i.

2. La copier et la modifier pour déterminer une fonction cc_max(A) qui détermine la taille de la plus grande composante connexe de G.

3. On veut étudier la taille de la plus grande composante connexe pour des graphes d’Erdös-Rényi de paramètres n et n−1 λ . Un résultat théorique montre qu’il y a un changement de phase pour λ = 1 : si les sommets ont un degré moyen inférieur à 1 (λ ≤ 1), toutes les composantes sont de taille O(log n), sinon (λ > 1) il y a une composante géante.

Ecrire une fonction cc_max_moyenne(n,lambda,N) qui détermine la taille moyenne de la plus grande composante connexe sur N tels graphes à n sommets.

Choisir une grille de λ et de n auxquels appliquer cette fonction et

afficher un graphique qui illustre le résultat théorique. On pourra par

exemple tracer l’évolution de la plus grande composante en fonction

de n, en traçant une courbe par valeur de λ.

(12)

2.5 Composantes connexes, chapitre II, et diamètre.

1. Une autre manière de découvrir toute la composante connexe d’un sommet v est le parcours en largeur (BFS pour Breadth-First Search) dont le principe est le suivant :

(a) On crée un vecteur visite ayant une coordonnée par sommet qui est initialisé à 0 (ou FALSE). Les sommets visités verront leur coordonnée passer à 1 (ou TRUE).

(b) On crée une file F (sous la forme d’un vecteur) qui est initialisé à F = {v} et on marque v comme visité.

(c) Tant que la file est non-vide,

— on extrait le premier élément de la file, noté w. w est supprimé de la file.

— on parcourt les voisins de w. Tout voisin non encore visité est marqué comme visité et est ajouté à la dernière position de la file.

L’ensemble des sommets visités lorsque cet algorithme s’arrête est exac- tement la composante connexe de v.

Ecrire une fonction ccBFS réalisant un parcours en largeur partant du sommet v dans un graphe de matrice d’adjacence A.

Vérifier sur un graphe aléatoire que vous obtenez bien les mêmes com- posantes connexes qu’avec la méthode ccPuissance.

2. L’algorithme BFS a pour avantage d’être efficace même sur des très grands graphes. Par ailleurs, on peut y introduire la notion de niveau : la racine v est de niveau 0, chaque sommet ajouté au BFS en tant que voisin non visité d’un sommet w se voit affecter le niveau de w augmenté de 1. Les sommets non explorés sont de niveau −1.

Alors, le niveau de chaque sommet u exploré par le BFS donne la distance de u à v, c’est-à-dire la longueur du plus court chemin entre u et v.

Créer une fonction ccBFS_niveau à partir de ccBFS pour y ajouter le calcul des niveaux.

3. Le diamètre d’un graphe est la distance maximale entre deux som- mets du graphe. Proposer et implémenter un algorithme qui détermine le diamètre d’un graphe. Générer des graphes d’Erdös-Rényi de para- mètres n et n 4 pour n entre 10 et 1000 et détermminer leur diamètre.

Que peut-on dire de la croissance du diamètre ? En fait, il augmente

en O(log n). Ce phénomène est appelé petit monde (small-world phe-

nomenon).

(13)

2.6 Question optionnelle

Proposer une étude comparant les temps d’execution des deux algo-

rithmes en fonction du nombre de sommets et d’arêtes du graphe.

(14)
(15)

Chapitre 3

Pagerank simplifié

3.1 Chaînes de Markov

On considère une chaîne de Markov discrète sur 4 états (A, B, C, D). Elle peut se définir à l’aide du graphe de la Figure 1 en considérant une marche aléatoire sur ce graphe. Le poids des arêtes sortante de chaque sommet vaut 1, ce qui permet de définir la marche aléatoire en définissant le sommet occupé à l’instant n + 1 en fonction de la loi définie par les arêtes sortantes du sommet occupé à l’instant n.

A

B C

D 0.3

0.3

0.1 0.5

0.1 0.1

0.3

0.3 0.4

0.3

0.2

0.3

0.2 0.7

On peut de façon équivalente la définir par la matrice stochastique P suivante, les lignes et les colonnes étant indicées par (A, B, C, D).

P =

0.3 0 0.2 0.5 0.1 0.3 0.3 0.3 0.1 0.4 0.3 0.2 0.1 0.2 0.7 0

15

(16)

La chaîne de Markov est alors un processus (X n ) n∈N tel que, pour tout états i et j, X n+1 ne dépend que de X n et

P(X n+1 = j|X n = i) = P ij

On note Π n la distribution de X n , qui dans ce cas est un vecteur de taille 4 sommant à 1.

1. Ecrire une fonction qui génère une trajectoire aléatoire de longueur N en fonction d’un état de départ et d’une matrice de transition P . 2. Si on s’intéresse aux distributions après n pas plutôt qu’à une trajec-

toire, on peut montrer que

t Π n+1 = t Π n P puis t Π n = t Π 0 P n

où Π 0 désigne la distribution initiale à choisir par l’utilisateur.

Ecrire une fonction qui permet de déterminer Π n en fonction d’une matrice P et d’une distribution initiale Π 0 . L’appliquer pour détermi- ner la distribution de la chaîne de l’exemple au bout de 100 pas si la position de départ est A.

3. Le théorème principal de la théorie des chaînes de Markov dit que sous des conditions d’apériodicité et d’irréductibilité de la chaîne (qui sont vérifiées par celle de l’exemple),

a) il existe une unique mesure invariante Π,

b) la suite Π n converge vers Π quelle que soit la mesure initiale Π 0 . Ecrire une fonction qui calcule Π n lorsque la suite a convergé. Pour cela, on écrira une fonction qui s’arrête lorsque la distance euclidienne entre Π n−1 et Π n devient plus petite qu’un certain (il est sage de prévoir également un nombre maximal d’itération au cas où cette convergence n’aurait pas lieu).

Déterminer, avec plusieurs positions initiales différentes, la distribution Π n après convergence. Vérifier qu’on obtient bien la même limite.

4. Ecrire une fonction qui détermine une mesure invariante d’un chaîne de matrice de transition P. Si possible, ne renvoyer la réponse que si cette mesure est unique, et un message d’erreur ou une valeur nulle si plusieurs mesures invariantes sont possibles (ce qui voudrait dire que la chaîne n’est pas irréductible).

Déterminer la mesure invariante de la chaîne de l’exemple et vérifier qu’elle correspond à la même limite que précédemment.

5. On considère une trajectoire (x n ) n≥0 . Le théorème ergodique des chaînes

de Markov est un théorème qui implique la relation suivante entre la

fréquene de passage en chaque état et la distribution invariante π :

(17)

Pour tout état i, lim

N→+∞

1 N

N

X

n=1

I x

n

=i = Π i où I désigne la fonction indicatrice.

Ecrire une fonction qui détermine Π en utilisant le théorème ergodique.

Tracer une fonction qui génère une longue trajectoire et trace un graphe illustrant cette convergence.

6. Considérons une chaîne apériodique irréductible, de distribution limite Π. Le spectre de P est alors de la forme {1, λ 2 , . . . , λ n } avec, pour tout i, |λ i | < 1. On décide de noter λ 2 la valeur propre différente de 1 qui est de plus gande valeur absolue. Il existe alors une constante C telle que

n − Πk 2 ≤ C|λ 2 | n

Tracer un graphique qui illustre l’existence de cette constante.

3.2 PageRank

L’idée de base de l’algorithme de PageRank est de rélaiser une marche aléatoire sur le graphe du web, où chaque noeud est une page web. Soit i une page (donc un noeud du graphe) et d + (i) le nombre de pages vers lesquelles elle contient un hyperlien (on considère que chaque page pointe vers elle-même).

Soit N le nombre total de pages. La probabilité de passer de la page i vers la page j est alors définie par

P ij =

β

N + d 1−β

+

(i) si i pointe vers j

β

N si i ne pointe pas vers j

L’algorithme calcule alors la mesure invariante pour une valeur de β bien choisie (en pratique, on peut prendre β = 0.15) et de classer les pages suivant leur valeur suivant cette mesure. L’idée sous-jacente étant que plus une page est centrale, plus l’algorithme y reviendra souvent.

1. On propose de simuler un graphe du web à N pages de la façon sui- vante : 10 pages sont pointées par un nombre de pages égal à 10, 10 par un nombre égal à 5 et le reste par un nombre égal à 3. Les pages pointant vers chacune sont tirées au sort aléatoirement.

Ecrire une fonction qui génère de tels graphes et garde en mémoire quelles pages sont de degré entrant 10 ou 5.

2. Appliquer les algorithmes de la partie précedente pour des simulations

pour N = 20, N = 50 et N = 100. Vérifier que les pages les plus

centrales sont bien classées en tête, et comparer les temps d’execution

(18)

3.3 Question optionnelle

Ecrire la matrice de transition de PageRank sous la forme P = β

N I + (1 − β)Q

où I est la matrice ne contenant que des 1 et Q ij est nul sauf si i pointe vers j.

La relation de récurrence des Π n peut alors se reécrire

t Π n+1 = β

N A + t Π n Q

où A est le vecteur dont toutes les coordonnées valent 1.

En pratique, le graphe du web est très grand, ce qui empêche de déter-

miner les valeurs propres ou de faire tourner des marches aléatoires suffisam-

ment logntemps. Utiliser la relation de récurrence précédente est cependant

possible car le produit matriciel peut être fait de façon efficace pour les ma-

trices creuses. En utilisant le package scipy.sparse.linalg , recoder cette

dernière méthode et vérifier qu’elle devient rapidement plus efficace que les

méthodes précédentes quand N grandit.

Références

Documents relatifs

Nous montrons que le nombre de points isolés du graphe converge, sous certaines hypothèses, vers une loi de Poisson.. Nous prouvons aussi une loi forte des

Reporte les longueurs des côtés de chaque quadrilatère sur la demi-droite ci-dessus à l'aide de ton compas.. Compare le périmètre de

Observe attentivement l'unité de longueur (1 u.l.) puis détermine le périmètre de chaque figure exprimé en unités de longueur.. Figure 1 2

Dans cette question, toute trace de recherche, même incomplète, ou d’initiative non fructueuse, sera prise en compte dans l’évaluation... Déterminer la fonction dérivée de f

f est donc paire et sa courbe admet bien (Oy) comme axe de symétrie.. f est dérivable sur IR comme composée de fonctions dérivables

Calculer les coordonnées des points d’intersection de la courbe C f avec les axes du repère.. On exprimera cette aire

En déduire la concentration molaire C S en ions chlorure initialement présents dans la solution S, puis celle C 0 dans le

3- Ne cessant d’améliorer notre commande, nous avons constaté qu’un phénomène d’oscillation de l’eau autour d’un niveau provoque de nombreux démarrage et arrêt