Algorithmique avancée

M1 Informatique pour la Science des Données, Université Paris-Saclay, Faculté d’Orsay

Page web, ENT eCampus

«L’objectif de ce cours est de fournir des outils et techniques algorithmiques de pointe aux apprentis. Étude de l’algorithmique sur les graphes (plus courts chemins, tri topologique, …), les techniques de mémorisation, de programmation dynamique et de backtracking. Présentation de la notion de flots et des algorithmes de calcul de flot maximal. Enfin, les thèmes des algorithmes online et approchés seront abordés.»

Vue d’ensemble

Les notions du cours seront abordées par la pratique, tout d’abord par l’implantation de structures de données de graphes, puis leur utilisation pour résoudre quatre problèmes.

Structures de données pour les graphes

Problème 1: Le chemin le plus rapide en métro de Montgallet à Billancourt ?

../_images/metro-paris1.gif

Problème 2: Rush Hour

La voiture rouge est coincée dans un embouteillage; comment déplacer les véhicules pour la faire sortir? Ci-dessous le défi 1. Saurez-vous faire résoudre par l’ordinateur le défi 40 en un nombre minimum du coups?

../_images/rush_hour1.gif

Problème 3: Faire passer le maximum de courant

../_images/reseau-electrique.png

Problème 4: Fabriquer et résoudre des labyrinthes

../_images/labyrinthe.png

Planning (à finir de mettre à jour)

3 semaines avec 3h + 1h + 3h: Cours + TD + TP intégré

Graphes, structures de données, terminologie (Nicolas)

16 mars 2021 9:00-12:15 présentiel (Cours + TD + TP)

16 mars 2021 après-midi: travail en autonomie avec aide à distance 14:00-15:00

Plus courts chemins (Nicolas)

18 mars 2021 13:30-16:45 (Cours + TD + TP)

Réseaux et flots (Viviane)

Semaine du 23 mars 2021

Arbres couvrants (Florent)

Modalités d’évaluation (à mettre à jour)

L’évaluation se fera sur les rendus de TP (CC), ainsi que sur un examen (ET1 / ET2)

Session 1 : 1/3 CC + 2/3 ET1

Session 2 : 1/3 CC + 2/3 ET2

Annales

  • Examen 2017-2018, avec correction

Environnement de travail

  • Language de programmation: Python

  • Environnement interactif: Jupyter + networkx + matplotlib + …

Dans cette section, nous expliquons:

  • Comment accéder aux logiciels requis

  • Comment télécharger et déposer vos devoirs

Les instructions font l’hypothèse que vous travaillerez pour ce cours dans votre répertoire ~/M1-ISD/AlgorithmiqueAvancee. Vous pouvez choisir un autre nom.

Utilisation des logiciels en ligne

L’université Paris-Saclay mets à votre disposition un service JupyterHub@Paris-Saclay sur lequel sont installés tous les logiciels requis. Vous pouvez vous identifier avec vos identifiants usuels de l’université (Adonis).

Il est aussi possible d’utiliser un des nombreux services Jupyter en ligne tels CoCalc; ce dernier ne gère pas bqplot cependant.

Alternativement, vous pouvez installer les logiciels sur votre machine et travailler en local.

Installation de l’environnement de travail

Ce cours utilise Python, Jupyter et quelques bibliothèques classiques (voir le fichier environment.yml), ainsi que quelques paquets Python plus ou moins maison.

Avec miniconda (ou micromamba, …)

  • Téléchargez la «salle de TP virtuelle»:

    git clone https://gitlab.u-psud.fr/M1-ISD/AlgorithmiqueAvancee/ComputerLab.git ~/M1-ISD/AlgorithmiqueAvancee
    
  • Installer le gestionnaire de paquets conda:

    Voir son guide d’installation

  • Installez les logiciels requis:

    cd ~/M1-ISD/AlgorithmiqueAvancee
    conda env create
    ./postBuild
    
  • Pour lancer Jupyter, taper:

    conda activate algo-avancee
    jupyter notebook
    
  • Il peut arriver que la liste des logiciels soit mise à jour en cours de semestre. Dans ce cas, depuis le terminal ouvert sur le même dossier, taper:

    conda env update
    

Avec pip

  • Téléchargez la «salle de TP virtuelle»:

    git clone https://gitlab.u-psud.fr/M1-ISD/AlgorithmiqueAvancee/ComputerLab.git ~/M1-ISD/AlgorithmiqueAvancee
    
  • Assurez vous que vous avez toutes les bibliothèques requises (voir le fichier environment.yml).

  • Installez les paquets Python «maison»:

    cd ~/M1-ISD/AlgorithmiqueAvancee
    pip install .
    ./postBuild
    

Avec Docker

Une image docker du cours est fournie dans le Container Registry du projet Gitlab du cours. Voici son identifiant:

gitlab.u-psud.fr:5050/m1-isd/algorithmiqueavancee/computerlab/image:latest

Téléchargement et dépôt des TPs

Les sujets sont donnés sous forme de dépôt git sur https://gitlab.u-psud.fr . Vous utiliserez git pour le télécharger et le déposer sous la forme d’un fork. La correction se fera en partie automatiquement par intégration continue. Il y a un script pour automatiser le processus.

Mise en place la première fois

Activation compte gitlab.u-psud.fr
  • Connectez vous à https://gitlab.u-psud.fr

  • Cliquez sur le boutton Sign-In en haut à droite pour vous authentifier avec vos identifiants de l’université (Adonis). Ils sont de la formePrenom.Nom.

Téléchargement de la «salle de TP virtuelle»

git clone https://gitlab.u-psud.fr/M1-ISD/AlgorithmiqueAvancee/ComputerLab.git ~/M1-ISD/AlgorithmiqueAvancee

Configuration de git

Lancez les commandes suivantes dans le terminal après y avoir mis respectivement votre mail et votre nom:

git config --global user.email "prenom.nom@u-psud.fr"
git config --global user.name "Prénom Nom"

Téléchargement et dépôt des TPs avec travo

L’environnement de cours fournit un script qui automatise le téléchargement et le dépôt de votre travail. Consultez sa documentation avec:

python -m isd_algo_avancee

Pour le moment ce script est psychorigide: votre répertoire de travail sera forcément dans ~/M1-ISD/AlgorithmiqueAvancee/1-StructuresDeDonnees. Cela devrait être corrigé sous peu.

Voir ci-dessous sur ce que cela fait, et comment faire pareil à la main, si vous le souhaitez.

Alternative: récupérer les sujets de TP à la main

  • Ouvrez le dépôt git de la séance du jour dans votre navigateur:

    https://gitlab.u-psud.fr/M1-ISD/AlgorithmiqueAvancee/2020-2021/

    Par exemple:

    https://gitlab.u-psud.fr/M1-ISD/AlgorithmiqueAvancee/2020-2021/1-StructuresDeDonnees

  • Faites une copie personnelle du dépôt avec le bouton Fork

  • Bonus:

    • Renommer le dépôt obtenu pour ajouter un préfixe précisant le cours

    • Permettre aux enseignants d’accéder à votre dépôt: ajouter Viviane Pons, Florent Hivert et Nicolas Thiéry comme membres du projet, avec permissions “Mainteneurs” (Settings -> Members).

    • Basculez la visibilité de votre dépôt en privé (Settings -> General -> Permissions).

  • Copiez l’adresse du dépôt (à droite du bouton Fork); elle devrait être de la forme

    https://gitlab.u-psud.fr/<prenom.nom>/<TP>

  • Téléchargez votre copie personnelle:

    Dans le terminal:

    cd ~/M1-ISD/AlgorithmiqueAvancee
    git clone https://...
    

    où https://… est l’adresse que vous avez copiée.

Ouvrez les feuilles Jupyter et suivez les instructions dans les fiches successives README, 00-, 01-, … ansi que Rapport.ipynb

Déposer votre travail

Pour déposer votre travail:

 git commit -m "Travail" .
 git push

Cela vous demandera vos identifiants et login Adonis.

Vous pouvez déposer votre travail aussi souvent que vous le souhaitez. Seule la dernière version disponible au moment de la correction sera prise en compte.

Vous pouvez consulter les résultats des tests automatiques en navigant sur votre «fork» du dépôt:

https://gitlab.u-psud.fr/prenom.nom/<TP>

puis barre de menu de gauche -> CI -> Pipelines -> Badge failed ou passed -> test. Le badge devrait être à passed dans tous les cas.