À retenir
- C'est une programmation déclarative : on dit « quoi » résoudre, pas « comment ».
- Elle est imbattable pour résoudre des casse-têtes logiques complexes.
- Elle repose sur un « solveur », un moteur logiciel qui cherche la solution à notre place.
C'est une méthode de programmation où l'on explique à l'ordinateur les règles et les limites d'un problème plutôt que de lui donner la liste des étapes pour le résoudre. Imaginez que vous donniez à un ami les règles du Sudoku (chaque chiffre de 1 à 9 par ligne, colonne et carré) au lieu de lui dire exactement quel chiffre mettre dans chaque case : c'est exactement le principe.
Étymologie
Le terme est apparu vers 1980, issu des recherches en intelligence artificielle et en programmation logique (comme le langage Prolog). Il vient de l'idée de soumettre des variables à des contraintes mathématiques ou logiques qui restreignent l'espace des solutions possibles.
Exemples d'usage
- La création automatique d'un emploi du temps scolaire en évitant que deux professeurs soient dans la même salle au même moment.
- L'optimisation du trajet d'un livreur qui doit passer par 20 points différents en consommant le moins de carburant possible.
- La configuration d'un ordinateur sur mesure où certaines pièces ne sont compatibles qu'avec d'autres.
Cas d'usage
On l'utilise principalement dans la logistique, la planification industrielle, l'aide à la décision et partout où il faut choisir la meilleure option parmi des millions de combinaisons possibles (problèmes dits combinatoires).
Bonnes pratiques
Pour être efficace, il faut déclarer les contraintes les plus "fortes" (les plus restrictives) en premier. Cela permet au programme d'éliminer très vite des milliers de mauvaises solutions sans avoir à les tester, ce qu'on appelle l'élagage.
Synonymes
Antonymes
Conseil
Si vous débutez, commencez par explorer des bibliothèques comme Google OR-Tools ou des langages comme MiniZinc. Ils permettent de s'initier à la modélisation sans avoir à construire le moteur de résolution soi-même.
Questions fréquentes
Quelle est la différence avec la programmation habituelle ?
En programmation classique, vous écrivez une recette de cuisine. En programmation par contraintes, vous donnez la liste des ingrédients autorisés et le goût final voulu, et l'ordinateur trouve la recette.
Est-ce que c'est difficile à apprendre ?
La logique est différente et demande un temps d'adaptation, car il faut apprendre à modéliser un problème sous forme de règles mathématiques.