La programmation par contraintes est un domaine de l’intelligence artificielle apparu dans les années 70 qui a connu ses premiers succès dans les années 90, en résolvant des problèmes combinatoires qui jusque là résistaient aux techniques mathématiques standard. Aujourd’hui ces méthodes sont très utilisées, non seulement en raison de leur efficacité, mais aussi parce qu'elles se comprennent bien et s’adaptent facilement lorsque le problème à résoudre évolue. On présentera les situations dans lesquelles utiliser la programmation par contraintes, ses avantages ainsi que les principales techniques conduisant à des solveurs de contraintes efficaces. Cette UE est composée de cours, de travaux dirigés et de travaux dirigés de programmation dans lesquels les étudiants doivent modéliser des problèmes concrets et les résoudre avec un solveur de contraintes.