bulaire, difficulté de la résolution en nombres entiers par rapport à la résolution en nombres réels,
modélisations particulières (report de stocks, minimisation d’une somme ou d’un maximum de
valeurs absolues), comment un modèle peut devenir gros. On insiste sur l’étude de la sensibilité
de l’objectif réalisé vis–à–vis d’une perturbation des paramètres. Cette information est particuliè-
rement importante pour l’aide à la décision : elle détermine les contraintes dont il faut s’affranchir
en priorité pour améliorer la situation. La mise en œuvre s’effectue avec le logiciel AMPL.
La troisième section est dédiée à l’étude de l’algorithme du simplexe qui constitue la prin-
cipale méthode de résolution de programmes linéaires en nombres réels. On commence par la
résolution graphique qui permet de soutenir l’intuition. On continue par l’algorithme du tableau
simplicial, qui permet de résoudre des problèmes de plus de deux variables, inaccessibles à la ré-
solution graphique. On aborde ensuite une méthode de résolution des problèmes de démarrage qui
montre comment résoudre les programmes linéaires en nombres réels généraux et qui fournit un
bel exemple de réduction de problème. On conclut par l’étude de la dualité dans les programmes
linéaires et d’une de ses principales applications : l’analyse de la sensibilité de l’objectif réalisé
vis–à–vis d’une perturbation des paramètres.
La quatrième section est consacrée à la théorie des graphes. Définitions (graphes orientés ou
non, connexité) et représentations informatiques d’un graphe (listes de successeurs, matrices d’in-
cidence ou d’adjacence). On y étudie quelques algorithmes génériques (parcours en profondeur ou
en largeur d’abord, tri topologique des sommets des graphes sans cycle) et quelques algorithmes
d’optimisation : recherche d’un chemin de valeur minimale (Bellman, Dijkstra), calcul d’un flot
de valeur maximale (Ford–Fulkerson), d’un arbre couvrant de valeur minimale (Kruskal) et d’un
ordonnancement de tâches optimal (méthode MPM). En même temps que le principe des algo-
rithmes, on étudie les preuves de correction ainsi que les meilleures structures de données connues
permettant de les implanter (piles, files, files avec priorité, ensembles disjoints). Ces structures
étant précisées, on obtient une borne de complexité en temps, dans le pire des cas, des méthodes.
On montre aussi comment certains de ces problèmes peuvent se coder au moyen de programmes
linéaires, ce qui est très utile dès qu’on a affaire à une variante exotique d’un des problèmes étu-
diés (flot maximal à coût minimal, flot maximal avec déperdition du flux le long du réseau par
exemple). Des compléments sur le langage du logiciel AMPL sont donnés en dernière section.
Ce cours est évidemment très incomplet. Parmi les grandes absentes, mentionnons toute la
branche « mathématiques appliquées » de l’optimisation.
Ce cours a été rédigé et mis à jour par François Boulier jusqu’en 2008, en collaboration avec
Carine Jauberthie et Nicolas Jozefowiez. Ce cours est maintenant réutilisé et mis à jour par François
Lemaire. Jusqu’en 2014, le cours s’appelait ALGO. Le contenu du support n’a pas changé lors du
changement de nom, mais le contenu du cours a légérement changé pour mettre plus en avant la
conception et la modification de librairie de manipulation des graphes.
La version originale du support a été réalisée à partir des notes de cours de Bernhard Becker-
mann (une importante source d’inspiration pour la théorie du simplexe et ses applications), Florent
Cordellier, Gérard Jacob, Nathalie Revol et des livres [5] (pour AMPL), [7] (riche d’une douzaine
de très intéressants problèmes de modélisation), [4] [3] (pour la théorie des graphes) et [1] (pour
la méthode des moindres carrés). Sans oublier [2] pour certaines informations historiques.
La plupart des photographies incluses dans le support de cours proviennent du site [6] de l’uni-
2