Ce cours présente des méthodes mathématiques et des outils pour aborder et résoudre des problèmes d’optimisation avec un grand nombre de variables ou de contraintes, tels qu’on les rencontre dans le domaine de la recherche opérationnelle ou dans les techniques modernes d’apprentissage automatique (machine learning).

La programmation mathématique est l'étude des programmes mathématiques : une fonction mathématique qu'on veut maximiser ou minimiser et des contraintes sous forme d'égalités ou d'inégalités. Un problème d'optimisation peut généralement s'écrire sous forme de programme mathématique, qu'on essaie ensuite de résoudre en utilisant un solveur ou en développant sa propre méthode. On distingue différentes classes de programmes mathématiques : programmes linéaires, programmes quadratiques, programmes non-linéaires, programmes stochastiques (lorsqu'il y a des variables aléatoires) etc...

De nos jours, les avancées mathématiques et algorithmiques ont permis aux solveurs d'être très performants, bien plus qu'on ne l'imaginait avant l'an 2000. Cela explique qu'ils soient de plus en plus utilisés, et que les équipes d'optimisation dans les entreprises comme dans le monde académique s'attaquent à des problèmes toujours plus gros, plus difficiles, voire à de nouvelles classes de problèmes qui semblaient hier encore hors de portée.

Ce cours présente un panorama des principales classes de programmes mathématiques rencontrées en optimisation, avec les théorèmes généraux à connaître, les principales méthodes de résolution et en allant vers la résolution pratique avec un solveur professionnel. Une partie des méthodes abordées sera illustrée par utilisation du solveur professionnel CPLEX.